7
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

CMake で GitHub から Boost を取得して静的リンクする

Last updated at Posted at 2017-12-03

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 のオプションについては boostjpboost.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_librariescli に Boost ライブラリをリンクします。

まとめ

Boost.Asio などを使いたい場合は上記の手続きのみでは対応できません。ヘッダファイルをビルドディレクトリ(私の環境だと ./cmake-build-debug/boost-prefix/src/boost になります)からインストールディレクトリにコピーしてあげる必要があります(なぜインストールされないかは謎・・・)。
見よう見まねで書いているので、おかしな部分も多いと思いますが、私と同じように CMake よーわからん・・・となっている方の一助となれば幸いです :thumbsup:

7
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?