我有一个使用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/...>
指令可以包含?
我至少看到两个选项:
-
默认情况下,
avr-gcc
包括来自哪里的文件?假设具体性是/opt/avr-gcc/include
。那么-I/opt/avr-gcc/include -I/usr/include
可能对你有用。 -
另一种选择是将Boost安装在不同的目录中,并使用该目录而不是
/usr/include
中的Boost。例如,您可以创建/opt/boost
,然后在命令行中使用-I/opt/boost
(或其下的子目录)。