CMake에서 GitHub에서 Boost를 가져와 정적 링크

3014 단어 C++macosCMakeboost
CMake에 대해서는 예의 연구중이므로 best적인 방법은 아니라고 생각합니다.

환경



macOS 10.13.1
CMake 3.9.5
Boost 1.65.1
CLion 2017.3

프로젝트 구성



엉망이지만 다음과 같은 구성으로 cli에 Boost 라이브러리를 정적 링크합니다.
.
├── CMakeLists.txt
├── cli
│   ├── CMakeLists.txt
│   └── cli.cpp
└── vendor
    └── boost
        └── boost.cmake

CMakeLists.txt를 작성하는 방법



프로젝트 루트의 CMakeLists.txt에 대한 설명은 다음과 같습니다 (일부 생략 됨). 중요한 것은 include(ExternalProject) 로, 이것을 기재하는 것으로 외부로부터 Boost 를 받아들일 수 있게 됩니다.
cmake_minimum_required(VERSION 3.9.5)

...(省略)...

add_subdirectory(cli)

...(省略)...

include(ExternalProject)

include(${PROJECT_SOURCE_DIR}/vendor/boost/boost.cmake)

또한 ./vendor/boost/boost.cmake의 내용은 다음과 같습니다.
set(Boost_Bootstrap_Command ./bootstrap.sh)
set(Boost_b2_Command ./b2 toolset=clang install
        --prefix=${CMAKE_BINARY_DIR}/INSTALL
        --threading=single,multi
        --link=static
        --variant=debug
        --address-model=64
        --stagedir=stage/x64
        -j2
)
ExternalProject_Add(boost
        GIT_REPOSITORY    https://github.com/boostorg/boost.git
        GIT_TAG           boost-1.65.1
        BUILD_IN_SOURCE   1
        CONFIGURE_COMMAND ${Boost_Bootstrap_Command}
        BUILD_COMMAND     ${Boost_b2_Command}
        INSTALL_COMMAND   ""
        PATCH_COMMAND     ""
        UPDATE_COMMAND    ""
        INSTALL_DIR       ${CMAKE_BINARY_DIR}/INSTALL
)
INSTALL_DIR를 지정하여 프로젝트에 Boost 라이브러리를 설치하려고합니다. 또, b2 의 옵션에 대해서는 boostjp 이나 장부 st. 오 rg 를 참고로 했습니다. GitHub에 게시된 CMake 프로젝트에서도 많은 것을 배울 수 있다고 생각합니다. 마지막으로 ./cli/CMakeLists.txt 의 내용입니다.
set(SOURCE_FILES cli.cpp)
add_executable(cli ${SOURCE_FILES})

add_dependencies(cli boost)
set(BOOST_LIBRARIES
    ${CMAKE_BINARY_DIR}/INSTALL/lib/libboost_atomic.a
    ${CMAKE_BINARY_DIR}/INSTALL/lib/libboost_date_time.a
    ${CMAKE_BINARY_DIR}/INSTALL/lib/libboost_regex.a
    ${CMAKE_BINARY_DIR}/INSTALL/lib/libboost_serialization.a
    ${CMAKE_BINARY_DIR}/INSTALL/lib/libboost_system.a
    ${CMAKE_BINARY_DIR}/INSTALL/lib/libboost_thread.a
    ${CMAKE_BINARY_DIR}/INSTALL/lib/libboost_wserialization.a
)

include_directories(${CMAKE_BINARY_DIR}/INSTALL/include)

target_link_libraries(cli PRIVATE ${BOOST_LIBRARIES})
target_link_libraries 에서 cli 에 Boost 라이브러리를 연결합니다.

요약



Boost.Asio 등을 사용하고 싶은 경우는 상기의 수속만으로는 대응할 수 없습니다. 헤더 파일을 빌드 디렉토리(내 환경이라면 ./cmake-build-debug/boost-prefix/src/boost가 됩니다)에서 설치 디렉토리에 복사해 줄 필요가 있습니다(왜 설치되지 않는지는 수수께끼···).
보이는 보이지 않고 쓰고 있기 때문에, 이상한 부분도 많다고 생각합니다. 나와 마찬가지로 CMake를 잘 모르겠습니다.

좋은 웹페이지 즐겨찾기