YouCompleteMe, заголовочные файлы

#c #vim

#c #vim

Вопрос:

Я работаю с некоторыми заголовочными файлами C , используя YouCompleteMe. Файл заголовка не включает в себя все другие файлы заголовков, которые ему нужны для поиска всех классов, которые он использует. Могу ли я изменить свой, не изменяя заголовочный файл.ycm_extra_conf.py файл, чтобы clang знал о дополнительных файлах заголовков, которые ему нужны?

В качестве примера предположим, что у меня есть три файла «A.h», «B.h» и «C.cc «.

C.cc

 #include "A.h"
#include "B.h"
 

A.h

 class A {};
 

B.h

 class B : A {};
 

Включаемый файл B не может компилироваться самостоятельно, но C.cc будет скомпилирован правильно, потому что он включает вещи в правильном порядке. Однако, если я открою B.h самостоятельно, он будет жаловаться на то, что A не определен.

Я знаю, что C.cc компилируется правильно, так как же мне сообщить YCM при открытии B.h, чтобы он скомпилировал его в том же контексте, который он будет использовать для C.cc ? Флагов, по-видимому, недостаточно, чтобы указать YCM, как скомпилировать файл, поскольку он должен быть скомпилирован с C.cc .

Комментарии:

1. Что означает ваше последнее предложение?

2. Привет, я обновил комментарий, чтобы более четко объяснить проблему. Спасибо!

Ответ №1:

В вашем .ycm_extra_conf.py добавьте свои обычные флаги препроцессора, например:

 flags = [
'-Wall',
'-Wextra',
'-Wno-variadic-macros',
'-fexceptions',
'-DNDEBUG',
'-DUNIT_TESTS',
'-std=c  11',
'-x', 'c  ',
'-isystem', '/home/sehe/custom/boost',
'-isystem', '/usr/lib/gcc/x86_64-linux-gnu/4.8/include',
'-I', 'src',
'-I', 'include',
'-isystem', '/usr/include',
'-isystem', '/usr/local/include',
]