Включение заголовочных файлов рекурсивно для синтаксических
Я работаю с проектом С++ и пытаюсь настроить его на использование синтаксиса. В моем проекте у меня есть вложенная структура каталогов файлов заголовков (фактическая вложенная структура намного хуже, это пример).
--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/']
он работает.
Мои вопросы:
- Как вы настраиваете синтаксис, чтобы он включал заголовочные файлы из набора каталогов рекурсивно?
- Как вы это делаете для нескольких проектов? Всегда редактирование .vimrc при переключении проекта, над которым я работаю, звучит не так. Я считаю, что должен быть лучший способ.
EDIT:
Я не упоминал, что в моем .vimrc для синтаксиса присутствуют следующие параметры:
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
Ответы
Ответ 1
Вы можете включить все каталоги для поиска файлов заголовков для каждого проекта в корневом каталоге проекта в файле .syntastic_cpp_config
. Формат для этого был бы таким же, как предоставление директив -I
компилятору.
В вашем случае это означает:
У вас может быть другой файл для хранения этой настраиваемой конфигурации для каждого проекта, указанный глобальной переменной .vimrc
g:syntastic_cpp_config_file
, например
let g:syntastic_cpp_config_file = '.my_custom_include_file_for_syntastic'
Syntastic проверит каждый исходный каталог и вверх до тех пор, пока не найдет этот файл, а затем не использует его для создания своего вывода.
См. Синтаксическая страница викинга,
Старая ссылка для получения более подробной информации.
Ответ 2
У меня был тот же вопрос с небольшой удачей. Тем не менее, я обнаружил, что если я использую заголовок заголовка кавычек, то синтаксис будет правильно проверять папки и не выдавать предупреждений. Например, если вы работаете с foo2.cpp,
#include "dir3/foo4.h"
#include "../dir1/foo1.h"
Сохранить скобку включает в себя стандартные libs и любые libs, которые вы чувствуете как hardcoding в vim.