我在一个文件夹上运行clang-tidy
,它显示
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
Found compiler error(s).
但它没有显示关于错误细节的附加消息。顺便说一句,日志文件也没有产生。检查错误的方法是什么?
我在一个文件夹上运行clang-tidy
,它显示
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
Found compiler error(s).
但它没有显示关于错误细节的附加消息。顺便说一句,日志文件也没有产生。检查错误的方法是什么?
1条答案
按热度按时间tpgth1q71#
留言内容:“使用-header-filter=...”
信息:
意味着有些调查结果未显示,因为它们位于非主要源文件的文件中,并且与头过滤器设置不匹配。
该消息在ClangTidyMain.cpp:290生成:
ErrorsIgnoredNonUserCode
计数器在ClangTidyDiagnosticConsumer.cpp:309时递增:LastErrorRelatesToUserCode
标志最初是false
,但可以在ClangTidyDiagnosticConsumer.cpp:547中设置为true
:因此,如果
clang-tidy
想要报告某些内容,但由于其位置而选择不报告,则会打印“Use -header-filter=...”消息。选项:
-header-filter
如果您想查看被隐藏的调查结果,请按照消息中的说明进行操作并添加:
clang-tidy
命令行。不过,我建议在
.*
部分周围加上引号,以确保shell不会扩展它:(It通常在没有引号的情况下工作,因为当前目录中通常没有任何文件与它匹配为glob表达式。)
documentation表示:
请注意,消息中提到了
-header-filter
(一个前导连字符),文档中提到了--header-filter
(两个前导连字符)。这两种选择具有相同的效果。另外,请注意,
clang-tidy
默认启用的许多检查不需要-header-filter
标志来报告头文件中定义的函数中的问题,因为它们也报告主源文件中的调用位置。(如果主源文件中没有调用站点,它们根本不会报告,即使使用-header-filter=.*
也是如此。)选项:
-system-headers
即使使用
-header-filter='.*'
,如果在“system”标头中有查找结果,例如通过-isystem
搜索路径选项找到的结果,也会产生“Use -header-filter=...”消息。在这种情况下,你必须 * 也 * 传递-system-headers
或--system-headers
:头过滤示例
我将使用这些文件演示这些选项:
使用
google-explicit-constructor
检查运行clang-tidy
(版本16.0.0),但仅使用默认头过滤器:添加
-header-filter=.*
:添加
-system-headers
:异常:在最后的结果中,
clang-tidy
没有在插入符号(^
)下面打印单词explicit
。我不知道为什么留言内容:“发现编译器错误。”
独立于上述,
clang-tidy
将打印:如果解析器在到达运行
clang-tidy
检查的阶段之前遇到代码中的错误。clang
本身也会报告这些错误。如果您看到此消息,则
clang-tidy
无法完全理解代码,因此修复这些消息应该是第一要务。基本上,首先让clang
干净地编译代码,然后考虑使用clang-tidy
。