我正在使用C ++项目并尝试将其配置为使用合成。在我的项目中,我有一个嵌套的头文件目录结构(实际的嵌套结构更糟糕,这是一个例子)。
--libs
|---dir1
|---foo1.h
|---dir2
|---foo2.h
|---foo3.h
|---dir3
|---foo4.h
我已将lib文件包含在我的.vimrc文件中:
让g:syntastic_cpp_include_dirs = ['libs /']
我认为这会以递归方式获取所有头文件,但事实并非如此。在代码中,syntastic抱怨错误'找不到这样的文件或目录'。
当我显式更改变量以引用特定目录时:
让g:syntastic_cpp_include_dirs = ['libs / dir2 / dir3 /']
可行。
我的问题:
编辑:
我没有在我的.vimrc中提到过,以下选项适用于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
答案 0 :(得分:32)
您可以在项目根目录中的文件.syntastic_cpp_config
中包含要搜索的每个项目的头文件的所有目录。这样做的格式与向编译器提供-I
指令的格式相同。
对于您的情况,它意味着:
.syntastic_cpp_config
下创建一个文件sources
(假设您的代码在哪里且sources
在目录层次结构中与libs
处于同一深度级别)。将以下几行放入其中:
-Ilibs/dir1
-Ilibs/dir2
-Ilibs/dir2/dir3
请注意,每行标记为1。
.vimrc
。您可以拥有一个不同的文件来保存每个项目的自定义配置,由.vimrc
全局变量g:syntastic_cpp_config_file
指定,例如
let g:syntastic_cpp_config_file = '.my_custom_include_file_for_syntastic'
Syntastic将检查每个源目录及其向上,直到找到此文件,然后使用它来生成其输出。
参见Syntastic wiki page, Old link了解更多详情。
答案 1 :(得分:0)
我有同样的问题但没有运气。但是,我发现如果我使用引号样式头包含,则syntactic将适当地检查文件夹而不发出警告。例如,如果您正在使用foo2.cpp,
#include "dir3/foo4.h"
#include "../dir1/foo1.h"
保存括号包括标准库和任何你想要硬编码到vim的库。