关于在g ++中包含目录顺序的问题

时间:2009-08-07 17:07:29

标签: c++ g++

不知何故,这是我多年来第一次遇到这个问题,而且我不确定处理它的选项是什么。

我正在将应用程序移植到Linux,并且其中一个目录中有一个头文件,显然与标准C库中的头文件同名,并且当包含“cstdlib”时它是该目录中的另一个文件,它试图包含本地文件而不是标准库中的正确文件。

特别是,该文件名为“endian.h”,它试图包含在/usr/include/bits/waitstatus.h中。因此,它不是包含/usr/include/bits/endian.h,而是尝试包含./endian.h。没有区别

我唯一的选择是将项目中的endian.h重命名为其他东西,还是有一种方法可以强制编译器在与首先包含它的文件相同的目录中查找?


编辑:

好吧,这对我来说只是一个愚蠢的错误。我的Makefile正在设置-I。 ,所以它首先在当前目录中查找。 D'哦。

3 个答案:

答案 0 :(得分:6)

之间有一个重要的区别:

#include "endian.h" // Look in current directory first.

#include <endian.h> // Look in the standard search paths.

如果您想要当前目录中的那个,请使用引号。如果您想要系统一个,那么使用尖括号。请注意,如果已通过“-I”标志将当前目录放在include路径中,则两者都可以解析为当前目录中的目录,在这种情况下,不应将“-I”与当前目录一起使用。

答案 1 :(得分:1)

如果您使用“”而不是&lt;&gt;包含文件,则应首先将标头与包含该文件的文件放在同一目录中。

但是如果可能的话,重命名文件要好得多恕我直言:如果移动文件,更改构建系统等,它将避免问题......“vs vs&lt;&gt;也是编译器相关的(C标准没有强制要求像g ++那样)。

答案 2 :(得分:1)

也许您可以查看“-I”和“-I-”选项?