[CMake] 다른 프로젝트 참조 방법
Updated:
git submodule 이용
- git 저장소 안에 다른 git 저장소를 디렉토리로 분리해 넣는 방법
- git을 이용하기 때문에 명시적인 표현이 가능
- 프로젝트에서 참조하는 다른 프로젝트들의 리스트를 본다거나 수정을 할 수 있음
- 사용 방법이 썩 쉽지가 않고 최초 설정 이후에도 clone을 하면 init, update 등의 추가 과정이 필요함
- 한번의 컴파일로 make 옵션을 다르게 줄 수 있는 방법을 찾지 못함
- Git 도구 - 서브모듈
cmake의 FetchContent 이용
- 컴파일 시점에 git repository 정보를 통해 프로젝트를 가져와서 컴파일까지 수행해주는 방법
- 사용방법이 쉽고 최초 설정 이후 추가 과정이 없음
- 프로젝트가 변경되면 컴파일 시 자동반영
- 빌드가 필요한 경우
include(FetchContent) set(TARGET_NAME "googletest") set(ALIAS_NAME "lib::${TARGET_NAME}") FetchContent_Declare( ${TARGET_NAME} GIT_REPOSITORY https://github.com/google/googletest.git GIT_TAG release-1.11.0 ) FetchContent_MakeAvailable(${TARGET_NAME}) add_library(${ALIAS_NAME} ALIAS gtest)
- 빌드가 필요 없는 경우(헤더만 있는 경우)
include(FetchContent) set(TARGET_NAME "rabbit") set(ALIAS_NAME "lib::${TARGET_NAME}") FetchContent_Declare( ${TARGET_NAME} GIT_REPOSITORY https://github.com/mashiro/rabbit.git GIT_TAG master ) FetchContent_GetProperties(${TARGET_NAME}) if(NOT ${TARGET_NAME}_POPULATED) FetchContent_Populate(${TARGET_NAME}) add_library(${TARGET_NAME} INTERFACE) add_library(${ALIAS_NAME} ALIAS ${TARGET_NAME}) set_target_properties( ${TARGET_NAME} PROPERTIES INTERFACE_INCLUDE_DIRECTORIES ${${TARGET_NAME}_SOURCE_DIR} ) endif()