我为VIM安装了YCM和syntastic,通常它们工作正常,但是当我检测到代码中的一些错误时我遇到了问题,它表明找不到一些头文件(这是我的项目头文件).
我的目录树显示如下:
TOP ??? debug ? ??? debug.c ? ??? debug.h ? ??? debug.mk ? ??? instrument.c ??? driver ? ??? driver.c ? ??? driver_ddi.c ? ??? driver_ddi.h ? ??? driver.h ? ??? driver.mk ??? include ? ??? common.h ??? libs ??? Makefile ??? mw ? ??? manager.c ? ??? mw.mk ??? root ??? main.c ??? root.mk
我复制了一个.ycm_extra_conf.py
到TOP,同时,我也会在TOP 生成tag
并cscope
归档,因此每次我在TOP上打开文件,如:
howchen@host:~/Work/c/sample/src -> gvim ./driver/driver.c
确保每次我都可以在VIM中添加tag
和cscope
归档.问题是,如果我打开driver.c
,其中包含头文件:driver.h
,driver_ddi.h
,debug.h
,common.h
,代码如下图所示:
#include#include #include "math.h" #include "common.h" #include "debug.h" #include "driver_ddi.h" #include "driver.h"
的syntastic
或YCM
总是显示无法找到common.h
和debug.h
其他头文件是否正确.
我的YCM和在vimrc文件中的syntastic配置部分:
" YCM " let g:ycm_extra_conf_globlist = ['~/.vim/bundle/YouCompleteMe/cpp/ycm/*','!~/*'] let g:ycm_global_ycm_extra_conf = '~/.vim/bundle/YouCompleteMe/cpp/ycm/.ycm_extra_conf.py' " Syntastic let g:syntastic_c_checkers=['make'] let g:syntastic_always_populate_loc_list = 1 let g:syntastic_check_on_open=1 let g:syntastic_enable_signs=1 let g:syntastic_error_symbol = '?' let g:syntastic_warning_symbol = '?' set statusline+=%#warningmsg# set statusline+=%{SyntasticStatuslineFlag()} set statusline+=%*gbar
我的.ycm_extra_conf.py
写flags
变量为:
flags = [ '-Wall', '-Wextra', '-Werror', '-Wc++98-compat', '-Wno-long-long', '-Wno-variadic-macros', '-fexceptions', '-DNDEBUG', '-std=c99', # ...and the same thing goes for the magic -x option which specifies the # language that the files to be compiled are written in. This is mostly # relevant for c++ headers. # For a C project, you would set this to 'c' instead of 'c++'. '-x', #I don't know if I need remove -x 'c', '-isystem', '../llvm/include', '-isystem', '../llvm/tools/clang/include', '-I', '.', '-I', '../driver' '-I', '../debug' '-I', '../include' '-I', '../include' ]
我设置的任何错误标志?
从这个问题移到这里.
我发现了问题:
flags = [ '-Wall', '-Wextra', '-Werror', '-Wc++98-compat', '-Wno-long-long', '-Wno-variadic-macros', '-fexceptions', '-DNDEBUG', '-std=c99', # ...and the same thing goes for the magic -x option which specifies the # language that the files to be compiled are written in. This is mostly # relevant for c++ headers. # For a C project, you would set this to 'c' instead of 'c++'. '-x', #I don't know if I need remove -x 'c', '-isystem', '../llvm/include', '-isystem', '../llvm/tools/clang/include', '-I./driver', '-I./debug', '-I./include', ]
我错过了一个逗号和路径应该是./xxx
,也是neeeeed '-I/usr/include'
,和'-I/usr/local/include'
.