Включая заголовочные файлы рекурсивно для синтетического

Я работаю с проектом C ++ и пытаюсь настроить его на использование синтетики. В моем проекте у меня есть вложенная структура каталогов заголовочных файлов (фактическая вложенная структура намного хуже, это пример).

--libs
|---dir1
|---foo1.h
|---dir2
|---foo2.h
|---foo3.h
|---dir3
|---foo4.h

Я включил файлы lib в мой файл .vimrc, используя:

let g: syntastic_cpp_include_dirs = [‘libs /’]

Я предполагал, что это займет все файлы заголовков рекурсивно, но это не так. В коде синтаксис жалуется с ошибкой «такой файл или каталог не найден».

Когда я явно изменяю переменную для ссылки на конкретный каталог:

let g: syntastic_cpp_include_dirs = [‘libs / dir2 / dir3 /’]

оно работает.

Мои вопросы:

  1. Как настроить синтаксис так, чтобы он рекурсивно включал заголовочные файлы набора каталогов?
  2. Как вы делаете это для нескольких проектов? Всегда редактировать .vimrc при переключении проекта, над которым я работаю, звучит неправильно. Я считаю, что должен быть лучший путь.

РЕДАКТИРОВАТЬ:

Я не упомянул, что в моем .vimrc присутствуют следующие опции для syntastic:

let g:syntastic_check_on_open=1
let g:syntastic_enable_signs=1
let g:syntastic_cpp_include_dirs = ['libs/dir2/dir3', 'libs/dir2 ]
let g:syntastic_cpp_check_header = 1
let g:syntastic_cpp_remove_include_errors = 1

17

Решение

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

Для вашего случая это означает:

  • Создать файл .syntastic_cpp_config под sources (при условии, что это где ваш код и sources находится на том же уровне глубины в иерархии каталогов, что и libs).
  • Поместите в него следующие строки:

    -Ilibs/dir1

    -Ilibs/dir2

    -Ilibs/dir2/dir3

  • Обратите внимание, что флаги по 1 на строку.

  • Таким образом, вам не нужно иметь все каталоги включения в вашем .vimrc,

Вы можете иметь другой файл для хранения этой пользовательской конфигурации для проекта, указанного .vimrc глобальная переменная g:syntastic_cpp_config_fileнапример,

let g:syntastic_cpp_config_file = '.my_custom_include_file_for_syntastic'

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

Увидеть Синтаксическая вики-страница,
Старая ссылка Больше подробностей.

30

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

У меня был тот же вопрос с небольшим количеством удачи. Тем не менее, я обнаружил, что если я использую заголовок стиля кавычек, синтаксический будет соответствующим образом проверять папки, а не выдавать предупреждения. Например, если вы работаете над foo2.cpp,

#include "dir3/foo4.h"#include "../dir1/foo1.h"

Скобка для сохранения включает в себя стандартные библиотеки и любые библиотеки, которые вы хотели бы жестко запрограммировать в vim.

0

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