我想在我的代码库中使用 clang-tidy 的
misc-include-cleaner
检查,但不幸的是,整个 WinAPI 中使用的 <windows.h>
标头与 IWYU 哲学相冲突。
从技术上讲,我只能显式包含必要的 WinAPI 标头,但包含的顺序很重要,并且管理它似乎很乏味。
有一个优雅的解决方案吗?仅仅因为这个就对整个项目禁用此检查感觉是错误的。我知道
IgnoreHeaders
选项,但我不知道它是否可以解决问题或如何正确应用它。对于编译器警告,我使用 /external:anglebrackets
和 /external:W0
,效果很好。在这种情况下我可以使用类似的东西吗?
我想我已经找到了一个不错的解决方案。
Clang-tidy 支持将配置文件放置在与源文件相同的位置。通常,这会覆盖父文件夹的配置,但启用
InheritParentConfig
允许它继承设置:
Checks: '
-misc-include-cleaner
'
InheritParentConfig: true
这使得可以仅在选定的文件夹中禁用某些检查,同时保留全局检查。 显然,这不仅仅会影响
<windows.h>
标头,但考虑到维护的容易程度,我认为这是一个合理的解决方案。如果包含 <windows.h>
的所有文件都位于同一文件夹中并与项目的其余部分分开,效果最好,但我认为它只会强化良好的设计,并且无论如何都是您应该做的事情。