CMake ExternalProject 시작하기

5767 단어 CMake
CMake ExternalProject 모듈을 사용하는 방법에 대한 일본어 기사가 적다고 느꼈기 때문에, 망비록도 겸해.

ExternalProject 란 무엇입니까?



소스 트리 외부에서 다른 프로젝트를 가져와 빌드, 설치까지 해 버리는 기능입니다.

언제 편리합니까?



*unix계 OS라면 대부분의 라이브러리는 apt 이나 yum , pacman ExternalProject가 제공하는 ExternalProject_Add를 사용하여 외부 종속 라이브러리 설정을 자동화 할 수 있습니다.

샘플



OpenGL 계열의 라이브러리 glfw에 의존하는 프로그램을 예로 합니다. 먼저 CMakeLists.txt몇 가지 포인트를 열거해 갑니다.
cmake_minimum_required(VERSION 3.0)

project(Test)

### Configure Dependency install path, include path and library path
set(DEPEND_LIB_ROOT ${PROJECT_BINARY_DIR}/Depends)
set(CMAKE_PREFIX_PATH ${DEPEND_LIB_ROOT})
include_directories(${DEPEND_LIB_ROOT}/include)
link_directories(${DEPEND_LIB_ROOT}/lib)

### Create Target "Test"
add_executable(Test main.cpp)
target_link_libraries(Test glfw3)

### Load External Project
include(ExternalProject)
ExternalProject_Add(
  ### Target name
  GLFW3
  ### Path to Git repository
  GIT_REPOSITORY https://github.com/glfw/glfw
  ### Specify TAG
  GIT_TAG 3.1.2
  ### Path to source tree
  SOURCE_DIR ${DEPEND_LIB_ROOT}/src/glfw
  ### Specify Generator
  CMAKE_GENERATOR "NMake Makefiles"
  ### Add cmake args CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${DEPEND_LIB_ROOT} -DCMAKE_BUILD_TYPE=Release
  ### Path to build tree
  BINARY_DIR ${DEPEND_LIB_ROOT}/build/glfw
  BUILD_COMMAND nmake INSTALL_COMMAND nmake install
)

### Test depends
add_dependencies(Test GLFW3)

ExternalProject 로드


include(ExternalProject)

에서 ExternalProject_Add 를 사용할 수 있게 됩니다.

외부 프로젝트 설정


ExternalProject_Add 에서 외부 라이브러리를 설정하지만 인수로 어떤 단계에서
사용되는가 하는 것이 정해져 있습니다. 자주 사용되는 것은 다음 단계라고 생각합니다.
  • Download step
  • Update/Patch step
  • Configure step
  • Install step
  • Test step

  • 이번 예제를 바탕으로 각 단계에서 무엇을 하고 있는지 설명합니다.

    Download step



    다운로드 단계에서는 외부 프로젝트의 위치 등에 대해 설정할 수 있습니다.
    이 예에서는 GIT_REPOSITORY로 지정된 URL에서 clone하여 GIT_TAG로 지정했습니다.
    태그를 checkout하도록 지시합니다.
    ExternalProject_Add(
      GLFW3
      GIT_REPOSITORY https://github.com/glfw/glfw
      GIT_TAG 3.1.2
    )
    

    Update step



    이번에는 사용하지 않습니다. 플랫폼 별 patch 등은 이 단계에서 적용합니다.

    Configure Step


    ExternalProject_Add(
      SOURCE_DIR path/to/source
      CMAKE_GENERATOR "NMake Makefiles"
      CMAKE_ARGS -DCMAKE_INSTALL_REFIX="..."
    )
    

    소스 파일의 배치 장소, 및 CMake 의 제네레이터, 인스톨처의 지정등을 실시하고 있습니다.

    빌드 단계


    ExternalProject_Add(
      ##...
      BINARY_DIR ${DEPEND_LIB_ROOT}/build/glfw
      BUILD_COMMAND nmake
    )
    

    빌드 관련 설정입니다. BINARY_DIR 이 예제는 Configure step에서 지정한 설정으로 cmake 실행
    디렉토리입니다.BUILD_COMMAND 는 Configure step 에서 지정한 제너레이터와 함께합시다.

    Install step


    ExternalProject_Add(
      ##...
      INSTALL_COMMAND nmake install
    )
    

    설치 명령 지정입니다. Linux계라면 make install 가 될까 생각합니다.
    이 근처 별도 환경마다 체크하는 기구가 필요할까 생각합니다.

    종속성 추가


    ExternalProject_Add 에 추가된 새 타겟과 기존 타겟의 종속성
    써주세요. 이렇게하면 먼저 GLFW3 빌드 -> Test 빌드가됩니다.
    add_dependencies(Test GLFW3)
    

    요약



    를 보시면 알겠지만 이번에 사용한 Git 이외에도 bzr 이나 Mercurial 등 꽤 다양한 툴로 소스의 취득이 가능합니다. 단지 autotools로 작성된 프로젝트라면 Windows 환경에서는 MSYS2에 의존하거나 등이 필요 수 있습니다.

    좋은 웹페이지 즐겨찾기