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

lor*_*das 21 c++ ide emacs

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

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

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

Ale*_* C. 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设置通用项目,以使自动完成功能适用于随机C/C++文件,而不是结构化EDE项目的一部分.

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


ffe*_*tte 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)
Run Code Online (Sandbox Code Playgroud)

在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)
Run Code Online (Sandbox Code Playgroud)

自动完成

我不知道有什么更好的工具auto-complete.即使它不包含在Emacs中,也可以使用包装系统(例如在果酱melpa存储库中)轻松安装.


Axe*_*ega 6

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

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

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

我经常使用的另一个重要功能是ff-find-other-file从标题和实现文件轻松跳转的功能.

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

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