当前位置:网站首页>To sort out messy header files, I use include what you use
To sort out messy header files, I use include what you use
2022-07-04 17:24:00 【51CTO】
Abstract : Use include-what-you-use(iwyu/IWYU) Clean up redundant header files , Add necessary header files .
This article is shared from Huawei cloud community 《 use include what you use Save the chaotic header file 》, author : Under the village tree .
background
Face large C/C++ When the project is , Confusing header file references , There is often a feeling of being cut and disordered . Years of project iterations , Demand update . As a result, the header file is not updated in time with the code changes , Become a burden of redundancy . This will increase the compilation time of the overall project . If I don't have a tool to help me organize these header files , I will never change their mind . Fortunately, , There is a tool that can meet our requirements –include what you use.
brief introduction
In all kinds of C/C++ In the coding specification , There are usually a few points mentioned :
Do not include unused header files
Unused header files are included at the same time , Introduced unnecessary dependencies , Increased coupling between modules , As long as the header file is modified , The code will be recompiled .
The header file should contain itself
If a file contains a header file . Want to work properly , You must also include another header file , This will increase the burden of use .
So this is also the meaning of sorting header files . This is also used include-what-you-use( Hereinafter referred to as IWYU) The purpose of .
install
Attach the home page for this project
https://github.com/include-what-you-use/include-what-you-useIWYU rely on Clang, And it targets Clang Each version of has its own version . So in installation IWYU When , First you need to determine your Clang What version is it . Because I have not installed Clang, So first install Clang.
Clang Installation
It is recommended to compile the source code directly , Reduce strange errors such as symbol incompatibility
clone llvm Warehouse
git clone https://github.com/llvm/llvm-project.git
Switch to the one you want to compile llvm edition
cd llvm-project
git checkout llvmorg-14.0.0
structure LLVM and Clang
cd llvm-project
mkdir build && cd build
cmake -DLLVM_ENABLE_PROJECTS=clang -DCMAKE_BUILD_TYPE=Release -G “Unix Makefiles” …/llvm
make -j48
IWYU install
clone IWYU Warehouse
git clone https://github.com/include-what-you-use/include-what-you-use.gitcd include-what-you-use
Switch to and clang Corresponding branch , Because what was just installed 14.0 Version of , So here we also switch to the corresponding version
git checkeout clang_14
stay IWYU Create folders one level above build
mkdir build && cd build
cmake -G “Unix Makefiles” -DCMAKE_PREFIX_PATH=…/llvm/llvm-project/llvm/ …/include-what-you-use/
CMAKE_PREFIX_PATH Point to the just built llvm Catalog . If the build is successful , You'll see 
Start compilation IWYU
cd …/include-what-you-use/
make -j48
Compile successfully 
If you want more convenient use iwyu, It can be bin Add environment variables , I am creating a soft link to /usr/bin Under the table of contents
ln -s /the/path/of/include-what-you-use/bin/include-what-you-use /usr/bin/iwyu
If all is well , You can use it iwyu -v To check whether the installation was successful 
Use
Here is an introduction to Clion In the environment , How to use IWYU
open Clion->File->Setting->Build,Execution,Deployment page
- Set up compiler
In the official documentation , Introduce use IWYU When , Use Clang As a compiler . Discover through personal practice , stay 14.0 Under the version ,Gcc 7.3.1 It can also be used IWYU Of .
stay Toolchains Set in Clang The path of , Because of me Gcc It can also run , So there is no change
- Set compilation options
->Cmake Setup page .
Create a new compilation template named Debug-iwyu, The focus is on Cmake options Add -DCMAKE_CXX_INCLUDE_WHAT_YOU_USE=iwyux among iwyu Be practical in your environment include-what-you-use Path to executable file
- Compile the project
Select the newly created compilation template in the compile project interface Debug-iwyu
OK, Everything is all set. , You can start compiling . - The result processing
Here is a very simple example ,main.cpp Contains three unused header files
then iwyu During compilation, we will be reminded that these three header files should be removed
But in real large projects , There must be a lot of reminders , Manually modify one by one . Still a mechanical coolie , So in iwyu In the project , Provides a script that can assist in automatic repair fix_includes.py. You can refer to the usage of the project homepage , To help automatically repair . - [1] IWYU Home page
- [2] Clang Build guidance
Click to follow , The first time to learn about Huawei's new cloud technology ~
边栏推荐
- 昆明三环闭合工程将经过这些地方,有在你家附近的吗?
- Solution of dealer collaboration system in building materials industry: empowering enterprises to build core competitiveness
- NFT liquidity market security issues occur frequently - Analysis of the black incident of NFT trading platform quixotic
- tp配置多数据库
- Is it safe to open an account online
- 什么是低代码开发?
- Smart Logistics Park supply chain management system solution: digital intelligent supply chain enables a new supply chain model for the logistics transportation industry
- [acwing] 58 weeks 4490 dyeing
- Pytorch deep learning quick start tutorial
- Linear time sequencing
猜你喜欢

建筑建材行业经销商协同系统解决方案:赋能企业构建核心竞争力
Why do you say that the maximum single table of MySQL database is 20million? Based on what?

智捷云——元宇宙综合解决方案服务商

电子宠物小狗-内部结构是什么?

Yanwen logistics plans to be listed on Shenzhen Stock Exchange: it is mainly engaged in international express business, and its gross profit margin is far lower than the industry level

Embedded software architecture design - function call

超大规模数仓集群在大型商业银行的落地实践

ble HCI 流控机制

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

7 RSA密码体制
随机推荐
Array filter fliter in JS
To sort out messy header files, I use include what you use
Solution of dealer collaboration system in building materials industry: empowering enterprises to build core competitiveness
《吐血整理》保姆级系列教程-玩转Fiddler抓包教程(2)-初识Fiddler让你理性认识一下
MD5加密的两种方式
【Go ~ 0到1 】 第六天 文件的读写与创建
关于nacos启动时防火墙开启8848的坑
电子元器件B2B商城系统开发:赋能企业构建进销存标准化流程实例
昆明三环闭合工程将经过这些地方,有在你家附近的吗?
祝贺Artefact首席数据科学家张鹏飞先生荣获 Campaign Asia Tech MVP 2022
Median and order statistics
矿产行业商业供应链协同系统解决方案:构建数智化供应链平台,保障矿产资源安全供应
C# 更加优质的操作MongoDB数据库
超大规模数仓集群在大型商业银行的落地实践
Is it safe for Great Wall Securities to open an account? How to open a securities account
tx.origin安全问题总结
PingCode 性能测试之负载测试实践
Years of training, towards Kata 3.0! Enter the safe container experience out of the box | dragon lizard Technology
Maximum subarray and matrix multiplication
R语言plotly可视化:plotly可视化多分类变量小提琴图(multiple variable violin plot in R with plotly)