Автозаполнение Emacs-24 для заголовочных файлов между каталогами

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)

    Это решение работает здесь. Я не хочу применять этот, так как

    1. это сделало бы мой .emacs большой, так как у меня много проектов.

    2. :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

Решение

Шаг 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 заставить его.

0

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


По вопросам рекламы [email protected]