#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',
]