YCMとsyntasticfor VIMをインストールしましたが、通常は正常に動作しますが、コードでエラーが検出されると問題が発生し、一部のヘッドファイル(プロジェクトのヘッドファイル)が見つからないことが示されます。
私のディレクトリツリーは以下のとおりです。
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 <stdio.h>
#include <stdlib.h>
#include "math.h"
#include "common.h"
#include "debug.h"
#include "driver_ddi.h"
#include "driver.h"
syntastic
またはYCM
は、常にcommon.h
およびdebug.h
が見つからないことを示しますが、他のヘッドファイルは問題ありません。
vimrcファイルの私のYCMと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
My .ycm_extra_conf.py
write flags
variable as:
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
、また必要な'-I/usr/include'
、および'-I/usr/local/include'
。