Вопрос

Я работаю над большим проектом C ++. Я работаю с Emacs за последние шесть месяцев. Я попытаюсь настроить Cedet, чтобы можно было легко ориентироваться, но я нашел некоторые проблемы.

1.- Иногда семантика не находит некоторых символов, а иногда он не ... Я не знаю четко, какие файлы являются семантической индексацией. Я пытался использовать EDE (следуя инструкциям в этой статье http://alexott.net/en/writings/emacs-devenv/emacscedet.html.), но я нашел некоторые проблемы и ...

  • У меня есть несколько версий (релизов) того же проекта, каждый в своей папке. Как я могу сказать Emacs, с которым я работаю?
  • Как я могу сказать EDE, где искать мои файлы заголовка? Могу ли я указать только корневой каталог и семантический поиск файлов заголовка во всех подкаталах?

2.- Я работал с Vim + Cscope некоторое время назад, и я помню, как был способ перейти в стопку символов (Ctrl-T). Есть ли что-то вроде этого в Emacs?

PD> Некоторые данные, чтобы сделать вопрос более понятным.

У меня несколько выпусков одного и того же проекта. У каждого есть свой собственный корневой каталог. Каждый проект имеет несколько модулей каждый из них внутри подкаталога. В каждом модуле есть заголовки файла.

/home/user/
          |
           \Release-001
          |           |
          |            \makefile
          |            \ Module-001
          |           |           |
          |           |            \makefile
          |           |            \subdir-001
          |           |           |          \header-001.h
          |           |           |          \header-002.h
          |           |            \subdir-002
          |           |           |          \header-003.h
          |            \ Module-002
          |           |           |
          |           |            \makefile
          |           |            \subdir-003
          |           |           |          \header-004.h
          |           |           |          \header-005.h
          |           |            \subdir-004
          |           |           |          \header-006.h
          |
           \Release-002
          |           |
          |            \makefile
          |            \ Module-001
          |           |           |
          |           |            \makefile
          |           |            \subdir-001
          |           |           |          \header-001.h
          |           |           |          \header-002.h
          |           |            \subdir-002
          |           |           |          \header-003.h
          |            \ Module-002
          |           |           |
          |           |            \makefile
          |           |            \subdir-003
          |           |           |          \header-004.h
          |           |           |          \header-005.h
          |           |            \subdir-004
          |           |           |          \header-006.h

Это конфигурация о EDE у меня в моих .emacs

;; Cedet load commands
(add-to-list 'load-path "~/emacs-dir/cedet/cedet")
(load-file "~/emacs-dir/cedet/cedet/common/cedet.el") 

;; EDE: activating mode.
(global-ede-mode t)

;; Projects definition
(ede-cpp-root-project "Release-001"
                     :name "Release-001"
                     :file "~/Release-001/makefile"
                     :include-path '("/"
                                     )
                     :system-include-path '("~/exp/include")
                     :spp-table '(("SUSE9" . "")
                                )
)
(ede-cpp-root-project "Release-002"
                     :name "Release-002"
                     :file "~/Release-002/makefile"
                     :include-path '("/"
                                     )
                     :system-include-path '("~/exp/include")
                     :spp-table '(("SUSE9" . "")
                                )
)

Просто чтобы вы знаете ... Я работаю с консольной версией (-NW) Emacs.

Это было полезно?

Решение

Ваша конфигурация в основном правильная, за исключением: включить путь для ваших проектов.

Если данный исходный файл говорит:

   #include "Module-001/subdir-002/header-003.h"

Тогда все в порядке. Если включают, говорит:

   #include "subdir-002/header-003.h"

Тогда ваш: включить-путь должен иметь

   :include-path '("/Module-001" )

в этом.

Что касается того, какие вещи делают семантический индекс, он будет индексировать ваш текущий файл, и все включает в себя можно найти. Используйте режим семантического декорации, чтобы увидеть, какие заголовки EDE нашла для вас, чтобы определить, является ли ваша конфигурация точной.

Он также будет индексировать все файлы в том же каталоге, что и тот, который вы редактируете, но только в простоях времени, поэтому, если вы не позволяете Emacs Be Fly, он не дойдет до него.

Вы можете ускорить индексацию операций вверх, если вы используете CSCOPE как Bozhidar. Затем вы можете включить поддержку CSCOPE в EDE, так и в семантической базе данных. Однако включение поддержки CSCOPE в семантической БД недавно, поэтому вам понадобится версия CEDET CVS. Это убедилось бы, что все было проиндексировано.

Чтобы навигаться назад, исследуйте помощь для семантического MRU-Bookmark-Mode. Это отслеживает ваш прогресс через ваши файлы на именованном расположении, которая довольно удобна и всегда работает.

Другие советы

Я использовал в прошлом Код Emacs Code Browser При работе на проектах C ++ и я нашел его очень удовлетворительным - в дополнение к отличным файлам и структуре кодовой структуры вы получаете отличную интеграцию VCS (разные значки в соответствии с текущим состоянием файла в проекте). В сочетании с ECB я использовал Cscope для Emacs, поскольку вы упомянули в VIM, вы, вероятно, захотите его также использовать в Emacs.

В качестве альтернативы, если вы хотите более простое решение, у вас может посмотреть на Emacs Nav. Отказ Он также поддерживает некоторые модульные вещи и не имеет зависимости от семантического и Speedbar - вам нужно только использовать Etags / CTAG, чтобы индексировать ваш проект.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top