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


    摘要:使用include-what-you-use(iwyu/IWYU)清理冗余头文件,补充必要头文件。

    本文分享自华为云社区《用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 GitHub - include-what-you-use/include-what-you-use: A tool for use with clang to analyze #includes in C and C++ source files
    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。可以参照项目主页的使用方法,来帮助自动修复。

    • [2] Clang构建指导

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

  • 相关阅读:
    同程旅行前端面试汇总
    TPA3045-ASEMI光伏二极管TPA3045
    线上问题之Java数字范围引发的异常
    Selenium番外篇文本查找、元素高亮、截图、无头运行
    ConfigurableBeanFactory 源码分析
    基于数字孪生的智慧城市是如何发展的?
    Java计算机毕业设计 基于SpringBoot+Vue的毕业生信息招聘平台的设计与实现 Java实战项目 附源码+文档+视频讲解
    我的MVVM开源项目《出行防疫App》已发布
    开发者专访|我从「人间地狱」的算法岗内卷中,倔强地踏出了一条路 前路漫漫,星芒万里
    day28-jQuery01
  • 原文地址:https://blog.csdn.net/devcloud/article/details/125600197