Emacs作为大型C ++项目的IDE

时间:2013-03-07 21:36:45

标签: c++ emacs ide

我是Emacs的新手。我必须尝试搜索如何使用Emacs与大型C ++项目一起使用,特别是索引代码和自动完成函数名称以及类似于Eclipse的行为。我一直在使用Vim一段时间,我使用ctags索引我的项目中的代码,Vim用来尝试使用选项的下拉菜单自动完成我的代码。我现在正试图用Emacs实现同样的目标。但是,在我的搜索过程中,结果指向CEDET和自动完成以及其他第三方插件。

我尝试使用带有ctags -e -R .和etags的ctags,但没有成功。

我是否缺少Emacs的默认方式来实现相同的行为?这是实现我想要的最好和最简单的方法吗?

5 个答案:

答案 0 :(得分:16)

我成功使用CEDET自动完成功能。基本上,自动完成是下拉框提供程序,它从各种事物中获取其来源,最有趣的是来自CEDET(还有来自etags和Gnu Global,我也推荐)。

CEDET的一个很好的起点是http://alexott.net/en/writings/emacs-devenv/EmacsCedet.html

Alex Ott的emacs配置就在那里:https://github.com/alexott/emacs-configs - 这是一个有用的资源。

请注意,您需要从bzr获取CEDET,并正确安装/配置自动完成。我强烈建议el-get安装自动完成(以及其他一些东西)。您需要为EDE设置通用项目,以使自动完成功能适用于不属于结构化EDE项目的随机C / C ++文件。

您将不得不花一些时间来配置emacs,但它会带来回报。一旦设置正确,该工具的效率非常高。

答案 1 :(得分:11)

<强>索引

您可能希望使用GNU/global而不是ctags:它支持C ++,并且在我看来对大型项目更有效(特别是因为您可以更新索引而不是从头开始重建)。使用CEDET / Semantic仍然要简单得多(如果你花时间设置它也是一个很棒的工具)。

使用示例:

$ cd sources
$ gtags -v         # create the index
$ cd subdirectory
$ [hack hack hack]
$ global -u        # update the index (can be called from anywhere in the project)

在Emacs中,激活源代码缓冲区中的gtags-mode以访问gtags命令:

  • gtags-find-tag M - 。):在源文件中找到指定标记的定义(gtags允许您在所有可能的定义中进行选择,如果有多个,如果只有一种可能性,则直接跳转)
  • gtags-pop-stack M - * ):返回上一个位置
  • gtags-find-rtag:查找源文件中指定标记的所有用法

以下是gtags的配置,如果找到索引,会自动激活gtags-mode

;; gtags-mode
(eval-after-load "gtags"
  '(progn
     (define-key gtags-mode-map (kbd "M-,") 'gtags-find-rtag)))
(defun ff/turn-on-gtags ()
  "Turn `gtags-mode' on if a global tags file has been generated.

This function asynchronously runs 'global -u' to update global
tags. When the command successfully returns, `gtags-mode' is
turned on."
  (interactive)
  (let ((process (start-process "global -u"
                                "*global output*"
                                "global" "-u"))
        (buffer  (current-buffer)))
    (set-process-sentinel
     process
     `(lambda (process event)
        (when (and (eq (process-status process) 'exit)
                   (eq (process-exit-status process) 0))
          (with-current-buffer ,buffer
            (message "Activating gtags-mode")
            (gtags-mode 1)))))))

(add-hook 'c-mode-common-hook 'ff/turn-on-gtags)

自动完成

我不知道比auto-complete更好的工具。即使它不包含在Emacs中,也可以使用打包系统轻松安装(例如在marmalademelpa存储库中)。

答案 2 :(得分:6)

这取决于您在IDE中寻找的内容。我一直在使用Emacs进行相当大的C ++项目。当然,您需要将emacs配置为工作,因为您希望它在更大程度上与其他任何IDE一起工作。

但是,CEDET是一个开始,即使它并不完美。

然而,Emacs http://cx4a.org/software/auto-complete/有一个非常好的自动完成模式,它不是智能的,但它应该以某种方式与CEDET集成,为您提供一个非常好的自动完成。

我经常使用的另一个重要功能是函数ff-find-other-file,可以轻松跳转标题和实现文件。

然后当然你需要推出自己的bulid。 CEDET对项目有一些支持,但我还没有测试过。但是,Emacs可以很好地与make等命令行构建工具集成。错误打印在缓冲区中,您可以在Emacs中轻松跳转到正确的行。

GDB也与Emacs M-x gdb很好地集成,然后只记得gdb-many-windows命令。

答案 3 :(得分:2)

我建议在2015年CppCon上观看Atila Neves的闪电演讲,题为Emacs as a C++ IDE

有关详细信息,请参阅我对this related question的回答。

答案 4 :(得分:1)

请参阅https://emacs.stackexchange.com/questions/26518/sequence-of-packages-to-be-installed-to-make-emacs-an-ide-for-c-c

我使用GNU Global和两个流行的Emacs插件:

  • 公司代码完成

  • 用于代码导航的emacs-helm-gtags

相关问题