哪里可以找到我可以在cmake中使用的boost组件列表?

时间:2015-05-01 15:09:57

标签: c++ boost

我有一个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库列表?

2 个答案:

答案 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中获取找到的增强组件的列表:

  1. 您可以尝试使用未记录的_Boost_IMPORTED_TARGETS变量(它是CMake list)。
  2. 或者您也可以尝试使用记录在案的Boost_LIBRARIES variable
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 

看看它的“取决于”输出。它列出了所有增强组件的名称。