main.cc:5:30: 致命错误:无法找到文件夹/文件.h:没有那个文件或目录。

5
当我在Ubuntu终端中使用make命令时,会得到以下结果:
main.cc:5:30: fatal error: folder/file.h: No such file or directory

该文件夹存在于工作目录中,file.h文件存在于指定的文件夹中。

当我输入ls命令时,它会在我的工作目录中列出文件夹和文件。

奇怪的是,当我在Geany中打开它,并要求在文件夹中查找文件时,

#include <folder/file.h>

在查找时,它没有问题,但是在构建时,我遇到了错误。

是否需要设置标志以便包括该文件夹?如果需要,具体应该是什么样子的呢?


1
如果“folder”位于与您的源文件相同的目录中,请使用 #include "folder/file.h" - Baum mit Augen
@Malloc,在编译时还需要添加“-I”。 - How Chen
3个回答

12

这取决于你使用的C编译器,但通常情况下,当你使用< ... >语法引用头文件时,编译器只会在你在命令行中使用-I标志指定的目录以及各种内置系统目录中查找这些头文件。

特别要注意的是,它通常不会在当前工作目录中查找,除非你在编译命令行中明确添加了-I.

或者,如果你使用" ... "形式的#include,那么它也会在当前工作目录中查找。

因此,要么切换到#include "folder/file.h",要么在编译命令行中添加-I.


1
就是这样了!谢谢!虽然其他的也可以,但这才是我需要为此构建所做的。 - razorsyntax

6

你需要使用引号,而不是<>来进行include操作,这样就可以使编译器首先在源文件所在的目录中查找:

#include "folder/file.h"

或者,将当前目录显式地添加到您的包含路径中。

g++ c -I. main.cc

3

关于您的问题,我认为首先您需要告诉编译器您的头文件在哪里,因为您将代码编写为:

#include <folder/file.h>

我假设你将文件.h存储在$you/include/path/folder中,因此你需要向编译器传递-I ${your/include/path/},如下所示:

gcc -I${your/include/path/} ...

请注意,您在代码中指定的include为<dir/file.h>,我认为这种定义表明以下想法:

$main_include_path
|
+----folder1
|
+----folder2
|
.
.
.----folderN

然后,你只需要编写makefile指定它的父路径包含路径。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接