当前位置: 首页 > news >正文

CentOS 7.9 + GCC9 离线安装 IWYU(Include What You Use)

本教程适用于 离线环境下在 CentOS 7.9 系统中使用 GCC 9 离线安装 IWYU 的完整步骤,涵盖 Clang 11.1.0 编译、IWYU 构建以及头文件自动优化流程。


📥 一、准备安装包

请提前下载以下源码包(可通过在线机器提前下载,再传输到离线环境):

  • LLVM 源码:

    https://github.com/llvm/llvm-project/releases/download/llvmorg-11.1.0/llvm-11.1.0.src.tar.xz
    
  • Clang 源码:

    https://github.com/llvm/llvm-project/releases/download/llvmorg-11.1.0/clang-11.1.0.src.tar.xz
    
  • IWYU 源码:

    git clone -b clang_11 https://github.com/include-what-you-use/include-what-you-use.git
    

🧱 二、编译 Clang 11.1.0

# 解压源码
tar xf llvm-11.1.0.src.tar.xz
tar xf clang-11.1.0.src.tar.xz# 重命名 clang 并移动到 LLVM 源码目录下
mv clang-11.1.0.src llvm-11.1.0.src/tools/clang# 创建构建目录并进入
mkdir llvm-build && cd llvm-build# 生成 Makefile
cmake -G "Unix Makefiles" \-DCMAKE_BUILD_TYPE=Release \-DLLVM_ENABLE_PROJECTS=clang \-DCMAKE_C_COMPILER=gcc \-DCMAKE_CXX_COMPILER=g++ \-DCMAKE_INSTALL_PREFIX=/opt/iwyu \../llvm-11.1.0.src# 编译并安装
make -j12
make install

🧩 三、编译 IWYU

cd /path/to/include-what-you-use
mkdir build && cd buildcmake \-DCMAKE_PREFIX_PATH=/opt/iwyu \-DCMAKE_BUILD_TYPE=Release \-DCMAKE_INSTALL_PREFIX=/opt/iwyu \..
make -j12
make install

⚙️ 四、在 CMake 项目中启用 IWYU

在你的 CMakeLists.txt 中添加如下配置:

set(CMAKE_CXX_INCLUDE_WHAT_YOU_USE /opt/iwyu/bin/include-what-you-use)# 静态库需要额外添加
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

📊 五、执行头文件分析

python3 /path/to/include-what-you-use/iwyu_tool.py -p ./build > iwyu.out

参数说明:

  • -p ./build:指定包含 compile_commands.json 的目录(通常是构建目录)

  • > iwyu.out:将分析结果输出到文件中,便于后续处理


🔧 六、自动优化头文件

使用 IWYU 提供的 fix_includes.py 自动修复头文件:

python3 /path/to/include-what-you-use/fix_includes.py < iwyu.out

脚本功能:

  • ✅ 删除无用的 #include

  • ✅ 添加遗漏的 #include

  • ✅ 替换为更合适的头文件(如将 "my_string.h" 替换为 <string>


✅ 七、安装完成后结构检查

最终 /opt/iwyu 应包含:

/opt/iwyu/
├── bin/
│   └── include-what-you-use
├── include/
├── lib/
└── ...

如有需要,可将 /opt/iwyu/bin 添加到环境变量中,便于全局使用:

export PATH=/opt/iwyu/bin:$PATH

如需继续进行 IWYU 的静态分析优化工作,也可以配合 Bear 工具生成 compile_commands.json,提高分析准确性。


如果你需要支持自动生成头文件优化建议和分析报告,也可集成到 CI 脚本中,提升整个项目代码质量和可维护性。

需要帮助集成脚本或遇到特定错误,也欢迎继续提问。

http://www.dtcms.com/a/298201.html

相关文章:

  • Linux库——库的制作和原理(1)_回顾动静态库、制作使用库
  • 【服务器与部署 26】配置管理实战:Ansible、Puppet自动化配置管理让运维效率提升10倍
  • 电磁兼容二:共模和差模问题
  • 【06】C#入门到精通——C# 多个 .cs文件项目 同一项目下添加多个 .cs文件
  • Spring Boot 整合 MyBatis 与 Druid 数据源全流程
  • 《整合Spring Cache:本地缓存、Redis与Caffeine对比实践》
  • 7.25总结
  • 详解Python标准库之内置函数
  • 20255年第四届创新杯(原钉钉杯)参考论文+标准答案发布
  • 融合与智能:AI 时代数据库的进化之路
  • Low DK(低介电常数)板材的好处:
  • Vue2上
  • 《Uniapp-Vue 3-TS 实战开发》自定义年月日时分秒picker组件
  • Linux之shell脚本篇(二)
  • 7.3.3 文件系统组件
  • 医疗影像领域中DICOM标准
  • 基于位移传感器的转子质心角度位置检测:原理分析与实现
  • 关于数据库表id自增问题
  • Springboot垃圾分类管理的设计与实现
  • 人工智能概述
  • MyBatis-Plus极速开发指南
  • HAProxy 原理及配置
  • SpringBoot——使用@Scheduled定时器
  • cacti漏洞CVE-2022-46169复现
  • Android学习专题目录
  • 深入浅出设计模式——创建型模式之简单工厂模式
  • Spring Cache
  • Allegro软件光绘文件Artwork到底如何配置?
  • python+pandas是否能代替excel+vba?
  • C 标准库 <time.h> 函数详解