Boost_LIBRARIES未定义

Alb*_*rto 5 boost cmake

我正在尝试编译FreeLing,它使用CMake来检测Boost。这是负责它的代码:

  find_package(Boost COMPONENTS regex filesystem thread program_options REQUIRED)
Run Code Online (Sandbox Code Playgroud)

找到以下组件(根据CMake生成的输出):

-- Found Boost 1.70.0 at /home/ambs/usr/lib/cmake/Boost-1.70.0
--   Requested configuration: QUIET REQUIRED COMPONENTS regex;filesystem;thread;program_options
-- Found boost_headers 1.70.0 at /home/ambs/usr/lib/cmake/boost_headers-1.70.0
-- Found boost_regex 1.70.0 at /home/ambs/usr/lib/cmake/boost_regex-1.70.0
--   libboost_regex.so.1.70.0
-- Adding boost_regex dependencies: headers
-- Found boost_filesystem 1.70.0 at /home/ambs/usr/lib/cmake/boost_filesystem-1.70.0
--   libboost_filesystem.so.1.70.0
-- Adding boost_filesystem dependencies: headers
-- Found boost_thread 1.70.0 at /home/ambs/usr/lib/cmake/boost_thread-1.70.0
--   libboost_thread.so.1.70.0
-- Adding boost_thread dependencies: headers
-- Found boost_program_options 1.70.0 at /home/ambs/usr/lib/cmake/boost_program_options-1.70.0
--   libboost_program_options.so.1.70.0
-- Adding boost_program_options dependencies: headers
-- Boost  found.
-- Found Boost components:
   regex;filesystem;thread;program_options
Run Code Online (Sandbox Code Playgroud)

但是,看起来好像Boost_LIBRARIES从未设置过。我尝试了这个:

  find_package(Boost COMPONENTS regex filesystem thread program_options REQUIRED)
  message(STATUS "Boost_LIBRARIES=" ${Boost_LIBRARIES})
Run Code Online (Sandbox Code Playgroud)

并且它总是输出一个空字符串。

作为参考,我有CMake版本3.14.3和Boost版本1.70.0。

Tsy*_*rev 7

线

在/home/ambs/usr/lib/cmake/Boost-1.70.0处找到Boost 1.70.0

意味着CMake模块FindBoost.cmake不会使用自己的方法检测Boost库和标头,而是诉诸BoostConfig.cmake脚本,该脚本位于日志中显示的目录中。

FindBoost.cmake模块注释文档以这种方式:

该模块查找标头和请求的组件库,或“ Boost CMake”版本提供的C​​Make软件包配置文件。对于后一种情况,请跳到下面的“ Boost CMake”部分。对于前一种情况,结果报告为变量:

简而言之,使用BoostConfig.cmake脚本意味着它设置了自己的变量或目标,而文档中针对的变量或目标FindBoost.cmake无效。

最有可能的是,“ Config”文件以与文档中所述相同的方式设置IMPORTED目标,等等。FindBoost.cmakeBoost::regexBoost::filesystem


如果要禁用使用BoostConfig.cmake并强制FindBoost.cmake执行其文档中所述的行为,请设置Boost_NO_BOOST_CMAKE变量。例如,致电时cmake

cmake -DBoost_NO_BOOST_CMAKE=ON <other-options>
Run Code Online (Sandbox Code Playgroud)

  • 不幸的是,我不能不赞成您的答案。非常感谢你。你不知道我昨天失去的小时数。 (2认同)