728x90
반응형

CMakeFetchContent 모듈 : 의존성 빌드

  • FetchContentCMake에서 외부 의존성을 쉽게 가져오고 빌드할 수 있도록 도와주는 모듈입니다.
  • ExternalProject와 유사하지만, 더 직관적이고 CMake 내부에서 자연스럽게 통합할 수 있도록 설계되었습니다.


1. FetchContent 기본 사용법

1.1. 모듈 포함

  • cmake

      include(FetchContent)
    

1.2. 패키지 가져오기

  • cmake

      FetchContent_Declare(
          googletest
          GIT_REPOSITORY https://github.com/google/googletest.git
          GIT_TAG        release-1.12.1
      )
    
      FetchContent_MakeAvailable(googletest)
    

  • 위 코드는 googletestGit에서 받아와 현재 프로젝트에서 사용 가능하도록 설정합니다.
  • git의 최신 코드를 받으려면 GIT_TAG master로 설정하면 됩니다.


2. FetchContent 주요 함수

2.1. FetchContent_Declare()

  • cmake

      FetchContent_Declare(
      <이름>
      GIT_REPOSITORY <URL>
      GIT_TAG <브랜치/태그>
      SOURCE_DIR <경로>
      BINARY_DIR <경로>
      )
    

  • 외부 프로젝트를 정의합니다.
  • Git, HTTP, Local Path 등 다양한 방법으로 소스를 가져올 수 있습니다.

2.2. FetchContent_MakeAvailable()

  • cmake

      FetchContent_MakeAvailable(<이름>)
    

  • FetchContent_Declare()로 정의한 프로젝트를 다운로드하고 빌드 시스템에 포함합니다.
  • add_subdirectory()와 유사하게 동작하며, 별도의 add_subdirectory() 호출 없이 자동으로 처리됩니다.


2.3. 예제: fmt 라이브러리 가져오기

  • 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 실행 파일에서 사용합니다.


2.4. FetchContent vs ExternalProject

  • 기능 FetchContent ExternalProject
    빌드 시점 Configure 단계에서 처리 Build 단계에서 처리
    통합 방식 add_subdirectory()와 유사 독립적인 외부 프로젝트로 관리
    사용 용도 내부에서 직접 라이브러리 활용 별도 빌드가 필요한 프로젝트
  • FetchContent는 프로젝트와 동일한 CMake 빌드 시스템을 공유하는 경우에 적합합니다.

  • ExternalProject는 별도로 빌드해야 하는 외부 바이너리를 가져올 때 적합합니다.



2.5. FetchContent 내부 캐싱

  • CMakeFetchContent를 통해 다운로드한 패키지를 CMakeCache.txt에 저장하며, 이미 다운로드된 경우 다시 가져오지 않습니다.

  • 필요하면 CMakeCache.txt를 삭제하거나 다음과 같이 강제로 업데이트할 수 있습니다.

  • cmake

      FetchContent_Populate(<이름> QUIET)
    


6. FetchContent + CMake 옵션 사용

  • 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)
    

  • 특정 라이브러리의 옵션을 설정하여 원하는 형태로 빌드할 수도 있습니다.


정리

  • FetchContentCMake에서 외부 의존성을 쉽게 관리하는 강력한 도구입니다.
  • 기존 ExternalProject보다 더 직관적이며, 프로젝트 내부에 자연스럽게 통합할 수 있습니다.
  • Git 리포지토리, 로컬 디렉토리 등을 활용해 다양한 방식으로 패키지를 불러올 수 있습니다.

  • 📌 CMake에서 외부 라이브러리를 관리할 때 FetchContent를 적극 활용하면 빌드 과정이 훨씬 간결해집니다.
728x90
반응형

+ Recent posts