gpt4 book ai didi

c++ - 如何为 C++ 创建 EDE 项目

转载 作者:可可西里 更新时间:2023-11-01 18:27:33 24 4
gpt4 key购买 nike

我一直在尝试为 C++(emacs24 + 内置 CEDET)设置一个 EDE 项目,但我开始感到绝望,因为我似乎无法找到生成 makefile 的方式。我对 Emacs 比较陌生。我将尝试描述我在做什么:

我有一个这样的玩具项目:

main.cpp
other/
Utils.cpp
Utils.h
CGrabBuffer.cpp
CGrabBuffer.h

main.cpp 在“other/”目录中包含两个 .h。这些是我使用这个简单的目录设置来设置 EDE 项目所遵循的步骤:

  • 在 emacs 中打开 main.cpp 并执行 M-x ede-new ;输入:制作;名称:主项目
  • 打开“other”目录中的其中一个文件并执行 M-x ede-new ;输入:制作;名称:aux-proj
  • 现在是创建目标的时候了(我相信在本例中是三个):
    • 在 main.cpp 缓冲区上:M-x ede-new-target ;名称:主要;类型:程序。出现提示时,我将 main.cpp 添加到此目标。
    • 我对其他两个目标重复相同的操作(具有 Utils.cpp 和 Utils.h 的 Utils 以及具有 CGrabBuffer.cpp 和 CGrabBuffer.h 的 CGrabBuffer)。在这里,我发现了第一个问题。这两个目标必须是什么类型?我只希望他们生成 .o 文件。
  • 完成此操作后,我向所有三个目标键入 M-x ede-customize-current-target 并添加一些包含路径、一些库等。
  • 在此之后,如果我调用 M-x ede-compile-project 它不会编译,因为:
    • 首先尝试编译main.cpp;我不知道如何指定(使用 EDE)在尝试构建 main.cpp 之前需要 Utils.o 和 CGrabBuffer.o。
    • 如果我手动更改顺序(编辑 Makefile),它无法链接 main.cpp,因为它找不到 Utils.o 和 CGrabBuffer.o。

如您所见,我陷入了一片困惑之中。也许我什至不理解“目标”在 EDE 中的含义。我还读到了必须在 .emacs 文件中指定的 ede-cpp-root-project 的存在。我还没有尝试过,因为我认为它所做的只是帮助语义。它不会生成 Makefile,是吗?我可以拥有(或者我是否需要)一个使用 Project.el 构建的 EDE 项目以及使用 ede-cpp-root-project 进行语义构建的相同项目?还是多余?

抱歉,如果我误解了很多东西,但我很困惑,而且是 emacs 的新手,这让事情变得更糟。感谢您的耐心等待!

编辑:通过一些修改和我收到的回复,我已经能够弄清楚很多东西,所以非常感谢。我仍然不明白的是必须在 .emacs 文件中指定的 ede-cpp-root-project 的使用。它只是为了 C++ 语义吗?使用 Project.el 的项目以及 .emacs 中的 elisp 行是否多余?

最佳答案

EDE 旨在处理许多不同类型的项目,通常是在 Emacs 之外使用其他工具编写构建系统的类型。

为您创建 Makefile 的 EDE 项目类型可以做很多事情,但您需要对构建系统有一些基本的了解才能发挥作用,而且您确实需要自定义项目才能获得任何东西工作的复杂性。

我最近在 EDE 手册中添加了一个部分,以帮助进行自动生成 Automake 文件的基本项目设置。您可以在此处查看教程:

http://www.randomsample.de/cedetdocs/ede/ede/Quick-Start.html

相同的步骤将适用于仅使用 Make 的项目,但基于 Make 的项目通常由于额外的复杂性而在共享库方面遇到问题。

Mike 的回答很好,但我认为将 .h 文件添加到与 .cpp 源相同的目标是可以的。它将分别跟踪它们。

另一个有用的技巧是使用整个项目编译击键 (C-c . C),每当您更改大的内容时,它都会使用大写 C。这将重新生成 Makefile,重新运行任何需要的 Automake 功能,并从顶部开始。

编辑:对于给定的项目区域,您只需要一个 EDE 项目。当没有其他自动项目类型工作时,ede-cpp-root 项目很有用。那就是当您在 .emacs 文件中创建它时,以便需要项目定义的其他工具(如语义的智能完成和标记查找)将起作用。

关于c++ - 如何为 C++ 创建 EDE 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9377873/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com