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 や boost.org を参考にしました。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 よーわからん・・・となっている方の一助となれば幸いです