当前位置:网站首页>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:29:00 【Huawei cloud developer Alliance】
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-use
IWYU 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 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
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 ~
边栏推荐
- Congratulations to Mr. Zhang Pengfei, chief data scientist of artefact, for winning the campaign Asia tech MVP 2022
- R语言plotly可视化:plotly可视化多分类变量小提琴图(multiple variable violin plot in R with plotly)
- Difference between redis' memory obsolescence strategy and expiration deletion strategy
- 图像检索(image retrieval)
- Hidden corners of coder Edition: five things that developers hate most
- C# 更加优质的操作MongoDB数据库
- 【Go ~ 0到1 】 第六天 文件的读写与创建
- What is low code development?
- 中信证券网上开户安全吗 开户收费吗
- 太方便了,钉钉上就可完成代码发布审批啦!
猜你喜欢

一加10 Pro和iPhone 13怎么选?

建筑建材行业经销商协同系统解决方案:赋能企业构建核心竞争力

祝贺Artefact首席数据科学家张鹏飞先生荣获 Campaign Asia Tech MVP 2022

CANN算子:利用迭代器高效实现Tensor数据切割分块处理

Which domestic cloud management platform manufacturer is good in 2022? Why?

如何实现一个延时队列 ?

Understand ThreadLocal in one picture

To sort out messy header files, I use include what you use

一文掌握数仓中auto analyze的使用

聊聊异步编程的 7 种实现方式
随机推荐
Rebalance operation in spark and its difference from repartition operation
C# 更加优质的操作MongoDB数据库
"Cannot initialize Photoshop because the temporary storage disk is full" graphic solution
中信证券网上开户安全吗 开户收费吗
祝贺Artefact首席数据科学家张鹏飞先生荣获 Campaign Asia Tech MVP 2022
CANN算子:利用迭代器高效实现Tensor数据切割分块处理
PingCode 性能测试之负载测试实践
电子元器件B2B商城系统开发:赋能企业构建进销存标准化流程实例
智慧物流園區供應鏈管理系統解决方案:數智化供應鏈賦能物流運輸行業供應鏈新模式
With an annual income of more than 8 million, he has five full-time jobs. He still has time to play games
【模板】【luogu P4630】Duathlon 铁人两项(圆方树)
【云原生】服务网格是什么“格”?
居家打工年入800多万,一共五份全职工作,他还有时间打游戏
Using win10 scheduling task program to automatically run jar package at fixed time
Great Wall Securities security does not open a securities account
雨量预警广播自动化数据平台BWII 型广播预警监测仪
图像检索(image retrieval)
《吐血整理》保姆级系列教程-玩转Fiddler抓包教程(2)-初识Fiddler让你理性认识一下
第十八届IET交直流输电国际会议(ACDC2022)于线上成功举办
被PMP考试“折磨”出来的考试心得,值得你一览



