4

我想在没有外部库的情况下将 boost.asio 静态链接到我的小项目(结果中只有单个 exe/bin 文件来分发它)。Boost.asio 需要 Boost.system,我开始沉浸在试图弄清楚如何编译这一切的过程中。如何在 cmake 中使用 Boost.asio?

4

1 回答 1

11

如果我理解实际问题,它基本上是在询问如何在 CMake 中静态链接到 3rd 方库。

在我的环境中,我已将 Boost 安装到/opt/boost.

最简单的方法是使用FindBoost.cmakeCMake 安装中提供的:

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,则有两种方法可以静态链接库。第一种方法创建一个导入的 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 回答