【问题标题】:cmake error: The following Boost libraries could not be foundcmake 错误:找不到以下 Boost 库
【发布时间】:2013-09-06 04:29:48
【问题描述】:

我正在使用 cmakeboost 来制作 Visual Studio 解决方案。 我的命令是:

F:\C++\yapimpl\build>cmake .. -G"Visual Studio 11" -DBOOST_ROOT=E:\lib\lib\boost
_1_54_0 -DBOOST_LIBRARYDIR=E:\lib\lib\boost_1_54_0\bin\vc11\lib

虽然我设置了BOOST_LIBRARYDIRBOOST_ROOT,但它仍然显示boost_unit_test_framework 找不到。

目录E:\lib\lib\boost_1_54_0\bin\vc11\lib 确实包含这些文件:

08/08/2013  CSer 03:48        12,738,344 libboost_unit_test_framework-vc110-mt-1
_54.lib
08/08/2013  CSer 03:44        31,489,264 libboost_unit_test_framework-vc110-mt-g
d-1_54.lib
08/08/2013  CSer 04:10        14,109,766 libboost_unit_test_framework-vc110-mt-s
-1_54.lib
08/08/2013  CSer 03:59        32,856,094 libboost_unit_test_framework-vc110-mt-s
gd-1_54.lib

但似乎那些不被识别。有什么问题? Traceback 在这里:http://codepad.org/zgL9tpjo

项目在这里: https://github.com/Answeror/yapimplhttps://github.com/Answeror/ACMake 希望有人可以尝试 cmake yapimpl 项目

【问题讨论】:

  • 你能运行cmake . -DBoost_DEBUG=ON -DBoost_DETAILED_FAILURE_MSG=ON 并将输出粘贴到这里吗?
  • 你运行上面的CMake命令了吗?我宁愿看到 CMake 的输出打开了 boost 诊断,而不是尝试配置 yapimpl :-)
  • @Fraser 输出是here

标签: c++ boost cmake


【解决方案1】:

由于您的库名称都以 lib 开头,因此您似乎已经构建了 boost 库的静态版本。 boost naming conventions 状态:

lib

      Prefix:除了在 Microsoft Windows 上,每个 Boost 库名称都以此字符串开头。在 Windows 上,只有普通静态库使用 lib 前缀;导入库和 DLL 不会。

在 CMake 生成的输出中,有一行说明:

-- [ F:/C++/yapimpl/acmake/FindBoost.cmake:570 ] Boost_USE_STATIC_LIBS = OFF

此外,您可以看到 CMake 正在搜索的库名称不以 lib 开头:

... Searching for UNIT_TEST_FRAMEWORK_LIBRARY_RELEASE: boost_unit_test_framework-vc110-mt-1_54;...

要告诉 CMake 搜索静态版本的 Boost,您只需将 Boost_USE_STATIC_LIBS 设置为 ON。您可以在调用find_package(Boost ...):

之前 在您的 CMakeLists.txt 中执行此操作
set(Boost_USE_STATIC_LIBS ON)

或者你可以在命令行上设置它:

cmake . -DBoost_USE_STATIC_LIBS=ON

有关FindBoost CMake 模块的更多信息,请参阅the docs,或运行

cmake --help-module FindBoost

【讨论】:

  • 感谢您的回答,在我上面发布的traceback 中,我确实有-DBoost_USE_STATIC_LIBS=ON,但输出显示它稍后变为OFF,您可以检查项目(github.com/Answeror/yapimplgithub.com/Answeror/ACMake) 看看发生了什么?
  • 在 CMake 代码山中有几个地方,Boost_USE_STATIC_LIBS 默认设置为 OFF。对于第一个,您可以尝试运行cmake . -DBOOST_SUPPORT_STATIC=ON 吗?此外,如果您将variable_watch(Boost_USE_STATIC_LIBS) 添加到您自己的 CMakeLists.txt 的顶部,它应该在每次更改变量时打印一条消息。
【解决方案2】:

我只在使用 CMake 和 boost 时设置 BOOST_ROOT。其他一切正常,没有任何问题

"C:\Program Files (x86)\CMake 2.8\bin\cmake" 
-G"Visual Studio 11 Win64" 
-HC:\USB\dev\MyProject -BC:\build\MyProject 
-DBOOST_ROOT="C:\USB\thirdparty\vs2012\boost_1_54_0-x64"

【讨论】:

  • 你的意思是BOOST_ROOT?这就是您在上述命令中设置的内容。
猜你喜欢
  • 2011-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-15
  • 2014-06-02
  • 2019-12-29
相关资源
最近更新 更多