【发布时间】:2010-10-13 07:25:49
【问题描述】:
我查看了C++ 编程语言 试图找到这个问题的答案。当我在标题中#include "my_dir/my_header.hpp" 时,它在哪里寻找这个文件?它是相对于标题、相对于包含它的源文件还是其他什么?
【问题讨论】:
标签: c++ include c-preprocessor
我查看了C++ 编程语言 试图找到这个问题的答案。当我在标题中#include "my_dir/my_header.hpp" 时,它在哪里寻找这个文件?它是相对于标题、相对于包含它的源文件还是其他什么?
【问题讨论】:
标签: c++ include c-preprocessor
完整的搜索路径可能取决于编译器。对于 Visual Studio,the documentation 声明它:
(...) 指示预处理器在包含 #include 语句的文件的同一目录中查找包含文件,然后在包含 (#include) 该文件的任何文件的目录中查找包含文件。然后预处理器沿着 /I 编译器选项指定的路径搜索,然后沿着 INCLUDE 环境变量指定的路径搜索。
【讨论】:
对于 GCC 版本
【讨论】:
定义了它的实现。文件(例如 foo.h)上的那些 #include"my_dir/xxy.hpp" 与文件相关(foo.h 和 my_dir 在目录层次结构中处于同一级别)。 对于某些(大多数?)编译器,您可以使用标志来使用这些 (#include
我知道 gcc / g++ 提供了 -I 标志。所以你可以使用 g++ -I /home [...] 表示xxy.hpp文件位于/home/my_dir/目录下。 我已经有一段时间没有使用任何其他 C/C++ 编译器了。
【讨论】:
这取决于您在#include 指令中使用的语法:
#include "path-spec"
#include <path-spec>
引用形式:此形式指示预处理器在包含#include 语句的文件的同一目录中查找包含文件,然后在包含(#include)该文件的任何文件的目录中查找。然后预处理器沿着 /I 编译器选项指定的路径搜索,然后沿着 INCLUDE 环境变量指定的路径搜索。
尖括号形式:这种形式指示预处理器首先沿着 /I 编译器选项指定的路径搜索包含文件,然后在从命令行编译时,沿着 INCLUDE 环境变量指定的路径搜索。
path-spec 是一个文件名,前面有一个目录规范。文件名必须命名现有文件。 path-spec 的语法取决于编译程序的操作系统。
此信息应在您的特定 C++ 预处理器参考的文档中,以上内容来自this article on MSDN,其中包含更多关于该主题的信息。
【讨论】:
它相对于当前源文件和任何给定的搜索路径(-I 表示 gcc)。
【讨论】: