我在 Linux 系统上运行 g++,我的稳定头文件存在于只读目录/inc 中,而我正在处理的头文件位于/inctest 中。 因此,两个目录中可以存在相同的文件名。我希望能够保持这种方式,以便我总是在/inc 包含任何 header 之前包含/inctest 中存在的任何 header 。
我遇到的问题是,在不同的时间,它似乎是任意地从这些目录中的任何一个中获取,而不是总是先从同一个目录中获取。
也就是说,我运行 g++ -I/inctest -I/inc a.cpp b.cpp ...
有时我从/inc 获得一个,其他时候我从/inctest 获得一个。
我的 -I 参数指定的顺序无关紧要吗? g++ 的手册页说“当您使用多个相同类型的选项时,顺序很重要”。
有没有其他方法可以保证始终在另一个目录中的同名对应文件之前包含一个目录中的 header ?我仍然需要包括两者,因为/inc 包含我当前未处理的所有 header 。重命名我正在处理的那些没有帮助,因为那样我需要更改我所有的#includes ...
编辑:我深入挖掘并注意到/inc 中的一个 header 包含另一个 header ,该 header 同时存在于/inc 和/inctest 中。我暂时将此 header 复制到/inctest,果然,它现在包含了正确的 header 。这是错误还是正确的行为?
最佳答案
header 的确切位置未由标准指定,并且通常编译器在记录正在使用的内容方面有些松懈。 -I
标志通常用于在文件本地找不到的 header ,包括某些内容。但是,当包含一个文件另一个 header 时,选择的文件通常取决于文件的包含方式:
- 使用
#include <xxx>
时在 header 中,-I
观察到标志。 - 使用
#include "xxx"
时在 header 中,首先在带有#include
的文件所在的目录中查找文件指令位于。
问题当然是,严格来说形式 <xxx>
保留给标准库使用。
关于c++ - g++ -I 不按指定顺序工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21689036/