I'm working with a C++ project and trying to configure it to use syntastic. In my project I have a nested directory structure of header files (The actual nested structure is much worse, this is an example).
--libs
|---dir1
|---foo1.h
|---dir2
|---foo2.h
|---foo3.h
|---dir3
|---foo4.h
I have included the lib files in my .vimrc file using:
let g:syntastic_cpp_include_dirs = [ 'libs/']
I assumed this would take all the header files recursively, but it doesn't. In the code, syntastic complains with the error 'no such file or directory found'.
When I explicitly change the variable to refer to a specific directory:
let g:syntastic_cpp_include_dirs = [ 'libs/dir2/dir3/']
it works.
My questions:
EDIT:
I didn't mention that in my .vimrc, the following options are present for 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
You can include all the directories to be searched for header files per project in the project root directory in a file .syntastic_cpp_config
. The format for doing so would the same as providing the -I
directives to the compiler.
For your case it means:
.syntastic_cpp_config
under sources
(assuming that's where your code is and sources
is at a same depth level in the directory hierarchy as libs
). Put the following lines in it:
-Ilibs/dir1
-Ilibs/dir2
-Ilibs/dir2/dir3
Note the the flags are 1 per line.
.vimrc
. You can have a different file to hold this custom configuration per project, specified by the .vimrc
global variable g:syntastic_cpp_config_file
, eg
let g:syntastic_cpp_config_file = '.my_custom_include_file_for_syntastic'
Syntastic will check each source directory and upwards until it finds this file and then use it for producing its output.
See the Syntastic wiki page , Old link for more details.
I've had the same question with little luck. However, I've found that if I use the quotation mark style header includes, syntactic will appropriately check the folders and not issue warnings. For example, if you're working on foo2.cpp,
#include "dir3/foo4.h"
#include "../dir1/foo1.h"
Save bracket includes for standard libs and any libs you feel like hardcoding into vim.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.