【问题标题】:main.cc:5:30: fatal error: folder/file.h: No such file or directorymain.cc:5:30:致命错误:文件夹/file.h:没有这样的文件或目录
【发布时间】:2014-02-19 22:02:04
【问题描述】:

当我在 Ubuntu 终端中输入 make 时,我得到:

main.cc:5:30: fatal error: folder/file.h: No such file or directory

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

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

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

#include <folder/file.h>

它没有问题地找到它,但是当它构建它时我得到了错误。

我需要设置一个标志以便它包含文件夹吗?如果是这样,那到底是什么样的?

【问题讨论】:

  • 如果“文件夹”与源文件在同一目录下,请使用#include "folder/file.h"
  • @Malloc,编译时还需要添加-I

标签: c++ ubuntu makefile


【解决方案1】:

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

#include <folder/file.h>

我假设您将 file.h 存储在 $you/include/path/folder 中,因此,您需要将 -I ${your/include/path/} 传递给编译器,例如:

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

请注意,您在代码中将包含指定为&lt;dir/file.h&gt;,我认为这种定义显示了以下想法:

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

那么,你只能写makefile来指定它父亲的包含路径

【讨论】:

    【解决方案2】:

    您需要使用引号而不是 &lt;&gt; 来包含,这使得编译器首先在源文件的目录中搜索:

    #include "folder/file.h"
    

    或者将当前目录显式添加到包含路径中

    g++ c -I. main.cc
    

    【讨论】:

    • -I. 为我做了这件事,+1
    【解决方案3】:

    这在一定程度上取决于您的 C 编译器,但“通常”当您使用 &lt; ... &gt; 语法包含文件时,编译器只会在您在命令行中使用 -I 指定的目录中查找那些头文件flag,以及各种内置的系统目录。

    值得注意的是,它通常不会在当前工作目录中查找,除非您明确将-I. 添加到编译行。

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

    所以,要么切换到#include "folder/file.h",要么将-I. 添加到你的编译行。

    【讨论】:

    • 就是这样!谢谢!尽管其他人的工作也很好,但这是我需要为这个构建做的。
    猜你喜欢
    • 1970-01-01
    • 2017-05-09
    • 2021-05-15
    • 2014-10-31
    • 2022-01-11
    • 2021-09-19
    • 2016-06-23
    相关资源
    最近更新 更多