2010-10-20 4 views
8

Я установил emacs 23.1.50.1 с CEDET 1.0 и ECB 2.40 (в большой степени вдохновлен настройкой Alex Otts на http://github.com/alexott/emacs-configs/blob/master/rc/emacs-rc-cedet.el и его нежным знакомством с Cedet (http://alexott.net/en/writings/emacs-devenv/EmacsCedet.html), спасибо Alex). Он работает достаточно хорошо, но мне нужно больше понять, как обрабатывать код и ссылки на символы при работе с несколькими проектами.Emacs/CEDET. Несколько проектов и завершение кода

Я создал простую Эду проект, как это:

(ede-cpp-root-project "test" 
         :file "~/src/sw/anchor" 
         :include-path '("/Common") 
         :system-include-path '("~/include")) 

Когда этот проект загружен, будет семантическим только искать для доработок в различных каталогах, указанных в конфигурации проекта?

Я следовал за http://mmmyddd.freeshell.net/blog/Computer/Emacs/usecscopesemanticdbbackend, чтобы использовать cscope в качестве backend для semanticdb. Я могу запустить semanticdb-enable-cscope-in-buffer без emacs, бросающих какие-либо ошибки, но я понятия не имею, использует ли семантика мою базу данных. Можно ли добавить ссылку на cscope.out в моем определении проекта, чтобы иметь больше контроля над тем, какие файлы искать ссылки в моем текущем контексте?

Пар странностей:

При попытке открыть новый файл, я получаю ошибку «не применяется: Поиск программы: нет такого файла или каталога, глобального» и ничего не происходит. Если я попытаюсь открыть его снова, все будет хорошо.

При попытке загрузить проект, указывая на файл якорь, я получаю эту ошибку: «если: Неправильный аргумент типа: класс-р, Эда-каст-корень»

+0

Для «apply: Поиск программы: нет такой файл или каталог, глобальная» ошибка, вы скопировали часть установки Alex Ott, которая использовала «(semanticdb-enable-gnu-global-databases ...)»? – Dingo

+0

Что я сделал, но я подозреваю, что мне это не нужно. Тот факт, что он говорит «глобальная поддержка gnu», должен был сделать моего подозреваемого проблемой там :). Благодарю. – anr78

ответ

5

Когда вы получаете ошибки в вашем конфигурации, лучше всего:

M-x toggle-debug-on-error RET 

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

CEDET попытается связать каждый файл с одним проектом, и все команды, которые работают в этом буфере, будут ограничены границами этого проекта. Для поддержки CScope он также будет использовать EDE для идентификации корневого каталога, и это поможет найти файл cscope.out, и это связано как с инструментами для завершения, так и с ссылками.

Исключением, конечно же, является система, включающая путь, который обычно/usr/include или что-то еще. Это дополнение к системе по умолчанию включает путь, который рассчитывается с поддержкой GCC. В одном из ваших файлов C вы можете:

M-x semantic-c-describe-environment RET 

, и это должно показать, что попытается использовать Semantic.

Для двойной проверки, если Cscope используется для завершения кода, вы можете проверить с:

M-x semanticdb-find-test-translate-path RET 

и проверить конец списка для некоторых Cscope вещи.

+0

Спасибо Эрик, как за ответ, так и за программное обеспечение. Эти команды действительно очень полезны.В настоящее время semantic-c-describe-environment ничего не говорит о cscope, а semanticdb-find-test-translate-path говорит: * # anr78

+0

Справа, cscope поддержка не беспокоит вычисление количества тегов, о которых знает CScope, и это не является частью «проекта», поскольку внутренние элементы абстрагируются, поэтому среда C не знает об этом. – Eric