【问题标题】:Syntastic complaining about missing fileSyntastic 抱怨文件丢失
【发布时间】:2018-02-02 21:18:44
【问题描述】:

我正在开发一个使用 Qt 的 c++ 项目。我启用了 syntastic 通过我的 vimrc 检查头文件,它的检查器(gcc、clang_check 和 clang_tidy)在我的项目中都抱怨同样的事情:他们无法找到特定的头文件。

有问题的头文件是“QtCore/qconfig-64.h”。他们是正确的,这个文件不存在。问题是该文件不应加载到项目中,因为它是 32 位项目。 'QtCore/qconfig.h' 有一个预处理器方向,告知项目要包含的内容:

#if __WORDSIZE == 32
#include "QtCore/qconfig-32.h"
#elif __WORDSIZE == 64
#include "QtCore/qconfig-64.h" 
#else
#error "unexpected value for __WORDSIZE macro"
#endif

是否有任何适当的解决方案可以让语法识别预处理器指令选择要包含的头文件?如果没有,还有哪些其他变通方法可以消除这些错误,同时最大限度地减少实用性损失?

【问题讨论】:

  • 阅读 :h syntastic-debug:h syntastic-cpp-gcc,并尝试使 syntastic 运行与编译文件相同的命令行。由于 Vim 和 syntastic 的工作方式,这可能会给后面带来痛苦,但这是唯一有意义的方法。
  • @SatoKatsura :下次有机会我会查看合成调试信息。至于 syntastic 是否运行与我的编译器相同的命令,我指示 syntastic 使用插件附带的 cc_args.py 脚本生成的 .clang_complete 文件。对于大多数实际目的,我觉得它(如果不准确的话)足够接近相同的命令。我对当前信息的最佳推测是 Syntastic 搜索包含语句的代码的方式要么没有考虑 #if 语句,要么没有考虑适用于它们的环境变量。
  • Syntastic 不关心#ifs 或文件的内容。 syntastic 所做的是运行 linters,在本例中为 gccclang-checkclang-tidy(附带说明:clang-tidy 完成了 clang-check 所做的所有事情,因此您不需要同时运行两者)。如果您不向这些 linter 提供所有相关的 -Dfoo=bar,您将得到无用的错误,和/或他们会在不检查任何内容的情况下退出。除非你特别擅长 ESP,否则 :h syntastic-debug 会出现这种情况。
  • 好的,我现在看到了。似乎clang_complete 的 cc_args.py 忽略了几种类型的编译器标志。我注意到它离开了-O2,导致与_FORTIFY_SOURCE 相关的警告。似乎它还没有使用-m32 标志来告知程序的 32 位特性。需要注意的是,将这些标志传递给syntastic_cpp_compiler_options 可以解决gcc 的问题,但是clang_checkclang_tidy 似乎没有他们的mkprg 命令被这个变量改变。但是,该问题可能属于其自己的问题(如果尚未涵盖)或错误报告。
  • 您可以考虑在提交错误报告之前阅读手册(:h syntastic-c-clang_tidy 等)。 耸耸肩

标签: c++ qt vim c-preprocessor syntastic


【解决方案1】:

:h 'syntastic_quiet_messages',试试这个

let g:syntastic_c_gcc_quiet_messages = {
        \ "regex": ['\mQtCore/qconfig-64\.h']
        \}

注意:QtCore/qconfig-64\.h 可以扩展为完整的错误消息,以避免丢失具有相同字符串的其他消息

【讨论】:

  • 对缺少包含文件的编译器保持沉默可能是处理此问题的最糟糕方法。除其他外,gcc 将跳过任何进一步的错误。
  • 这是一个潜在的问题。可以扩展正则表达式来避免这种情况。
  • 对于gcc,缺少标头是一个致命错误,此后它将停止运行。 g:syntastic_c_gcc_quiet_messages 照它说的做,它使一些消息安静下来。它不会说服gcc 在检测到丢失的标头后重新开始解析。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-26
  • 2023-02-14
相关资源
最近更新 更多