github 등 외부 URL 의 cmake project 를 다운받아 빌드 수행
참고: CMake ExternalProject module
예제
https://github.com/bjtj/tjsamples/tree/main/cmake/external-project- github 에 올라간 osl-c (cmake project) 를 불러와 사용하기
CMakeLists.txt 일부분
include(ExternalProject)
ExternalProject_Add(oslc
GIT_REPOSITORY https://github.com/bjtj/osl-c.git
GIT_TAG 1.0.0
EXCLUDE_FROM_ALL TRUE
BUILD_COMMAND cmake --build .
STEP_TARGETS build
)
설명:
- BUILD_COMMAND 를 cmake --build 로 설정하면 cross platform 하게 빌드를 수행
- powershell (windows), bash shell (linux) 에서 동일하게 cmake --build <dir> 로 빌드 수행 가능하여 편리함
- cmake project 가 아니라면 manual 하게 따로 설정해야함 (e.g. autoconf)
set(oslc_BINARY_DIR "${CMAKE_BINARY_DIR}/oslc-prefix/src/oslc-build")
set(oslc_SOURCE_DIR "${CMAKE_BINARY_DIR}/oslc-prefix/src/oslc/src")
add_dependencies(hello oslc-build)
if(UNIX AND NOT APPLE)
target_link_libraries(hello ${oslc_BINARY_DIR}/libosl.so)
endif()
if(MSVC)
target_link_libraries(hello ${oslc_BINARY_DIR}/Debug/osl.lib)
add_custom_command(TARGET hello POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
"${oslc_BINARY_DIR}/Debug/osl.dll"
$<TARGET_FILE_DIR:hello>)
endif()
target_include_directories(hello PUBLIC ${oslc_SOURCE_DIR})
설명:
- 주의) 예제의 oslc 를 실제 사용하는 라이브러리로 수정할 것
- 빌드 수행 결과물을 link 해 줘야 함
- LINUX 는 .so 파일을 링크
- if(UNIX AND NOT APPLE)
target_link_libraries(hello ${oslc_BINARY_DIR}/libosl.so)
endif()
- MSVC 는 .lib 파일을 링크 + 빌드 수행 후 .dll 파일을 결과 폴더에 복사
- if(MSVC)
target_link_libraries(hello ${oslc_BINARY_DIR}/Debug/osl.lib)
add_custom_command(TARGET hello POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
"${oslc_BINARY_DIR}/Debug/osl.dll"
$<TARGET_FILE_DIR:hello>)
endif()