我有一个cmake文件,可以像这样添加提升:
if(ADD_BOOST)
#add boost library
set(Boost_USE_STATIC_LIBS ON)
set(Boost_USE_STATIC_RUNTIME ON)
file(TO_CMAKE_PATH $ENV{BOOST_ROOT} BOOST_ROOT)
if (MSVC)
set(BOOST_LIBRARYDIR ${BOOST_ROOT}/lib64-msvc-12.0)
else (MSVC)
set(BOOST_LIBRARY_DIR $ENV{BOOST_ROOT})
endif (MSVC)
find_package(Boost COMPONENTS filesystem system program-options thread REQUIRED)
endif (ADD_BOOST)
我有这一行:
find_package(Boost COMPONENTS filesystem system program-options thread REQUIRED)
我想使用boost中的program-option libabray。我应该在上面的列表中添加什么名称?
在哪里可以找到我可以在cmake上面提到的行中使用的boost库列表?
答案 0 :(得分:0)
我想从boost使用程序选项libabray。我应该在上面的列表中添加什么名字?
能否请您说明您的意思?
您已经将program-options
添加到该行:
find_package(Boost COMPONENTS filesystem system program-options thread REQUIRED)
因此您无需在此行的组件列表中添加任何其他内容。
在哪里可以在cmake的上述行中找到可以使用的Boost库列表?
能否请您说明您的意思?
可在https://www.boost.org/doc/libs/上找到库列表。
或分别检查include/boost
文件夹下include/boost_1_68/boost
或$BOOST_ROOT
目录中的子目录。
实际上,子目录名称可以用作find_package(Boost COMPONENTS...)
命令的组件名称。 (例外:Boost numpy,包含在Boost python中。See here.)
但是,如果您想知道如何在CMake中获取找到的增强组件的列表:
_Boost_IMPORTED_TARGETS
变量(它是CMake list)。foreach(boost_lib IN LISTS Boost_LIBRARIES) string(REGEX MATCH ".+/.*boost_([^-]+)-.+\.(lib|a)" boost_lib_name ${boost_lib}) set(boost_lib_name ${CMAKE_MATCH_1}) set(boost_target Boost::${boost_lib_name}) if(TARGET ${boost_target}) message(STATUS "Boost target found: " ${boost_target}) # Process ${boost_target} according to your needs... endif(TARGET ${boost_target}) endforeach(boost_lib)
注1:
我在CMake ver中尝试了这些技巧。 3.12.2和1.68.0。我仅在Windows中测试了代码。由于不同的boost构建版本可以在boost / lib中使用不同的文件名创建相同的库,因此此循环可以多次查找相同的库。
注2:
整个过程有点奇怪,因为您可以返回刚刚传递给find_package
的列表,因此其他更简单的方法也可以更好,例如将初始列表存储在变量中。
答案 1 :(得分:-1)
例如,在Ubuntu系统上运行:
aptitude show libboost-all-dev
看看它的“取决于”输出。它列出了所有增强组件的名称。