【问题标题】:CMake reports 'Boost_DIR-NOT_FOUND' when trying to find BoostCMake 在尝试查找 Boost 时报告“Boost_DIR-NOT_FOUND”
【发布时间】:2013-07-10 10:14:22
【问题描述】:

我想在我的机器上构建一个名为 CSWNet 的库。 Cmake 可以找到 Boost_INCLUDE_DIR 和 Boost_LIB_DIR 但它找不到名为 Boost_DIR 的选项,该选项是包含 Boost 的 CMake 配置文件的目录。它在哪里?请帮忙,先谢谢了。我得到的错误如下所示,我从 ubuntu 存储库安装了 boost,它安装在 /usr/local 中。

 CMake Error at /usr/local/share/cmake-2.8/Modules/FindBoost.cmake:429 (message):
When requesting a specific version of Boost, you must provide at least the
major and minor version numbers, e.g., 1.34
Call Stack (most recent call first):
demos/CMakeLists.txt:149 (find_package)

【问题讨论】:

  • 您能否分享一些有关您的操作系统/环境以及您如何/在何处安装 boost 的详细信息?
  • 嗨@Antonio,我已经编辑了我的问题并添加了一些细节。
  • 某些版本的 Boost 使用标志 Boost_INCLUDE_DIR,而其他版本使用标志 Boost_INCLUDEDIR不带下划线)。您可以通过阅读FindBoost.cmake 文件(位于path-to-cmake/Modules/FindBoost.cmake 下)来检查适合您的情况的文件

标签: boost cmake


【解决方案1】:

你好像误解了Boost_DIR的意思。

Boost_DIR 是一个环境变量,CMake 用作提示来查找 boost 安装目录。如果将其设置为Boost_DIR-NOTFOUNDnot 意味着它没有找到 Boost。 Boost_FOUND用于表示搜索是否成功:

find_package(Boost REQUIRED thread)
if(Boost_FOUND)
    message(STATUS "Success!")
endif()

如果搜索成功,CMake 还会在配置阶段打印一条诊断消息,类似于

Boost version: 1.53.0
Found the following Boost libraries:
  thread

【讨论】:

  • 感谢 CommicSansMS,这对我来说很有意义,我确实将 Boost_DIR 设置为 Boost_DIR-NOTFOUND。但我仍然很困惑如何解决这个问题。我在 /usr/local 下安装了 boost。你的意思是我需要做的是将 Boost_DIR 作为环境变量添加到我的系统中,比如 export Boost_DIR = /usr/local/... ?
  • CMake 以在 /usr/local 中查找内容时遇到问题而闻名。你可以尝试使用CMAKE_PREFIX_PATH 来解决这个问题。或者BOOST_ROOT 环境变量seems to be the preferred way 来提示现在Boost 的位置。 Boost_DIR 仅在 Boost 本身是使用 CMake 构建并提供带有导出目标的包配置时使用。
  • 上面的链接非常有用。所以我认为我需要用 CMake 重建 Boost。我查看了 BOOST 提供的guide,了解如何使用 cmake 构建 boost。但下载的文件不包含 CMakeLists.txt。
  • 我发现 1_40_0 版本的 boost 包含 CMakeList.txt。现在变得越来越复杂。 The up-to-date gcc doesn't support boost under version 1.48.0 because Boost.Threads failed to correctly detect thread support in the compiler. 但我找不到任何高于 1.48.0 的版本都有 CMakeList.txt。
  • @JohnnyHan Building Boost yourself with CMake 由于complex reasons,目前不支持,但未来可能会实现。但是你不需要重建 Boost。它也应该与二进制文件一起使用,您只需将 CMake 指向正确的路径。通常设置BOOST_ROOT 和可能的Boost_ADDITIONAL_VERSIONS 就足够了。与 CMake 的任何查找脚本一样,困难的部分是理解用于在磁盘上查找文件的逻辑。不幸的是,对于 Boost,该逻辑特别复杂。
【解决方案2】:

希望现在发布这个还为时不晚。 在命令行中将它与 cmake 命令一起传递会解决它

 cmake -DCMAKE_CXX_COMPILER=g++ -DCMAKE_INSTALL_PREFIX=dist -DBOOST_DIR="boost installation location"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多