首页 > 解决方案 > BoostRoot 指向“”空目录,我在哪里更改其值以设置永久目录?

问题描述

所以我无法在它的 CMakeList.txt 中编译 c++ 代码

find_package(Boost REQUIRED COMPONENTS program_options)

由于错误输出

导入的目标“Boost::program_options”包括不存在的路径

“/包括”

在其 INTERFACE_INCLUDE_DIRECTORIES 中。

我在boost_program_options-config.cmake中打印出变量BOOST_ROOTBoost_INCLUDE_DIRS(这是编译器错误指向的文件)

原来 BOOST_ROOT 是""而 Boost_INCLUDE_DIRS 指向"/include"

我相信这就是原因,boost包含文件的目录在路径/usr/include下

我可以为所有未来的构建或解决此问题的更好方法永久设置 BOOST_ROOT 参数吗?

按照其他编码员的建议,我重新安装了 boost,但构建错误仍然存​​在。

我为重新安装 boost 所做的是

  1. 去掉boost(我只安装了boost 1.71),Ubuntu20.04终端上的命令是:

:~$sudo apt-get autoremove libboost1.71-dev

  1. 重新安装boost,命令是:

:~$sudo apt-get install libboost-all-dev

我还检查了 cmake 版本,它是cmake 3.16.3

代码是 ROS2 的Nav2 包。在 ROS2 已经安装并运行良好的情况下,我用来构建 Nav2 包的构建命令是

:~$colcon build --symlink-install

这是抛出错误的命令

已导入 ... Boost::program_options ... 不存在的路径 ... INTERFACE_INCLUDE_DIRECTORIES

提前谢谢!

标签: c++boostcmakerosros2

解决方案


好的,所以经过周末的一些调查,解决问题的答案变得清晰起来。

痛苦的原因有两个。

首先,ubuntu在根目录(即文件夹)有 lib 的快捷方式。/usr/lib//lib

其次,ubuntu 的根目录 没有/include假设包含所有标题等的文件夹。

因此,在构建代码时。cmake 将所有 CMAKE_CURRENT_LIST_DIR 设置为前缀""而不是/usr

这是有问题的,因为如果您查看boost_program_options-config.cmake。_BOOST_INCLUDEDIR 是设置 INTERFACE_INCLUDE_DIRECTORIES 的值。

但是,_BOOST_INCLUDEDIR 又由 CMAKE_CURRENT_LIST_DIR 设置为前缀。因此,您将得到一个/<subfix>而不是 /usr/<subfix>您的 boost 包含文件夹目录。

cmake 将找不到此类目录的此类包含文件夹。从而输出问题的错误信息。

解决方法很简单,要么删除根目录下的快捷方式文件夹,要么创建链接/usr/include.


推荐阅读