【问题标题】:Eclipse - "This project is not a CDT project"Eclipse - “这个项目不是 CDT 项目”
【发布时间】:2013-09-09 07:12:48
【问题描述】:

我有现有的 C 代码和现有的 Makefile,我想将它们包装到 Eclipse C 项目中(使用 Eclipse 3.4 Ganymede)。代码的组织方式如下:

主目录:/Project/Software

源文件和头文件:../Project/Software/CodeDir1 ../Project/Software/CodeDir2 等。

到目前为止,我一直在做这些步骤:

  1. 将 Eclipse 工作区设置为 /Project/
  2. 使用名称Software 创建新的C-Project --> 现在Eclipse 将所有源文件等集成到项目中
  3. 转到属性 -> C/C++ 构建并设置为“自定义构建选项”

我第一次这样做,一切正常。我将输出输入我的控制台,一切都很酷。但是后来“构建图标”(小锤子)变灰了,我不能再点击它了。如果我现在转到项目属性 - > C/C++ 构建它只会说“这个项目不是 CDT 项目”,而且我得到一个“java.lang.NullPointerException”的错误。

我怎样才能得到一个工作项目?

编辑:

为了避免一个简单的错误,我尝试了新版本的 Eclipse (Kepler)。我得到相同的错误(“无 CDT 项目”),但没有空指针异常。

但我可以稍微缩小问题范围:第一次我开始制作过程时它总是有效的。如果构建过程失败,我仍然可以转到我的构建属性。一旦我获得一个完整且无错误的构建运行,就会出现此问题。关于这一点,只有当我的 make call 是从 Eclipse 完成时才会发生。如果我从命令行调用它,我仍然可以从 eclipse 中运行一个。

【问题讨论】:

  • 我知道这听起来很愚蠢,如果你的 makefile 最后有一个空行 - 听起来构建在最后停滞不前。另一个问题是您是在使用make -f makefile 还是make -f makefile.mk,或者您是在调用构建脚本或批处理文件'makefile',因为这不是构建代码的意思的makefile。跨度>
  • 我正在使用gmake BUILD --file=... 等以及更多参数。实际上问题与makefile / make-process本身有关。它总是以某种方式删除我的 cproject 文件(这会导致错误) - 在更新问题之前我只是对其进行了更多研究。

标签: c eclipse project


【解决方案1】:

如果您正在导入现有 CDT 项目并看到“此项目不是 CDT 项目”,则可能是该项目是在旧版本的 Eclipse 上创建的,您需要:

  • 在Project Explorer 选项卡中选择项目,
  • 点击文件->新建->转换为C/C++项目

这将添加一个新的.cproject 文件,然后您就可以开始了。

【讨论】:

    【解决方案2】:

    创建新项目时,您需要将其创建为 makefile 项目 - 然后它将使用 make 来构建项目,但需要通过您的 makefile 和 make 调用来设置构建属性。

    这个link告诉你如何创建一个makefile项目:

    创建项目:

    选择文件 > 新建 > 项目。

    新建项目时,需要指定项目 类型。此项目类型将确定工具链、数据和选项卡 CDT 使用/显示的。

    选择要创建的项目类型。对于本教程,展开 C/C++ 文件夹并选择 C++ 项目。 C++ 项目向导打开。 单击此处查看插图。

    默认情况下,CDT 过滤工具链和项目类型 当前在这些列表中显示的基于语言支持 您为本教程选择的 C++ 项目向导。

    在项目名称字段中,输入 HelloWorld。保留使用默认值 已选择位置选项。

    接下来,您要选择要创建的项目类型。在新 CDT 项目向导,您可以从以下项目类型中进行选择: Executable - 提供可执行的应用程序。此项目类型 文件夹包含三个模板。 Hello World C++ 示例提供了一个 带有 main() 的简单 C++ Hello World 应用程序。你好世界ANSI C 示例提供了一个带有 main() 的简单 C Hello World 应用程序。空的 Project 提供了一个单一的源项目文件夹,其中不包含 文件。选择此模板后,结果是一个项目 只有项目类型所需的元数据文件。你是 期望为项目的目标提供源文件。这 可执行项目类型的生成文件由以下自动创建 CDT。

    1. 共享库 - 单独编译和链接的可执行模块。当您创建使用共享库的项目时 (libxx.so),您将共享库的项目定义为项目 您的应用程序的参考。对于这种项目类型,CDT 将目标文件组合在一起并将它们连接起来,以便它们可重定位 并且可以被许多进程共享。共享库的命名使用 格式 libxx.so.version,其中 version 是具有默认值的数字 1. libxx.so 文件通常是指向最新版本的符号链接 版本。自动创建此项目类型的 makefile 由 CDT 提供。
    2. 静态库 - 可以链接到另一个应用程序 (libxx.a) 的对象文件的集合。 CDT 组合目标文件 (即.o)到一个档案(.a)中,该档案直接链接到一个 可执行。此项目类型的生成文件是自动生成的 由 CDT 创建。
    3. Makefile 项目 - 创建一个没有元数据文件的空项目。此选择对于导入和修改现有的 基于makefile的项目;没有为此创建新的 makefile 项目类型。

    【讨论】:

    • 您好,谢谢您的回答。不幸的是,如果我选择“新项目”,则没有选项让我有机会创建“Makefile-Project”-我唯一的选择是“转换为 C/C++ Makefile 项目”-我尝试了这个并选择了我的旧项目。现在我可以选择构建属性,但它仍然显示空指针异常。我需要插件还是应该使用其他版本的 Eclipse?
    • @Toby 我添加了说明链接和第一部分的副本。
    • 没关系,我当然可以创建一个 Makefile 项目(我已经在不知不觉中做到了)。问题是我根本没有选择工具链,但 imo 这根本不应该是一个问题,因为 Makefile 正在链接到必要的工具。
    • 不,你做需要指向工具链以便知道a)使用哪个,b)如何解析错误的一些细节和c)如何运行调试器。
    • 好吧,由于我非常严格地按照说明进行操作,我认为我的问题剩下的唯一原因是我无法定义工具链。当涉及到项目向导中可以选择项目类型和工具链的点时,我只能选择“-- 其他工具链--”,因为我在 Windows 下没有“安装”工具链。在我的 makefile 中,我只是调用了 myp 项目文件夹中的 GCC 3.4.4。这可能是问题吗?
    【解决方案3】:

    问题的根源不在 Eclipse 中,而在 makefile 中。

    整个项目的目录结构如下:

    Project_Dir\Documentation\
    Project_Dir\Output\
    Project_Dir\Software\
    Project_Dir\Tools\
    

    源文件都位于\Software\ 目录中。所以我选择Project_Dir\Software\作为项目文件夹,这意味着.project和.cproject文件位于那里。

    makefile 本身也会将输出文件临时写入\Software\ 文件夹。最后它将所有文件从Software 目录复制到Output(实际上是move *.* Project_Dir\Output\ 命令)

    这个命令还移动了 Eclipse 项目文件,因此 Eclipse 很难找到它们并打开项目属性。

    两种解决方案:

    1. 将 Eclipse 中的项目目录更改为 \Project_Dir\,因为无论如何它都是与项目相关的东西
    2. 在makefile中添加两行:在move命令之前:attrib +r +s *.project和attrib -r -s *.project在move命令之后。 (.cproject 相同)。这可以防止 makefile 移动文件

    【讨论】:

      【解决方案4】:

      我能够通过安装/更新相应的 CDT 插件(如“Visual C++ 支持”)来克服这个问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-05-20
        • 1970-01-01
        • 2010-09-23
        • 2012-07-23
        • 2014-02-14
        • 2011-10-12
        • 2011-10-21
        • 1970-01-01
        相关资源
        最近更新 更多