Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何为C++; 我一直在尝试为C++建立一个埃代项目(EMACS24+BuuGueCEDET),我开始变得绝望,因为我似乎找不到我想要生成MaX文件的方式。我对Emacs比较陌生。 我将尝试描述我正在做的事情:_C++_Emacs_Cedet_Emacs Semantic - Fatal编程技术网

如何为C++; 我一直在尝试为C++建立一个埃代项目(EMACS24+BuuGueCEDET),我开始变得绝望,因为我似乎找不到我想要生成MaX文件的方式。我对Emacs比较陌生。 我将尝试描述我正在做的事情:

如何为C++; 我一直在尝试为C++建立一个埃代项目(EMACS24+BuuGueCEDET),我开始变得绝望,因为我似乎找不到我想要生成MaX文件的方式。我对Emacs比较陌生。 我将尝试描述我正在做的事情:,c++,emacs,cedet,emacs-semantic,C++,Emacs,Cedet,Emacs Semantic,我有一个这样的玩具项目: main.cpp other/ Utils.cpp Utils.h CGrabBuffer.cpp CGrabBuffer.h main.cpp包含“other/”目录中的两个.h。以下是使用此简单目录设置设置EDE项目的步骤: 在emacs中打开main.cpp并执行M-x ede new;类型:Make;名称:主项目 打开“其他”目录中的一个文件,然后执行M-x ede new;类型:Make;名称:辅助项目 现在是时候制定目标了(我认为在这种

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

main.cpp
other/
  Utils.cpp 
  Utils.h
  CGrabBuffer.cpp
  CGrabBuffer.h
main.cpp包含“other/”目录中的两个.h。以下是使用此简单目录设置设置EDE项目的步骤:

  • 在emacs中打开main.cpp并执行
    M-x ede new
    ;类型:
    Make
    ;名称:
    主项目
  • 打开“其他”目录中的一个文件,然后执行
    M-x ede new
    ;类型:
    Make
    ;名称:
    辅助项目
  • 现在是时候制定目标了(我认为在这种情况下有三个目标):
    • 在main.cpp缓冲区上:
      M-x ede新目标
      ;名称:
      main
      ;类型:
      程序
      。出现提示时,我将main.cpp添加到此目标
    • 我对其他两个目标重复相同的操作(Utils包含Utils.cpp和Utils.h,以及CGrabBuffer包含CGrabBuffer.cpp和CGrabBuffer.h)。这里我发现了第一个问题。这两个目标必须是什么类型的?我只希望它们生成.o文件
  • 完成后,我键入
    M-x ede将当前目标自定义为所有三个目标,并添加一些include路径、一些库等
  • 在此之后,如果我调用
    M-x ede compile project
    ,它不会编译,因为:
    • 它首先尝试编译main.cpp;我不知道如何指定(使用EDE)在尝试构建main.cpp之前同时需要Utils.o和CGrabBuffer.o
    • 如果我手动更改顺序(编辑Makefile),它将无法链接main.cpp,因为它找不到Utils.o和CGrabBuffer.o
正如你所看到的,我正处于一片混乱之中。也许我甚至不明白EDE中“目标”是什么意思。我还阅读了关于ede cpp根项目的存在,该项目必须在.emacs文件中指定。我并没有尝试过它,因为我认为它只是在语义上有所帮助。它不会生成makefile,是吗?我是否可以(或者我是否需要)使用project.el构建一个EDE项目,并使用EDE cpp根项目作为语义?还是多余

很抱歉,如果我误解了很多东西,但我非常困惑,而且不熟悉emacs会让事情变得更糟。谢谢你的耐心


编辑:通过一些修改和收到的回复,我已经能够理解很多东西,非常感谢。我仍然不明白的是ede cpp根项目的用法,它必须在.emacs文件中指定。它是C++语言的吗?把项目和project.el以及elisp行放在.emacs中是多余的吗?

好吧,我想这次我已经弄明白了,但这很难看
Utils.cpp
CGrabBuffer.cpp
不应获得各自的目标,因为似乎没有合适的目标类型。相反,您需要创建一个归档或库,它将自动为您编译
Utils.cpp
CGrabBuffer.cpp
。下面,我假设您想要静态的,但很容易更改

[对于那些不熟悉档案或库的人来说,他们基本上只是将
.o
文件收集到一个单独的单元中。这实际上不会使编译变得更困难。请阅读更多信息。]

1) 遵循上面的前两个半步骤(包括创建
main
目标,但不创建其他目标)

2) 切换到Utils.cpp和do
M-x ede新目标
;名称:
aux
;类型:
存档
。出现提示时,将Utils.cpp添加到此目标

3) 切换到CGrabBuffer.cpp并执行
C-C。a
;目标:
aux

4) 使用
M-x ede proj REGENATE
重新生成生成文件。此时,如果在
other
子目录中运行
make
,则应获得存档
libaux.a

5) 切换回main.cpp并执行
M-x ede自定义当前目标
。这将打开一个交互式emacs定制缓冲区,允许您编辑ede配置的详细信息。在
Ldflags
部分下,单击
[INS]
。这会弹出一个新行,上面写着
链接标志:
,并且有一些不同颜色的框供您输入(我的是灰色的)。键入
-Lother-laux
,以便在编译
main
时包含
other/libaux.a
。然后,在缓冲区的顶部,按
[Accept]
,这将保存更改并切换回main.cpp

6) 使用
M-x ede proj REGENATE
重新生成生成文件

现在,不幸的是,Makefile首先使
main
成为目标,然后下降到
other
目录并使其成为目标。不幸的是,这意味着顶级目录中的make不能在干净的树上工作。我不知道这是为什么,因为这似乎永远不会是你想要的任何项目,这是曾经与埃德。我找不到任何方法来改变这一点,除了这个黑客:

7) 做
M-x定制项目
;在
推理规则下
单击
[INS]
。然后输入目标:
all
;依赖项:
aux-main
;规则:
[INS]
;字符串
@:
。(最后一个只是为了防止带有选项卡的空规则出错;可能是EDE错误。)单击
[Accept]
,然后重新生成Makefiles

现在,在您的顶层目录中,您可以运行make,并且
main
应该是一个工作的可执行文件

我很快就确信EDE还没有准备好被作者以外的人使用。尽管它的规模和努力程度,他们已经