我有一个使用cmake构建的项目。 这个项目使用avr-gcc来编译二进制文件,我使用boost mpl来处理它的某些部分。
由于avr-gcc没有将/ usr / include作为默认包含路径但是在那里安装了boost,我需要将其添加为包含路径以便找到boost。 不幸的是,在命令行中添加-I / usr / include会拉入/ usr / include中的所有其他文件和目录,这似乎会引入与avr包含的冲突,从而导致编译器错误。
我的初始解决方案涉及到我的一个用户定义的include目录中的/ usr / include / boost的软链接以解析
#include <boost/mpl/*>
但是,我认为这不是非常独立于平台,并决定为cmake添加包含路径以进行提升。这又导致了&#34; -I / usr / include&#34;存在于编译器命令中。
如何以平台无关的方式解决这个问题?
解决方案是让cmake为我创建链接以获取正确的包含目录。 但是,我认为整个符号链接解决方案很难看。 我能做些什么更好的事情吗?
例如:是否有一些选项可以在别名下添加包含路径,如:
-I/usr/include/boost:boost
哪个只会在名称提升下添加boost子文件夹以包含#include <boost/...>
指令?
答案 0 :(得分:0)
我认为至少有两种选择:
avr-gcc
默认包含哪些文件?让我们说具体是/opt/avr-gcc/include
。那么对您有用的是-I/opt/avr-gcc/include -I/usr/include
。
另一种选择是在不同的目录中安装Boost,并在/usr/include
中使用它而不是Boost。例如,您可以创建/opt/boost
,然后在命令行上使用-I/opt/boost
(或其下的子目录)。