主要观点:不建议使用include-what-you-use,其存在诸多问题,如初次添加时输出多、适配工作量大、对 CI 构建时间影响小、减慢编译、需分别测试不同配置、适应不同平台、无法考虑宏展开、有时误删必要包含、需多次迭代、需额外映射、有时崩溃、对 C 头文件处理随机等,作者在 macOS 集成支持后停止,不添加 Linux 和 Windows 支持,认为其质量为 alpha 且可能不值得使用,除非代码基不使用前向声明等极端情况,可等待模块成为主流。
关键信息:
- 初次添加时输出多,适配工作量大且需审查。
- 对 CI 构建时间影响小,本地或 CI 默认运行无意义。
- 减慢编译,需分别测试不同配置。
- 适应不同平台需手动修复。
- 无法考虑宏展开,需手动标记。
- 有时误删必要包含,需手动修复。
- 需多次迭代达到稳定状态。
- 需额外映射系统头和第三方框架。
- 有时崩溃。
- 对 C 头文件处理随机。
使用步骤: - 在 macOS 安装:
brew install include-what-you-use
(也会安装 llvm)。 - 添加 CMake 选项启用:
option(SR_ENABLE_IWYU "Enable include-what-you-use")
等。 - 添加 CMake 函数启用:
function(sr_setup_iwyu TARGET)
等。 - 选择支持 IWYU 的生成器:
cmake -B build -G "Ninja Multi-Config"
。 - 构建并记录输出:
cmake --config <config> --build build | tee out.txt
。 - 运行
fix_includes.py
:cat out.txt | fix_includes.py --nosafe_headers --keep_iwyu_namespace_format --noreorder
。 - 用
git-clang-format
修正包含顺序。 - 审查并按需修复。
- 重复上述步骤直到无警告。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。