【问题标题】:Eclipse CDT build generated for simplest possible project does not set include path correctly为最简单的项目生成的 Eclipse CDT 构建未正确设置包含路径
【发布时间】:2016-07-16 08:28:33
【问题描述】:

日食:开普勒; CDT:8.3.0

我刚开始在 C++ 项目中使用 Eclipse CDT。我只是使用 UI 将一个新的空 C++ 类和关联的头文件自动添加到项目中。然后我按下构建按钮。构建失败。由于未设置包含路径的简单问题,Eclipse CDT 生成的构建脚本失败:

Building file: ../Foo.cpp
Invoking: Cross G++ Compiler
g++ -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"Foo.d" -MT"Foo.d" -o "Foo.o" "../Foo.cpp"
../Foo.cpp:8:17: fatal error: Foo.h: No such file or directory
compilation terminated.
make: *** [Foo.o] Error 1

它在子目录Debug/ 中构建(这是默认的构建配置 CDT 设置)。如果我进入Debug/ 目录并在上面的g++ 命令中添加“-I../”,它就可以工作。 Eclipse CDT 创建的构建脚本未能找到 CDT 为我初始化的源文件。为什么会失败?看起来真的很傻。我该如何解决?

【问题讨论】:

  • 你确定你没有编辑过自动生成的Foo.cpp吗?请在您的问题中发布该文件。
  • 100%。我从字面上看:开始了一个新项目>>新类>>新存根main()>>构建,没有碰任何东西。

标签: c++ eclipse


【解决方案1】:

有几件事可能是原因:

  1. 确保您使用的是#include "Foo.h" 而不是#include <Foo.h>,引号与括号。
  2. 尝试删除.h,如#include "Foo"
  3. 确保您的.h 文件在src 文件夹中,而不是在它之外。既然您说您必须将-I ../ 添加到Debug,那么这很可能是您的问题。 Foo.h 文件位于项目的其余 .h 文件所在的文件夹之外。
  4. 检查 Eclipse 是否自动创建 Makefile 并且不希望您生成它。这很可能不适合您。

很可能是一些简单的东西被遗漏了。我经常在 Eclipse 中遇到这些小问题。

编辑

从您的评论来看,#1 是您问题的解决方案。如果 Eclipse 在为类创建 .h.cpp 时自动生成 #include <Foo.h> 而不是 #include "Foo.h",那么这是 Eclipse 的一个错误。

【讨论】:

  • 哦。是的。 CDT autogend 带有 '#include ',而不是 '#include "Foo.h"'。但它为什么要这样做呢?有一些配置选项吗?
  • 您将#include <Foo.h> 用于标准头文件(例如stdio.h 等),但由于您使用了-I ../,因此Foo.h 现在被视为标准头文件。标准头文件在整个项目文件夹中都可用,但我建议您仅在其他项目中使用相同的头文件时才这样做。如果没有,只需将头文件复制到与使用它的 C 源文件相同的文件夹中,然后改用 #include "Foo.h"
  • 既然我回答了你的问题,根据你的评论,你能把它标记为已回答吗?
  • @RowenChumacera "You use #include " 是的,我知道你这样做了,这就是为什么 Eclipse 会使用 #include 生成项目 .cpp+.h 的原因.
  • @user2205930 "如果 Eclipse 在为一个类同时创建 .h 和 .cpp 时自动生成 #include 而不是 #include "Foo.h" 那么这是一个Eclipse 的错误。”它是。所以这是一个已知的日食错误?还是我的配置? eclipse 会为你做这个吗?
猜你喜欢
  • 2011-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-29
  • 2014-03-06
  • 2013-02-27
  • 1970-01-01
相关资源
最近更新 更多