使用Boost.asio和cmake?

时间:2013-03-08 09:12:01

标签: c++ boost cmake boost-asio

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

1 个答案:

答案 0 :(得分:8)

如果我理解实际问题,那么从根本上询问如何静态链接到CMake中的第三方库。

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

最简单的方法是使用CMake安装中提供的FindBoost.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安装,则有两种静态链接库的方法。第一种方法创建导入的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)