Emacs as an IDE for large C++ projects

后端 未结 5 1187
执念已碎
执念已碎 2021-01-30 18:29

I am a Emacs newbie. I have to trying to search on how to use Emacs for use with large C++ projects particularly to index code and auto-complete function names and behave Eclips

5条回答
  •  一整个雨季
    2021-01-30 18:43

    Indexing

    You might want to use GNU/global instead of ctags: it supports C++ and is in my opinion more efficient with large projects (especially since you can update the index instead of rebuilding it from scratch). And it still is a lot simpler to use that CEDET/Semantic (which is also a fantastic tool if you spend the time to set it up).

    Example use:

    $ 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)
    

    In Emacs, activate gtags-mode in the source code buffers to get access to the gtags commands:

    • gtags-find-tag (M-.) : find the definition of the specified tag in your source files (gtags lets you choose between all possible definitions if there are several, or directly jumps if there is only one possibility)
    • gtags-pop-stack (M-*) : return to the previous location
    • gtags-find-rtag : find all uses of the specified tag in the source files

    Below is my configuration for gtags, which automatically activates gtags-mode if an index is found:

    ;; 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)
    

    Automatic completion

    I don't know of any better tool than auto-complete. Even if it is not included within Emacs, it is very easily installable using the packaging system (for example in the marmalade or melpa repositories).

提交回复
热议问题