我正在尝试使用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)之前
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库文件.
您还可以通过传递-DBOOST_INCLUDEDIR或-DBOOST_ROOT指向正确的版本Boost标头的位置来指定希望CMake使用的Boost版本。
例:
cmake -DBOOST_ROOT=/opt/latestboost
当多个Boost版本在同一系统上时,这也将很有用。