写点什么

整理混乱的头文件,我用 include what you use

  • 2022 年 7 月 04 日
  • 本文字数:1509 字

    阅读完需:约 5 分钟

整理混乱的头文件,我用include what you use

本文分享自华为云社区《用include what you use拯救混乱的头文件》,作者: 村头树下 。

背景


面对大型 C/C++项目的时候,混乱的头文件引用,经常会有一种剪不断理还乱的感觉。长年累月的项目迭代,需求更新。导致头文件未能及时随着代码的变动而更新,成为了冗余的负担。这会增加整体项目的编译时间。如果没有一个工具来帮助我整理这些头文件,我是绝对不会动一丝整改他们的想法。幸运的是,有一个工具可以满足我们的要求–include what you use.

简介


在各种 C/C++编码规范中,一般都会提到几点:


禁止包含用不到的头文件


用不到的头文件被包含的同时,引入了不必要的依赖,增加了模块之间的耦合度,只要该头文件修改,代码就会重新编译。


头文件应该自包含


如果一个文件包含某个头文件。想要正常工作,还必须包含另外一个头文件,这会增加使用的负担。

所以这也是整理头文件的意义。


这也是使用 include-what-you-use(下称 IWYU)的初衷。

安装


附上此项目的主页


https://github.com/include-what-you-use/include-what-you-use


IWYU 依赖 Clang,而且它针对 Clang 的各个版本都有自己对应的版本。所以在安装 IWYU 的时候,首先需确定你的 Clang 是什么版本。由于本人之前未曾安装过 Clang,所以首先要安装 Clang.


Clang 的安装


建议直接源码编译,减少符号不兼容等奇怪的错误


克隆 llvm 仓库


git clone https://github.com/llvm/llvm-project.git


切到想要编译的 llvm 版本



cd llvm-project
git checkout llvmorg-14.0.0
复制代码


构建 LLVM 和 Clang



cd llvm-project
mkdir build && cd build
cmake -DLLVM_ENABLE_PROJECTS=clang -DCMAKE_BUILD_TYPE=Release -G “Unix Makefiles” …/llvm
make -j48
复制代码

IWYU 安装


克隆 IWYU 仓库


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


cd include-what-you-use


切换到与 clang 对应的分支,由于刚才安装的是 14.0 的版本,因此这里也切换到对应版本



git checkeout clang_14
复制代码


在 IWYU 上一层创建文件夹 build



mkdir build && cd build
cmake -G “Unix Makefiles” -DCMAKE_PREFIX_PATH=…/llvm/llvm-project/llvm/ …/include-what-you-use/
复制代码


CMAKE_PREFIX_PATH 指向刚才构建的 llvm 目录。如果构建成功,你会看到



开始编译 IWYU



cd …/include-what-you-use/
make -j48
复制代码


编译成功



如果希望更方便的使用 iwyu,可以将其 bin 加入环境变量中,我是创建了一个软链接到/usr/bin 目录下



ln -s /the/path/of/include-what-you-use/bin/include-what-you-use /usr/bin/iwyu
复制代码


如果一切妥当,就可以用 iwyu -v 来检查是否安装成功了


使用


这里介绍一下在 Clion 环境下,如何使用 IWYU


打开 Clion->File->Setting->Build,Execution,Deployment 页面


  • 设置编译器


在官方文档中,介绍使用 IWYU 的时候,使用 Clang 作为编译器。通过亲自实践发现,在 14.0 版本下,Gcc 7.3.1 也是可以使用 IWYU 的。


在 Toolchains 中设置 Clang 的路径,由于我 Gcc 也可以运行,所以并没有更改



  • 设置编译选项


->Cmake 设置页面。


新建一个编译模板名为 Debug-iwyu,重点是在 Cmake options 中添加 -DCMAKE_CXX_INCLUDE_WHAT_YOU_USE=iwyux 其中 iwyu 为你环境中实际 include-what-you-use 可执行文件的路径



  • 编译项目


在编译项目的界面选择刚刚创建的编译模板 Debug-iwyu



OK,一切准备就绪,就可以开始编译了。


  • 结果处理


这里举了一个很简单的例子,main.cpp 包含了三个用不到的头文件



然后 iwyu 在编译的过程中会提醒我们这三个头文件应该被移除



但是真实的大型项目中,肯定会有很多的提醒,一个一个去手动修改。依然是个机械的苦力活,所以在 iwyu 项目中,提供了一个可以辅助自动修复的脚本 fix_includes.py。可以参照项目主页的使用方法,来帮助自动修复。



点击关注,第一时间了解华为云新鲜技术~

发布于: 刚刚阅读数: 3
用户头像

提供全面深入的云计算技术干货 2020.07.14 加入

华为云开发者社区,提供全面深入的云计算前景分析、丰富的技术干货、程序样例,分享华为云前沿资讯动态,方便开发者快速成长与发展,欢迎提问、互动,多方位了解云计算! 传送门:https://bbs.huaweicloud.com/

评论

发布
暂无评论
整理混乱的头文件,我用include what you use_c++_华为云开发者联盟_InfoQ写作社区