728x90
반응형
FetchContent
는CMake
에서 외부 의존성을 쉽게 가져오고 빌드할 수 있도록 도와주는 모듈입니다.ExternalProject
와 유사하지만, 더 직관적이고CMake
내부에서 자연스럽게 통합할 수 있도록 설계되었습니다.
-
cmake
include(FetchContent)
-
cmake
FetchContent_Declare( googletest GIT_REPOSITORY https://github.com/google/googletest.git GIT_TAG release-1.12.1 ) FetchContent_MakeAvailable(googletest)
- 위 코드는
googletest
를Git
에서 받아와 현재 프로젝트에서 사용 가능하도록 설정합니다. git
의 최신 코드를 받으려면GIT_TAG master
로 설정하면 됩니다.
-
cmake
FetchContent_Declare( <이름> GIT_REPOSITORY <URL> GIT_TAG <브랜치/태그> SOURCE_DIR <경로> BINARY_DIR <경로> )
- 외부 프로젝트를 정의합니다.
Git
,HTTP
,Local Path
등 다양한 방법으로 소스를 가져올 수 있습니다.
-
cmake
FetchContent_MakeAvailable(<이름>)
FetchContent_Declare()
로 정의한 프로젝트를 다운로드하고 빌드 시스템에 포함합니다.add_subdirectory()
와 유사하게 동작하며, 별도의add_subdirectory()
호출 없이 자동으로 처리됩니다.
-
cmake
cmake_minimum_required(VERSION 3.14) project(MyProject) include(FetchContent) FetchContent_Declare( fmt GIT_REPOSITORY https://github.com/fmtlib/fmt.git GIT_TAG 9.1.0 ) FetchContent_MakeAvailable(fmt) add_executable(main main.cpp) target_link_libraries(main PRIVATE fmt)
fmt
라이브러리를 가져와 프로젝트에 통합하고,main
실행 파일에서 사용합니다.
-
기능 FetchContent ExternalProject 빌드 시점 Configure 단계에서 처리 Build 단계에서 처리 통합 방식 add_subdirectory()와 유사 독립적인 외부 프로젝트로 관리 사용 용도 내부에서 직접 라이브러리 활용 별도 빌드가 필요한 프로젝트 -
FetchContent
는 프로젝트와 동일한 CMake 빌드 시스템을 공유하는 경우에 적합합니다. -
ExternalProject
는 별도로 빌드해야 하는 외부 바이너리를 가져올 때 적합합니다.
-
CMake
는FetchContent
를 통해 다운로드한 패키지를CMakeCache.txt
에 저장하며, 이미 다운로드된 경우 다시 가져오지 않습니다. -
필요하면
CMakeCache.txt
를 삭제하거나 다음과 같이 강제로 업데이트할 수 있습니다. -
cmake
FetchContent_Populate(<이름> QUIET)
-
cmake
FetchContent_Declare( spdlog GIT_REPOSITORY https://github.com/gabime/spdlog.git GIT_TAG v1.10.0 ) set(SPDLOG_FMT_EXTERNAL ON CACHE BOOL "" FORCE) # fmt 사용 설정 FetchContent_MakeAvailable(spdlog)
- 특정 라이브러리의 옵션을 설정하여 원하는 형태로 빌드할 수도 있습니다.
FetchContent
는CMake
에서 외부 의존성을 쉽게 관리하는 강력한 도구입니다.- 기존
ExternalProject
보다 더 직관적이며, 프로젝트 내부에 자연스럽게 통합할 수 있습니다. Git
리포지토리, 로컬 디렉토리 등을 활용해 다양한 방식으로 패키지를 불러올 수 있습니다.
- 📌
CMake
에서 외부 라이브러리를 관리할 때FetchContent
를 적극 활용하면 빌드 과정이 훨씬 간결해집니다.
728x90
반응형
'CMake' 카테고리의 다른 글
CPM.cmake (CMake Package Manager) : 설정이 필요 없는 크로스 플랫폼, 재현 가능한 종속성 관리를 위한 CMake용 패키지 관리자 (0) | 2025.04.07 |
---|---|
cmrc : CMake 프로젝트에서 리소스를 바이너리에 포함 (0) | 2025.03.11 |
Objective-C CMake file (Executable file) (0) | 2024.11.09 |