4

外部ライブラリを使用せずに、boost.asio を小さなプロジェクトに静的にリンクしたい (結果として配布する exe/bin ファイルが 1 つしかない)。Boost.asio には Boost.system が必要で、これをすべてコンパイルする方法を見つけようとして溺れ始めます。Boost.asio を cmake で使用するには?

4

1 に答える 1

11

実際の質問を理解していれば、CMake でサードパーティのライブラリに静的にリンクする方法を根本的に尋ねています。

私の環境では、Boost を にインストールしました/opt/boost

最も簡単な方法はFindBoost.cmake、CMake インストールで提供されているものを使用することです。

set(BOOST_ROOT /opt/boost)
set(Boost_USE_STATIC_LIBS ON)
find_package(Boost COMPONENTS system)

include_directories(${Boost_INCLUDE_DIR})
add_executable(example example.cpp)
target_link_libraries(example ${Boost_LIBRARIES})

すべての Boost ライブラリを検索し、システム ライブラリに対して明示的にリンクするバリアント:

set(BOOST_ROOT /opt/boost)
set(Boost_USE_STATIC_LIBS ON)
find_package(Boost REQUIRED)

include_directories(${Boost_INCLUDE_DIR})
add_executable(example example.cpp)
target_link_libraries(example ${Boost_SYSTEM_LIBRARY})

Boost が適切にインストールされていない場合、ライブラリに対して静的にリンクするには 2 つの方法があります。最初のアプローチは、インポートされた CMake ターゲットを作成します。

add_library(boost_system STATIC IMPORTED)
set_property(TARGET boost_system PROPERTY
  IMPORTED_LOCATION /opt/boost/lib/libboost_system.a 
)

include_directories(/opt/boost/include)
add_executable(example example.cpp)
target_link_libraries(example boost_system)

target_link_libraries別の方法は、ターゲットではなくライブラリを明示的にリストすることです。

include_directories(/opt/boost/include)
add_executable(example example.cpp)
target_link_libraries(example /opt/boost/lib/libboost_system.a)
于 2013-03-08T18:05:00.187 に答える