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