c++ - g++ -I 不按指定顺序工作

标签 c++ linux g++ header-files

我在 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/

相关文章:

php - 为 PHP 构建 Saxon/C 时出错

c++ - lua5.3 dll 文件中缺少名称

c - C 的任务库?

python - 什么用户应该拥有我的 Python 脚本和应用程序目录?

c++ - 带有 std::vector 的模板 typedef 具有自定义分配器

c++ - C++ 中的可移植 wchar_t

linux - 从两行中提取文本

c++ - gcc 无法编译命名空间中的静态函数

C++17 std::G++ 中的可选?

C++ 继承。对象调用父类(super class)方法而不是它自己的方法?