不要使用包含你所使用的东西

主要观点:不建议使用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.pycat out.txt | fix_includes.py --nosafe_headers --keep_iwyu_namespace_format --noreorder
  • git-clang-format修正包含顺序。
  • 审查并按需修复。
  • 重复上述步骤直到无警告。
阅读 17
0 条评论