2014-07-01 50 views

回答

5

通常你给编译器(或更具体地说,预处理器)一串包括目录,告诉它到哪里寻找头文件。这通常由Makefile完成(或者在IDE内部构建时从项目设置完成)。

该选项的外观当然是由每个编译器决定的。用gcc,it's the -I option

+0

谢谢。我挖掘一些挖掘并在CMakeFiles文件夹中找到一个“Target Directories.txt”文件。 –

+0

在GCC中还有'-iquote'参见https://gcc.gnu.org/onlinedocs/cpp/Include-Syntax.html – Clifford

0

就我而言,您可以将.h和.cpp文件放在不同的目录中。假设你有一个头文件夹和一个.cpps文件夹。在你的cpp文件中,你只需#include“headers/myheader.h”,并且应该完美地工作。

+0

这是对你*工作方式的评论,而不是对问题的回答。 – Clifford

+0

我刚刚举了一个例子。当然,他可以自由选择另一种方法。 –

+0

你错过了我的观点 - 你还没有回答这个问题。他想知道当代码中没有提供路径时编译器知道在哪里找到包含文件。它关于编译器如何工作,而不是他如何工作。这是一个明确的技术问题,而不是意见,惯例或惯例。 – Clifford

0

否除了上面提到的-I编译器选项,您可以在#include指令的filename参数中使用(通常是相对)路径规范。

0

对于:

#include "header.h" 

编译器(或更严格地,预处理器)将首先在包括源文件的文件夹中,然后通过在一些编译器相关的形式指定的文件的列表 - 通常命令行选项和/或环境变量。

对于:

#include <header.h> 

的包括源的文件夹没有搜索,并且仅指定给编译器的路径列表中进行搜索。

GCC实际上有三个搜索组:

  • 电流源文件路径
  • 报价包括目录
  • 系统包括目录

引头搜索的顺序所有的三个,而<header.h>类型包含只搜索最后一个。并非所有的编译器都具有关于什么构成“系统包括”的具体内容,最后两个编译器没有区分并且以相同的方式指定。

您的编译器应该记录实际的行为,例如GCC,请参阅here

相关问题