auto-complete
не работает для проектов Emacs C ++, которые имеют несколько модулей. Заголовочные файлы, от которых зависит каждый подмодуль, существуют как в самом модуле, так и в других модулях. Другими словами, один модуль может включать в себя заголовочные файлы другого модуля.
Ниже приведен мой пример исходного кода:
.
├── CMakeLists.txt
├── my_inc
│ ├── CMakeLists.txt
│ ├── myadd.cpp
│ └── myadd.h
├── README.md
└── src
├── CMakeLists.txt
├── Hello.java
├── helper.cpp
├── helper.h
└── main.cpp
main.cpp
:
#include "myadd.h"#include "helper.h"int main() {
MyAdd add_obj;
Helper h;
h.toString(); // Auto-complete works since Helper is in the same directory.
add_obj. // Auto-complete for add_obj does not work
// because myadd.h is in another directory (my_inc).
}
Список методов всплывает, когда я набираю .
после h
, но не для переменной add_obj
класс которого определяется в myadd.h
из другого модуля my_inc
,
Я пробовал некоторые решения (связанные с CEDET):
(ede-cpp-root-project)
Это решение работает здесь. Я не хочу применять этот, так как
это сделало бы мой .emacs
большой, так как у меня много проектов.
:include-path
здесь невозможно обработать сложную зависимость заголовка от 20+ подмодулей, что делает это решение более похожим на игрушку. Я предпочитаю отделять конфигурацию от .emacs
,
EDE проект
Я создаю проект и цель через ede-new
и c c. т, но это только для компиляции вместо имени, метод автозаполнения.
ede-generic-project
Как описано в решении для этот вопрос и руководство по ede-generic-project
но я получаю эту ошибку:
eieio-oref: Неверный аргумент типа: (или eieio-object-p class-p), ноль
как только я выполню:
М-х ede-customize-project
RET после (ede-enable-generic-projects)
,
Среда: Я использую Emacs 24.3 и установил auto-complete
а также cedet2.0
,
Шаг 1 при работе с проблемами, которые включают проекты, заголовочные файлы и завершение, должен включить (global-semantic-decoration-mode 1)
который включает в себя механизм выделения заголовочных файлов красным цветом, когда невозможно найти. это помогает быстро работать с проблемами конфигурации.
Если вы хотите сохранить свой .emacs
очистите файл и получите поддержку проекта, универсальный тип проекта — хорошая ставка, вплоть до появления этой ошибки. Это исправлено в репозитории CEDET bzr в ветке ede-ldf на момент написания этой статьи (14 июля 2014 г.) и скоро будет объединено.
Если у вас много субмодулей, вы также можете положиться на такой инструмент, как GNU Global. В руководстве по cedet есть небольшой раздел об использовании GNU Global, включающий фрагмент кода, необходимый для поиска файлов. Таким образом, Global будет отслеживать все ваши заголовки, а затем их можно будет использовать для их поиска. Если все ваши заголовки имеют уникальное имя, у вас все будет готово. Если файл «myadd.h» существует в нескольких местах, и вам нужно выбрать «myadd.h» в зависимости от того, где находится файл C, вам не повезет, и для этого вам потребуется собственный тип проекта.
После каждого изменения конфигурации вам нужно будет принудительно выполнить повторный анализ буфера с заголовками, которые вы хотите найти, чтобы кеши были обновлены. использование C-u M-x bovinate RET
заставить его.