2013-05-18 4 views
16

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

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

Я включил в Lib файлы в моем файле .vimrc при помощи:

Пусть G: syntastic_cpp_include_dirs = [ '/' LIBS]

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

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

Пусть G: syntastic_cpp_include_dirs = [ 'ЛИЭС/dir2/dir3 /']

это работает.

Мои вопросы:

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

EDIT:

я не упомянул, что в моем .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 
+0

Вы пробовали 'let g: syntastic_cpp_check_header = 1'? – timss

+0

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

ответ

28

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

В вашем случае это означает:

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

    -Ilibs/dir1

    -Ilibs/dir2

    -Ilibs/dir2/dir3

  • Обратите внимание на флаги 1 в каждой строке.

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

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

let g:syntastic_cpp_config_file = '.my_custom_include_file_for_syntastic' 

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

Для получения более подробной информации см. Syntastic wiki page, Old link.

0

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

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

Сохранить кронштейн включает в стандартные библиотеки и любые LIBS вы чувствуете, как жестко прописывать в Vim.

Смежные вопросы