【问题标题】:Boost+CMake: no suitable build variantBoost+CMake:没有合适的构建变体
【发布时间】:2019-03-18 09:05:36
【问题描述】:

我正在尝试为我参与的项目在嵌入式类似 SPARC 的机器上部署一些库。我在这台机器上成功构建了前沿的 Boost 库并将其安装到 /util 目录中。然后我尝试为 CMake 编写简单的测试脚本。这是该脚本的开头:

cmake_minimum_required(VERSION 2.8.3)
project(cpp_boost_test)
find_package(Boost REQUIRED COMPONENTS system thread)
find_package(console_bridge REQUIRED)
message(STATUS "Boost Includes: ${Boost_INCLUDE_DIRS}")
message(STATUS "Boost Libraries: ${Boost_LIBRARIES}")

在运行时我收到以下错误消息:

-- Found Boost 1.70.0 at /util/lib/cmake/Boost-1.70.0
-- Requested configuration: QUIET REQUIRED COMPONENTS
     system;thread
-- Found boost_headers 1.70.0 at /util/lib/cmake/boost_headers-1.70.0
-- Found boost_system 1.70.0 at /util/lib/cmake/boost_system-1.70.0
-- No suitable boost_system variant has been identified!
--   libboost_system.so.1.70.0 (shared, BUILD_SHARED_LIBS not ON, set Boost_USE_STATIC_LIBS=OFF to override)
CMake Error at /util/lib/cmake/Boost-1.70.0/BoostConfig.cmake:60 (find_package):
      Found package configuration file:

      /util/lib/cmake/boost_system-1.70.0/boost_system-config.cmake

      but it set boost_system_FOUND to FALSE so package "boost_system" is considered to be NOT FOUND.
      Reason given by package:
      No suitable build variant has been found.
Call Stack (most recent call first):
   /util/lib/cmake/Boost-1.70.0/BoostConfig.cmake:89 (boost_find_dependency)
   /util/share/cmake-3.7/Modules/FindBoost.cmake:229 (find_package)
 CMakeLists.txt:4 (find_package)

我尝试设置 Boost_USE_STATIC_LIBS 选项,但错误仍然存​​在。

这是否是 Boost.System 中的版本冲突?我应该怎么做才能避免这个错误?无法从项目中删除 Boost,因此我无法接受有关此类删除的答案...

【问题讨论】:

  • 问题似乎是你的 CMake 太旧了(我从路径中猜到 3.7)。 Boost 1.70.0 是最前沿的,CMake 在其 FindBoost.cmake 模块中并不知道它。支持 Boost 1.70 的第一个 CMake 版本是几天前发布的 3.14。
  • 我在构建 ARM 时遇到了同样的问题。即使使用 cmake 3.14.0 我也有同样的问题。设置“SET(Boost_DEBUG ON)”时,您可以更详细地查看发生的情况。它无法找到共享库或静态库。设置 SET(BUILD_SHARED_LIBS ON) 时,它确实成功地制作了 makefile,但出现了更多问题。 (例如,它仍然无法设置 Boost_SYSTEM_LIBRARY)。似乎与 cmake 不兼容的问题和最新的提升确实

标签: c++ boost cmake sparc


【解决方案1】:

我调查了 Boost 的变化历史,因此答案是在链接 Boost 的项目中构建依赖项应该手动包含到 CMake 中(请参阅此处的答案:CMake finds Boost but the imported targets not available for Boost version 了解详细信息)。因此,必须使用比您使用的 CMake 版本稍旧的 Boost 版本。我通过回滚到 Boost 1.61 解决了我的问题(根据我的嵌入式平台的特性,我无法编译高于 3.7.0 的 CMake 版本)。

【讨论】:

    【解决方案2】:

    使用cmake --version检查当前cmake安装的版本。

    很有可能大于 3.0。由于旧 cmake 和现代 cmake (>3.0) 之间存在不兼容,您可以尝试通过将 VERSION 更改为当前 cmake 的版本或任何数字 >= 3.0 来修复它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-28
      • 1970-01-01
      • 1970-01-01
      • 2018-09-16
      • 2021-07-05
      • 2019-12-13
      相关资源
      最近更新 更多