c++ - 递归地包含头文件以进行合成

标签 c++ vim syntastic

我正在处理一个 C++ 项目并尝试将其配置为使用语法。在我的项目中,我有一个头文件的嵌套目录结构(实际的嵌套结构要糟糕得多,这是一个例子)。

--libs    
    |---dir1
         |---foo1.h    
    |---dir2
         |---foo2.h
         |---foo3.h
         |---dir3
               |---foo4.h

我已将 lib 文件包含在我的 .vimrc 文件中:

let g:syntastic_cpp_include_dirs = [ 'libs/']

我认为这会递归地获取所有头文件,但事实并非如此。在代码中,syntastic 提示错误“找不到这样的文件或目录”。

当我显式更改变量以引用特定目录时:

let g:syntastic_cpp_include_dirs = [ 'libs/dir2/dir3/']

有效。

我的问题:

  1. 如何配置 syntastic 以便递归地包含一组目录的头文件?
  2. 您如何为多个项目执行此操作?在切换我正在处理的项目时总是编辑 .vimrc 听起来不对。我相信一定有更好的方法。

编辑:

我没有在我的 .vimrc 中提到,以下选项用于合成:

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 中包含所有包含目录。

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

let g:syntastic_cpp_config_file = '.my_custom_include_file_for_syntastic'

Syntastic 将检查每个源目录并向上检查,直到找到该文件,然后将其用于生成其输出。

Syntastic wiki page , Old link更多细节。

关于c++ - 递归地包含头文件以进行合成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16622992/

相关文章:

c++ - 可移植网格引擎平台

c++ - QObject::connect 函数中的 QObject* 上下文

c - 常用的 gvim 快捷键有哪些?

linux - 如何从其他 grep 命令的输出行中获取子字符串

c++ - 我很困惑为什么在 C++ 中返回构造函数是合法的

regex - 如何在vim中过滤一些多行语句

python - Vim 和 Syntastic : Is it possible to switch Python version per project?

vim - 使用 syntastic 的 vim 下的 quickfix 窗口

vim - Syntastic 和 jshint 在 vi​​m 中不显示错误

c++ - 这些 C++ 运算符重载有什么问题?