【发布时间】:2018-04-16 02:41:18
【问题描述】:
给定以下目录结构:
注意有两个文件名为System-Libraries.hpp
我目前包含的方式是:
#include "System-Libraries.hpp"
很明显,这里存在歧义。该项目编译并运行,因此系统目前似乎正在找到正确的标头,但我不希望这是因为定义的行为,我认为我只是走运。
CMake、Make 和 g++ 如何确定 2 个文件中的哪一个将用于编译给定的 cpp?
注意我不是在问如何修复它,修复它涉及更改标题名称以使其不同或包含包含的相对路径,这不是我担心的。我想知道为什么 CMake 和 g++ 都没有抱怨这两个文件被命名相同并包含在同一个最终可执行文件中。
【问题讨论】:
-
@Amadeus 这是怎么复制的?我的问题和链接的问题彼此无关。在包含标题时,我不是在询问“”和 之间的区别。我在问当你有两个同名的不同标题时会发生什么
-
你读过这部分:对于#include "filename",预处理器首先在与包含指令的文件相同的目录中搜索?这就是你的答案。编译器查看源文件所在的目录
-
这个可能更接近:Library include paths with same header name。我不确定 CMake 对这个问题是否有实质性影响。这是一个存在于编译器和预处理器中的问题;不是驱动编译过程的工具。
-
我猜它只会包含它找到的该文件名的第一次出现。我之前在一个项目中遇到过这个问题,当我在我的
CMakeList.txt中更改我的include_directories的顺序时出现了这个问题。
标签: c++ cmake compilation g++