Подтвердить что ты не робот

Emacs как IDE для больших проектов на С++

Я новичок в Emacs. Я должен попытаться найти, как использовать Emacs для использования с большими проектами на С++, в частности, для индексации кода и автоматического заполнения имен функций и поведения Eclipse. Я использовал Vim в течение некоторого времени, когда я использовал ctags для индексации кода в своем проекте, а Vim использовал автозавершение моего кода, используя раскрывающееся меню опций. Я пытаюсь достичь того же самого с Emacs. Но во время моего поиска результаты указывали на CEDET и автозаполнение и другие сторонние плагины.

Я пытался использовать ctags с ctags -e -R . и etags, но без успеха.

Мне не хватает стандартного способа Emacs для достижения такого же поведения? Какой лучший и самый простой способ добиться того, чего я хочу?

4b9b3361

Ответ 1

Я успешно использую CEDET с автозаполнением. В принципе, автозаполнение - это поставщик выпадающих списков, и он берет свои источники из разных вещей, особенно из CEDET (но также из etags и Gnu Global, которые я также рекомендую).

Хорошей отправной точкой для CEDET является http://alexott.net/en/writings/emacs-devenv/EmacsCedet.html

У Alex Ott emacs config есть: https://github.com/alexott/emacs-configs - это полезный ресурс.

Обратите внимание, что вам нужно будет захватить CEDET из bzr и правильно установить/настроить автозаполнение. Я настоятельно рекомендую el-get установить автозаполнение (и некоторые другие вещи тоже). Вам нужно будет настроить общие проекты для EDE, чтобы автозаполнение работало для случайных файлов C/С++, не являющихся частью структурированного проекта EDE.

Вам придется потратить некоторое время на настройку emacs, но оно окупается. Инструмент удивительно продуктивен после правильной настройки.

Ответ 2

Индексация

Возможно, вы захотите использовать GNU/global вместо ctags: он поддерживает С++ и, на мой взгляд, более эффективен с большими проектами (особенно с тех пор вы можете обновить индекс, а не перестраивать его с нуля). И еще намного проще использовать этот 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, его очень легко установить с помощью системы упаковки (например, в marmalade или melpa репозитории).

Ответ 3

Это зависит от того, что вы ищете в среде IDE. Я использую Emacs для довольно большого проекта на С++. Конечно, вам нужно настроить emacs на работу, так как вы хотите, чтобы он работал в большей степени, чем любая другая среда разработки.

Но да 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.