我有从源代码编译的最新 cmake 3.0.2,还安装了 libboost-all-dev。但 find_package(Boost) 找不到它。以下是 cmake 的输出:
Unable to find the requested Boost libraries.
Unable to find the Boost header files. Please set BOOST_ROOT to the root
directory containing Boost of BOOST_INCLUDEDIR to the directory containing
Boost's headers.
安装 Boost 后,我是否需要手动设置任何变量以使其在 cmake 中可见?
谢谢。
答案1
您使用的是哪个版本libboost-all-dev
?我假设您使用的是 v1.53.0。
尝试安装libboost1.54-all-dev
。
答案2
在 14.04(可能更早)到 16.04 中,我可以使用它们:
find_package( Boost COMPONENTS filesystem system REQUIRED )
include_directories(
${BOOST_INCLUDE_DIRS}
)
target_link_libraries(${PROJECT_NAME}
${Boost_FILESYSTEM_LIBRARY}
${Boost_SYSTEM_LIBRARY}
}
如果您只需要标题,则不需要指定任何组件,也不需要target_link_libraries()
:
find_package( Boost REQUIRED )
include_directories(
${BOOST_INCLUDE_DIRS}
)
对于 16.10,我必须确保安装,libboost-all-dev
以便我的代码能够继续在 Ubuntu 上编译。
sudo apt-get install libboost-all-dev
以前的版本不知何故只能使用libboost-dev
。虽然看起来你已经弄清楚了那部分,但我只是想确保清楚地提到了这方面最近发生了变化。
答案3
谢谢,罗希斯。
作为替代解决方案,我下载并构建了最新版本的 boost,并在 ~/.profile 中添加了 BOOST_ROOT 变量,如下所示:
export BOOST_ROOT=$HOME/work/boost_1_57_0
请注意,如果您使用非头文件库,则必须构建 boost。
答案4
我在 ubuntu 中也遇到了这种尴尬的情况......
我的解决方案是根本不使用,find_package
而是在链接过程中添加库
target_link_libraries( your_program boost_system boost_filesystem ... )
不好的地方是cmake
无法检查库是否存在boost
。不过,它还是可以工作的。
希望有人能找到更好的解决方案。