c++ - BoostRoot 指向“”空目录,我在哪里更改其值以设置永久目录?
问题描述
所以我无法在它的 CMakeList.txt 中编译 c++ 代码
find_package(Boost REQUIRED COMPONENTS program_options)
由于错误输出
导入的目标“Boost::program_options”包括不存在的路径
“/包括”
在其 INTERFACE_INCLUDE_DIRECTORIES 中。
我在boost_program_options-config.cmake中打印出变量BOOST_ROOT和Boost_INCLUDE_DIRS(这是编译器错误指向的文件)
原来 BOOST_ROOT 是""而 Boost_INCLUDE_DIRS 指向"/include"
我相信这就是原因,boost包含文件的目录在路径/usr/include下
我可以为所有未来的构建或解决此问题的更好方法永久设置 BOOST_ROOT 参数吗?
按照其他编码员的建议,我重新安装了 boost,但构建错误仍然存在。
我为重新安装 boost 所做的是
- 去掉boost(我只安装了boost 1.71),Ubuntu20.04终端上的命令是:
:~$sudo apt-get autoremove libboost1.71-dev
- 重新安装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
提前谢谢!
解决方案
好的,所以经过周末的一些调查,解决问题的答案变得清晰起来。
痛苦的原因有两个。
首先,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
.
推荐阅读
- c - 我想将数据推送到二叉树中,但在 3 个输入后显示分段错误
- java - 不了解 ZGC 算法中有关颜色位的细节
- elasticsearch - ElasticSearch:是否可以将 dfs_query_then_fetch 与解释 API 一起使用?
- javascript - 有什么方法可以阻止 ECONNRESET 错误使我的机器人崩溃?
- javascript - Vuetify 文本字段:对值的更改不会持续存在(在模糊或焦点上丢失)
- node.js - 未捕获的 TypeError:Object.values 不是函数
- json - 我如何将 json 发布到谷歌 people.api
- javascript - 如何使用 D3.js 更新表
- python - 这些元素在 Python 模块中的顺序应该是什么?
- svn - svn: E000002: 提交后无法创建符号链接,svn cleanup 失败,如何恢复?