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