【问题标题】:Including header files recursively for syntastic递归地包含头文件以进行合成
【发布时间】:2013-05-18 10:02:43
【问题描述】:

我正在处理一个 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. 如何配置 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

【问题讨论】:

  • 你试过let g:syntastic_cpp_check_header = 1吗?
  • 是的,我愿意。我已经将我现在必须的配置选项添加到问题中。对此感到抱歉。

标签: c++ vim syntastic


【解决方案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 pageOld link 了解更多详情。

【讨论】:

  • 2018 May 24 update 开始,这已经过时了。 .syntastic_cpp_config 不再是“魔法”,您必须使用 let g:syntastic_cpp_config_file = ... 显式设置
  • 也许我是迂腐的,这可能是一个错误的地方提到/问这个,但是:为了这个目的在项目文件夹中有一个文件是否被认为是干净的?虽然它可以添加到 .gitignore 用于您正在处理的项目,但我不希望其他开发人员也使用 Syntastic。
  • 但如果其他人也在使用 Syntastic,那对他们也有帮助。如果他们不这样做,也没有坏处;毕竟是一个点文件。
【解决方案2】:

我也有同样的问题,但运气不佳。但是,我发现如果我使用引号样式标题包含,语法将适当地检查文件夹并且不会发出警告。例如,如果您正在处理 foo2.cpp,

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

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

【讨论】:

    猜你喜欢
    • 2022-10-07
    • 2011-04-15
    • 2021-11-22
    • 1970-01-01
    • 2019-09-23
    • 2013-07-27
    • 2022-01-19
    • 2013-07-29
    • 1970-01-01
    相关资源
    最近更新 更多