如何为C ++创建EDE项目
我一直在尝试为C ++(emacs24 +内置CEDET)建立一个EDE项目,我开始变得绝望,因为我似乎无法找到想要生成makefile的方式。 我对Emacs来说比较新。 我会尽力描述我在做什么:
我有一个玩具项目如下设置:
main.cpp
other/
Utils.cpp
Utils.h
CGrabBuffer.cpp
CGrabBuffer.h
main.cpp在“other /”目录中包含两个.h。 这些是我通过这个简单的目录设置来设置EDE项目的步骤:
Mx ede-new
; 类型: Make
; 名称: main-proj
。 Mx ede-new
; 类型: Make
; 名称: aux-proj
。 Mx ede-new-target
; 名称: main
; 键入: program
。 当提示时,我将main.cpp添加到此目标。 Mx ede-customize-current-target
,并添加一些包含路径,一些库等。 Mx ede-compile-project
它不会编译,因为: 正如你所看到的,我陷入了一团糟。 也许我甚至都不明白EDE中的“目标”是什么意思。 我还读过了ede-cpp-root-project的存在,它必须在.emacs文件中指定。 我没有尝试过,因为我认为它只是帮助语义。 它不生成Makefiles,是吗? 我可以有(或者我需要)使用ede-cpp-root-project作为语义的Project.el构建的EDE项目吗? 或者是多余的?
对不起,如果我误解了很多东西,但是我很困惑,并且对emacs感到陌生,这会让事情变得更糟。 谢谢你的耐心!
编辑:有一些修补和我收到的答复我已经能够找出很多东西,所以非常感谢。 我仍然不明白的是使用必须在.emacs文件中指定的ede-cpp-root-project。 它只是为了c ++语义吗? 使用Project.el的项目以及.emacs中的elisp项目是否多余?
EDE旨在处理许多不同类型的项目,通常是在其他工具中使用Emacs编写构建系统的类型。
为您创建Makefiles的EDE项目类型可以做很多事情,但您需要对构建系统有一些基本的了解才能有所帮助,而且您确实需要自定义项目以获取任何复杂的工作。
我最近在EDE手册中添加了一个部分,以帮助您自动生成Automake文件的基本项目设置。 你可以在这里查看教程:
http://www.randomsample.de/cedetdocs/ede/ede/Quick-Start.html
相同的步骤将适用于只使用Make的项目,但由于额外的复杂性,基于Make的项目通常会遇到共享库的问题。
Mike的回答非常好,但我认为只需将.h文件添加到与.cpp
源相同的目标即可。 它会分开跟踪它们。
另一个有用的技巧是使用整个项目编译按键(Cc。C),只要你改变一些大的东西,它就会使用大写字母C. 这将重新生成Makefiles,重新运行任何所需的Automake功能,并从顶部开始。
编辑 :你只需要一个EDE项目给一个项目区域。 当没有其他自动项目类型工作时,ede-cpp-root项目很有用。 这就是当你在你的.emacs文件中创建它时,需要项目定义的其他工具,如语义的智能完成和标记查找等。
好吧,我想这次我已经想通了,但这很丑。 Utils.cpp
和CGrabBuffer.cpp
不应该得到他们自己的单独目标,因为似乎没有合适的目标类型。 相反,您需要创建一个归档或库,它会自动为您编译Utils.cpp
和CGrabBuffer.cpp
。 下面,我假设你想要静态,但很容易改变。
[对于档案馆或图书馆不熟悉的任何人,他们基本上只是将.o
文件收集到一个单独的单元中。 它实际上并没有使编辑更难。 在这里阅读更多。]
1)按照上面的前两步(包括制定main
目标,但不包括其他目标)。
2)切换到Utils.cpp并执行Mx ede-new-target
ede Mx ede-new-target
; 名称: aux
; 键入: archive
。 出现提示时,将Utils.cpp添加到此目标。
3)切换到CGrabBuffer.cpp并做Cc . a
Cc . a
; 目标: aux
。
4)用Mx ede-proj-regenerate
重新生成Makefile。 此时,如果您在other
子目录中运行make
,则应该获得存档libaux.a
。
5)切换回main.cpp并执行Mx ede-customize-current-target
。 这会产生一个交互式emacs自定义缓冲区,它允许您编辑ede配置的详细信息。 在Ldflags
部分下,单击[INS]
。 这会弹出一个表示Link Flag:
的新行Link Flag:
并且有一些不同颜色的框供您输入(我的是灰色的)。 键入-Lother -laux
,以便在编译main
时包含other/libaux.a
。 然后,在缓冲区的顶部,按[Accept]
,它应保存该更改并切换回main.cpp。
6)用Mx ede-proj-regenerate
重新生成Makefile。
现在,不幸的是,Makefile首先将main
目标设main
目标,然后进入other
目录并做到这一点。 不幸的是,这意味着顶层目录下的make不能在干净的树上工作。 我不知道这是为什么,因为这似乎永远不会成为您用EDE制作过的任何项目中的所需。 我找不到任何方法来改变这种情况,除了这个黑客:
7)做Mx customize-project
; 在Inference-Rules
单击[INS]
。 然后输入Target: all
; 相关性: aux main
; 规则: [INS]
; 字符串@:
(这最后一个只是为了防止在带有选项卡的空规则上出现错误;大概是一个EDE错误。)单击[Accept]
,然后重新生成Makefiles。
所以现在,在你的顶级目录中,你可以运行make,而main
应该是一个可执行的工作文件。
我很快就确信EDE尚未准备好被其他作者使用。 尽管它的大小和他们已经明确地投入其中的努力量,但它太麻烦了,太违反直觉,并且不够聪明。 这太遗憾了。 Emacs需要这样的东西。
链接地址: http://www.djcxy.com/p/62179.html