【问题标题】:CMake finds Boost but the imported targets not available for Boost versionCMake 找到 Boost 但导入的目标不适用于 Boost 版本
【发布时间】:2017-06-26 16:25:04
【问题描述】:

我使用 CMake 来查找 Boost。找到了 Boost,但 CMake 出错了

导入的目标不适用于 Boost 版本

请参阅下面的完整错误(来自 macOS)。我做错了什么?

CMake Warning at /Applications/CMake.app/Contents/share/cmake-3.6/Modules/FindBoost.cmake:743 (message):
  Imported targets not available for Boost version 106300
Call Stack (most recent call first):
  /Applications/CMake.app/Contents/share/cmake-3.6/Modules/FindBoost.cmake:842 (_Boost_COMPONENT_DEPENDENCIES)
/Applications/CMake.app/Contents/share/cmake-3.6/Modules/FindBoost.cmake:1395 (_Boost_MISSING_DEPENDENCIES)
CMakeLists.txt:6 (find_package)

Boost version: 1.63.0
Found the following Boost libraries:
  thread
CMake Warning at /Applications/CMake.app/Contents/share/cmake-3.6/Modules/FindBoost.cmake:743 (message):
  Imported targets not available for Boost version 106300
Call Stack (most recent call first):
  /Applications/CMake.app/Contents/share/cmake-3.6/Modules/FindBoost.cmake:842 (_Boost_COMPONENT_DEPENDENCIES)
  /Applications/CMake.app/Contents/share/cmake-3.6/Modules/FindBoost.cmake:1395 (_Boost_MISSING_DEPENDENCIES)
  CMakeLists.txt:7 (find_package)

【问题讨论】:

  • 您需要 CMake 3.7 才能获得最新的 Boost。
  • 我编辑了您的问题,因为每个 Boost 版本都会询问这个问题。也许更多人会以这种方式找到您的问题。

标签: boost cmake


【解决方案1】:

您的 CMake 版本太旧。更新 CMake 即可。

CMake 无法检测不同 Boost 库之间的依赖关系。他们已在FindBoost 中明确实现。
对于每个 Boost 版本,此信息由 CMake 维护者添加,并成为下一个 CMake 版本的一部分。因此,您必须确保您的 CMake 版本是在您尝试查找的 Boost 版本之后发布的。

Boost 1.63 需要 CMake 3.7 或更高版本。
Boost 1.64 需要 CMake 3.8 或更高版本。
Boost 1.65 和 1.65.1 需要 CMake 3.9.3 或更高版本。
Boost 1.66 需要 CMake 3.11 或更高版本。
Boost 1.67 需要 CMake 3.12 或更高版本。
Boost 1.68、1.69 需要 CMake 3.13 或更高版本。
Boost 1.70 需要 CMake 3.14 或更高版本。
Boost 1.71 需要 CMake 3.15.3 或更高版本。
Boost 1.72 需要 CMake 3.16.2 或更高版本。
Boost 1.73 需要 CMake 3.17.2 或更高版本。
Boost 1.74 需要 CMake 3.19 或更高版本。
Boost 1.75 需要 CMake 3.19.5 或更高版本。
Boost 1.76 需要 CMake 3.20.3 或更高版本。
Boost 1.77 需要 CMake 3.21.3 或更高版本。
Boost 1.78 需要 CMake 3.22.2 或更高版本。

没有 FindBoost

从版本 1.77 开始,Boost 提供了一个 BoostConfig.cmake,它废弃了 FindBoost 和所需的更改。使用

find_package(Boost CONFIG)

不排除 FindBoost 文件并仅搜索配置文件。
为了兼容性,CMake 将继续提供 FindBoost。

【讨论】:

  • 非常感谢。 CLion 的 2016.3 捆绑 CMake 3.6.3 使用此命令失败。现在我使用来自/usr/bin/cmake的系统CMake 3.7.2@
  • 你有时会走运。我收到“导入的目标不可用”警告,但仍然可以构建我的项目(CMake 3.6.2,Boost 1.64.0)。我怀疑是因为自 1.62 以来我使用的库(文​​件系统、系统、python、unit_test_framework)的依赖关系没有改变,这是 CMake 3.6 所知道的最高 Boost 版本。
  • 我有 boost 1.64 和 cmake 3.8 并且仍然收到消息
  • 1.68 适用于我的 3.12。这也是一个非常迟钝的系统。
  • boost 1.67 不适用于 cmake 3.12,它是一个迟钝的系统,尤其是如果没有像“你的 boost 版本需要更新版本的 cmake”这样的错误
【解决方案2】:

我只是想发布以下工作,因为它比在我没有 root/sudo 访问权限的系统上升级 CMake 要容易得多。调用CMake时直接设置BOOST_INCLUDEDIRBOOST_LIBRARYDIR

cmake  -DBOOST_INCLUDEDIR=... -DBOOST_LIBRARYDIR=... ...

如果 Boost 更改了 CMake 附带的模块中硬编码的列表与您正在使用的 boost 版本之间的依赖关系,这可能不起作用。您需要 30 秒来尝试,而从源代码安装 cmake 需要 30 分钟。

【讨论】:

  • 对你有好处,它成功了。但这不是一个通用的解决方案。如果添加了新库或删除了现有库,则它不起作用。
猜你喜欢
  • 1970-01-01
  • 2018-09-28
  • 1970-01-01
  • 2017-07-19
  • 2021-12-22
  • 2011-04-18
  • 2020-09-11
  • 1970-01-01
相关资源
最近更新 更多