实际需要更长的#include路径?

时间:2012-03-01 17:22:39

标签: c++

例如,如果我有一个名为foo.h的文件,我是否可以通过执行以下操作来包含它:

#include "foo.h"

或者我有时必须做以下事情:

#include "bar/foobar/foo.h"

编辑 - 它们是否只是通过限制搜索文件来缩短编译时间?

5 个答案:

答案 0 :(得分:2)

基本上,您可以将包含路径作为选项传递给C ++编译器,但它不会递归查找文件。如果您传递路径/opt/include并执行“#include "foo.h",它将_只查找/opt/include/foo.h,而不是/opt/include/dummy/foo.h

换句话说,要么在命令行上传递每个可能的包含路径,要么传入根目录并使用#include "dummy/foo.h"

“导航”

编辑:@MatthieuM。在下面提出了另一个好处,#include "mylibrary/api.h"使您使用的文件更加清晰,而不仅仅是#include "api.h",尤其是如果您使用的是多个库。

答案 1 :(得分:1)

编译器不会递归搜索您的源目录。如果您想使用#include "foo.h",则需要使用-Ibar/foobar进行编译,告诉编译器它应该在bar/foobar中查找头文件。

否则,您将必须使用完整(相对)路径。我倾向于优先于-I,因为它使源更加独立于编译器标志(在构建系统之间进行更改时,您会很感激)。

答案 2 :(得分:0)

可能存在多个具有相同名称的头文件的情况 - 在这种情况下,路径有助于消除歧义。

答案 3 :(得分:0)

我认为这取决于您的项目设置,例如您在Visual C ++中有“Additional Include Directories”这样的部分,因此IDE也会搜索这些目录中的文件。

答案 4 :(得分:0)

第一个语句#include“foo.h”将在当前工作目录或其他include目录下提到的目录中搜索foo.h。

如果您的头文件位于其他路径中,则需要明确提及它。