【问题标题】:Add only specific subdirectory of an include path to includes仅将包含路径的特定子目录添加到包含
【发布时间】:2014-01-17 12:57:42
【问题描述】:

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

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

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

#include <boost/mpl/*>

但是,我认为这不是非常独立于平台的,因此决定让 cmake 为 boost 添加包含路径。这再次导致编译器命令中出现“-I/usr/include”。

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

一个解决方案是让 cmake 为我创建链接以获得正确的包含目录。 但是,我认为整个符号链接解决方案很难看。 有没有更好的办法?

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

-I/usr/include/boost:boost

哪个只会添加名称为 boost 的 boost 子文件夹以被 #include &lt;boost/...&gt; 指令包含?

【问题讨论】:

    标签: c++ gcc include-path avr-gcc


    【解决方案1】:

    我看到至少有两种选择:

    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(或其下的子目录)。

    【讨论】:

    • 选项二不可用,因为我无法控制所有应该工作的计算机。选项一似乎依赖于 avr 的包含目录,我也无法在所有系统上控制。
    • 那你可能被斯诺克了。厄运。您必须能够控制足够多的环境才能进行体面的构建。实际上,我不明白为什么选项 2 有问题。如果你正在编译代码,你有一个可以放置 Boost 代码的目录——源代码树的任何合适的子目录。您只需要在编译时使用它。将 Boost 作为您正在构建的源的一部分。不要使用系统上碰巧存在的不可靠和不可控的版本;使用随您的软件分发的版本。
    • 将 100mb 的 boost 打包到
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 2013-11-18
    相关资源
    最近更新 更多