Boost+CMake:没有合适的构建变体
Boost+CMake: no suitable build variant
我正在尝试为我参与的项目在类似 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,因此我不能接受有关此类删除的答案...
我调查了 Boost 的变化历史,所以答案是在链接 Boost 的项目中构建依赖项应该手动包含到 CMake 中(参见此处的答案: 了解详细信息)。因此,必须使用比您使用的 CMake 版本稍旧的 Boost 版本。我通过回滚到 Boost 1.61 解决了我的问题(根据我的嵌入式平台的特性,我无法编译 3.7.0 以上的 CMake 版本)。
使用cmake --version
检查当前cmake安装的版本。
很可能大于 3.0。由于旧 cmake 和现代 cmake (>3.0) 之间存在不兼容性,您可以尝试通过将 VERSION 更改为当前 cmake 的版本或任何数字 >= 3.0.
来修复它
我正在尝试为我参与的项目在类似 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,因此我不能接受有关此类删除的答案...
我调查了 Boost 的变化历史,所以答案是在链接 Boost 的项目中构建依赖项应该手动包含到 CMake 中(参见此处的答案:
使用cmake --version
检查当前cmake安装的版本。
很可能大于 3.0。由于旧 cmake 和现代 cmake (>3.0) 之间存在不兼容性,您可以尝试通过将 VERSION 更改为当前 cmake 的版本或任何数字 >= 3.0.
来修复它