如何在CMakeLists.txt中添加Boost库?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (40)

我需要将Boost库添加到我的CMakeLists.txt中。你是怎么做的还是怎么加的?

提问于
用户回答回答于

把这个放进你的CMakeLists.txt文件(如果需要,请将所有选项从OFF更改为ON):

set(Boost_USE_STATIC_LIBS OFF) 
set(Boost_USE_MULTITHREADED ON)  
set(Boost_USE_STATIC_RUNTIME OFF) 
find_package(Boost 1.45.0 COMPONENTS *boost libraries here*) 

if(Boost_FOUND)
    include_directories(${Boost_INCLUDE_DIRS}) 
    add_executable(progname file1.cxx file2.cxx) 
    target_link_libraries(progname ${Boost_LIBRARIES})
endif()

显然你需要把你想要的图书馆放在我放的地方*boost libraries here*...。例如,如果使用的是filesystemregex library you'd write:

find_package(Boost 1.45.0 COMPONENTS filesystem regex)
用户回答回答于

假设您需要Boost::Program_选项和Boost::regex,可以这样做:

find_package( Boost REQUIRED COMPONENTS program_options regex )
include_directories( ${Boost_INCLUDE_DIRS} )
add_executable( run main.cpp ) # Example application based on main.cpp

# Alternatively you could use ${Boost_LIBRARIES} here.
target_link_libraries( run ${Boost_PROGRAM_OPTIONS_LIBRARY} ${Boost_REGEX_LIBRARY} )

一些一般性建议:

  • 搜索时,FindBoost检查环境变量$env{Boost_根}。可以在调用find之前设置此变量。_如果有必要的话。
  • 当Boost有多个构建版本(多线程、静态、共享等)时,可以在调用find之前指定所需的配置。_包裹。通过将以下一些变量设置为OnBoost_USE_STATIC_LIBS,,,Boost_USE_MULTITHREADED,,,Boost_USE_STATIC_RUNTIME
  • 在Windows上搜索Boost时,请注意自动链接。
    • 我的建议是禁用自动链接并使用cmake的依赖处理:add_definitions( -DBOOST_ALL_NO_LIB )
    • 在某些情况下,您可能需要显式指定使用动态提升:add_definitions( -DBOOST_ALL_DYN_LINK )

扫码关注云+社区