繁体   English   中英

合成包含递归的头文件

[英]Including header files recursively for syntastic

我正在使用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 /']

有用。

我的问题:

  1. 如何配置合成,以便它包括递归的一组目录的头文件?
  2. 你如何为多个项目做到这一点? 当我切换我正在处理的项目时,总是编辑.vimrc听起来不对。 我相信一定有更好的方法。

编辑:

我没有在我的.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

您可以在项目根目录中的文件.syntastic_cpp_config包含要搜索的每个项目的头文件的所有目录。 这样做的格式与向编译器提供-I指令的格式相同。

对于您的情况,它意味着:

  • sources下创建一个.syntastic_cpp_config文件(假设代码所在的位置和sources在目录层次结构中与libs处于同一深度级别)。
  • 在其中添加以下行:

    -Ilibs/dir1

    -Ilibs/dir2

    -Ilibs/dir2/dir3

  • 请注意,每行标志为1。

  • 这样您就不必拥有.vimrc所有include目录。

您可以使用不同的文件来保存每个项目的自定义配置,由.vimrc全局变量g:syntastic_cpp_config_file ,例如

let g:syntastic_cpp_config_file = '.my_custom_include_file_for_syntastic'

Syntastic将检查每个源目录及其向上,直到找到此文件,然后使用它来生成其输出。

有关更多详细信息,请参见Syntastic wiki页面旧链接

我有同样的问题,运气不好。 但是,我发现如果我使用引号样式头包含,则syntactic将适当地检查文件夹而不发出警告。 例如,如果您正在使用foo2.cpp,

#include "dir3/foo4.h"
#include "../dir1/foo1.h"

保存括号包括标准库和任何你想要硬编码到vim的库。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM