cmake 3.0.2 在 14.04 上找不到 boost

cmake 3.0.2 在 14.04 上找不到 boost

我有从源代码编译的最新 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。不过,它还是可以工作的。

希望有人能找到更好的解决方案。

相关内容