如果在使用CMake和c ++编译时两个头共享相同的名称会发生​​什么?

时间:2018-04-16 02:41:19

标签: c++ cmake compilation g++

给出以下目录结构:

enter image description here

注意有两个名为System-Libraries.hpp

的文件

我目前包含的方式是:

#include "System-Libraries.hpp"

显然这里存在歧义。这个项目编译并运行,因此系统似乎正在寻找正确的标题,但我不认为这是因为定义的行为我觉得我很幸运。

CMake,Make和g ++如何确定哪两个文件将用于给定cpp的编译?

注意我不是在问如何修复它,修复它涉及更改标题名称以使它们不同或包含相关路径,这不是我担心的。我想知道为什么CMake和g ++都没有抱怨这两个文件被命名为相同并被包含在同一个最终的可执行文件中。

1 个答案:

答案 0 :(得分:1)

预处理器按此顺序搜索包含文件:

引用表格:

  • 与包含#include语句的文件位于同一目录中。
  • 在当前打开的包含文件的目录中,按照打开它们的相反顺序。搜索从父包含文件的目录开始,并继续向上遍历任何祖父包含文件的目录。
  • 沿着每个/ I编译器选项指定的路径。
  • 沿着INCLUDE环境变量指定的路径。

角括号形式:

  • 沿着每个/ I编译器选项指定的路径。
  • 在命令行上进行编译时,沿着INCLUDE环境变量指定的路径进行编译。