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

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

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

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

21

Решение

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

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

Конфигурация emacs Алекса Отта есть: https://github.com/alexott/emacs-configs — это полезный ресурс.

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

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

16

Другие решения

индексирование

Вы можете использовать GNU / глобальной вместо 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, его очень легко установить с помощью системы упаковки (например, в джем или же melpa Хранилища).

11

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

Но да, CEDET — это начало, хотя и не идеальное.

Однако есть очень хороший режим автозаполнения для Emacs. http://cx4a.org/software/auto-complete/ это не intelisense, но он должен каким-то образом интегрироваться с CEDET, чтобы дать вам хорошее автозаполнение.

Еще одна важная функция, которую я часто использую, — это функция ff-find-other-file легко перейти из заголовка и файлов реализации.

Тогда, конечно, вам нужно свернуть свой собственный Bulid. CEDET имеет некоторую поддержку проектов, но я не проверял это. Однако Emacs хорошо интегрируется с инструментами сборки командной строки, такими как make. Ошибки печатаются в буфере, и вы можете легко перейти на нужную строку в Emacs.

GDB также хорошо интегрируется с Emacs M-x gdbтогда просто запомни gdb-many-windows команда.

6

Я рекомендую посмотреть молниеносную беседу Атилы Невеса на CppCon 2015 под названием Emacs как C ++ IDE.

Для подробностей смотрите мой ответ на этот связанный вопрос.

2

Увидеть 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 для навигации по коду

1
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector