仅将包含路径的特定子目录添加到包含

Add only specific subdirectory of an include path to includes

本文关键字:包含 子目录 添加 路径      更新时间:2023-10-16

我有一个使用cmake构建的项目。这个项目使用avr-gcc来编译二进制文件,我使用boost-mpl来编译其中的一些部分

由于avr-gcc没有/usr/include作为默认的include路径,但boost安装在那里,所以我需要将其添加为include路径以便找到boost。不幸的是,在命令行中添加-I/usr/include会拉入/usr/include中的所有其他文件和目录,这似乎会引入与avr-include的冲突,从而导致编译器错误。

我最初的解决方案包括在我的一个用户定义的include目录中建立一个到/usr/include/boost的软链接,以解决

#include <boost/mpl/*>

然而,我认为这不是非常独立于平台的,并决定让cmake添加用于boost的include路径。这再次导致编译器命令中出现"-I/usr/include"。

如何以与平台无关的方式解决此问题?

一个解决方案是让cmake为我创建链接,以获得正确的include目录。然而,我认为整个符号链接的解决方案很丑陋。我能做些更好的事情吗?

例如:是否有一些选项可以在别名下添加包含路径,如:

-I/usr/include/boost:boost

哪一个会只在名称boost下添加boost子文件夹,以便#include <boost/...>指令可以包含?

我至少看到两个选项:

  1. 默认情况下,avr-gcc包括来自哪里的文件?假设具体性是/opt/avr-gcc/include。那么-I/opt/avr-gcc/include -I/usr/include可能对你有用。

  2. 另一种选择是将Boost安装在不同的目录中,并使用该目录而不是/usr/include中的Boost。例如,您可以创建/opt/boost,然后在命令行中使用-I/opt/boost(或其下的子目录)。