Cmake找不到Boost

Iva*_*mov 76 boost cmake

我正在尝试使用CMake配置项目,但即使它们位于指定的文件夹中,也无法找到Boost库.我已经指定了Boost_INCLUDE_DIR,Boost_LIBRARYDIR和BOOST_ROOT,但是我仍然收到错误,说CMake无法找到Boost.这种错误的原因是什么?

fsc*_*itt 95

你确定你是以正确的方式做到的吗?这个想法是CMake自动设置BOOST_INCLUDE_DIR,BOOST_LIBRARYDIR和BOOST_ROOT.在CMakeLists.txt中执行以下操作:

FIND_PACKAGE(Boost)
IF (Boost_FOUND)
    INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIR})
    ADD_DEFINITIONS( "-DHAS_BOOST" )
ENDIF()
Run Code Online (Sandbox Code Playgroud)

如果boost没有安装在默认位置,因此cmake无法找到,你可以告诉cmake在哪里寻找像这样的提升:

SET(CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH} "C:/win32libs/boost")
SET(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} "C:/win32libs/boost/lib")
Run Code Online (Sandbox Code Playgroud)

当然这两行必须在CMakeLists.txt中的FIND_PACKAGE(Boost)之前

  • 这是`$ {Boost_INCLUDE_DIR}```$ {BOOST_INCLUDE_DIR}`,案件很重要. (30认同)
  • 也许这在较新版本的cmake中有所改变,但这里是参考文档:http://www.cmake.org/cmake/help/v3.0/module/FindBoost.html (3认同)
  • 它对我不起作用......它找到了升级库,但在编译时会产生大量错误 (2认同)
  • @IhorKaharlichenko,但 BOOST_ROOT 应该是 BOOST_ROOT。精彩的 !让我尝试使用所有大小写、驼峰式大小写、全部大写、带下划线、不带下划线... <face-palm> (2认同)

don*_*ght 44

通过阅读FindBoost.cmake文件本身可以获得更多帮助.它位于"模块"目录中.

一个好的开始就是设置(Boost_DEBUG 1) - 这将提供大量有关boost正在寻找的位置,它正在寻找什么的信息,并且可能有助于解释为什么它找不到它.

它还可以帮助您确定它是否正确地提升了您的BOOST_ROOT.

如果可用版本变量中未列出精确版本的boost,则FindBoost.cmake有时也会出现问题.您可以通过阅读FindBoost.cmake找到更多相关信息

最后,FindBoost.cmake过去曾有过一些错误.您可能尝试的一件事是从最新版本的cmake中获取更新版本的FindBoost.cmake,并将其与CMakeLists.txt一起粘贴到您的项目文件夹中 - 然后即使您有旧版本的boost,它也会使用项目文件夹中的FindBoost.cmake的新版本.

祝好运.


bbs*_*bbs 10

对我来说,这个错误仅仅是因为在 ubuntu 上没有安装 boost:

sudo apt install build-essential libboost-system-dev libboost-thread-dev libboost-program-options-dev libboost-test-dev


小智 8

我自己一直在努力解决这个问题.事实证明,cmake正在使用Boost的命名约定来查找Boost库文件,其中库名称是用于构建它的编译器版本的函数.我们的Boost库是使用构建的GCC 4.9.1,并且编译器版本实际上存在于我们的系统中; 然而,GCC 4.4.7也恰巧被安装了.碰巧的是,cmake的FindBoost.cmake脚本是自动检测GCC 4.4.7安装而不是GCC 4.9.1一个,因此gcc44在文件名中查找带有" "的Boost库文件,而不是" gcc49".

简单的解决方法是强制cmake假设GCC 4.9存在,设置Boost_COMPILER为" -gcc49"in CMakeLists.txt.通过此更改,FindBoost.cmake查找并找到了我的Boost库文件.


sph*_*kka 6

我也遇到了类似的问题,发现 BOOST_INCLUDE_DIR、BOOST_LIBRARYDIR 和 BOOST_ROOT 环境变量必须包含绝对路径。哼!


Ski*_*hie 5

您还可以通过传递-DBOOST_INCLUDEDIR-DBOOST_ROOT指向正确的版本Boost标头的位置来指定希望CMake使用的Boost版本。

例:

cmake -DBOOST_ROOT=/opt/latestboost

当多个Boost版本在同一系统上时,这也将很有用。