CMake错误:无法找到以下Boost库

5

我正在使用 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 并将输出粘贴在这里? - Fraser
你运行了上面的CMake命令吗?我宁愿看到打开了boost诊断功能的CMake输出,而不是尝试配置yapimpl :-) - Fraser
@Fraser 这里是输出结果(http://codepad.org/F14e72UU) - zhangxaochen
2个回答

14

由于你的库名称都以lib开头,看起来你已经构建了boost库的静态版本。根据boost命名规范,其规定:

lib

      前缀:除了在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模块的信息,请参阅文档,或运行

cmake --help-module FindBoost

感谢您的回答。在我上面发布的traceback中,我确实使用了-DBoost_USE_STATIC_LIBS=ON,但输出显示它后来变成了OFF。您能否检查一下这些项目(https://github.com/Answeror/yapimpl和https://github.com/Answeror/ACMake)以查看发生了什么? - zhangxaochen
在那个大量的 CMake 代码中,有一些地方默认情况下将 Boost_USE_STATIC_LIBS 设置为 OFF。对于第一个位置,请尝试运行 cmake . -DBOOST_SUPPORT_STATIC=ON。另外,如果你在自己的 CMakeLists.txt 中添加 variable_watch(Boost_USE_STATIC_LIBS) 到顶部,它应该会在每次变量更改时打印一条消息。 - Fraser

0

只有在使用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 吗?这就是你在上面的命令中设置的内容。 - Fraser

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接