当前位置:网站首页>Include what you use to save chaotic header files
Include what you use to save chaotic header files
2022-06-25 13:13:00 【Hua Weiyun】
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 https://github.com/include-what-you-use/include-what-you-use.git
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
边栏推荐
- Alibaba stability fault emergency handling process
- KVM 脚本管理 —— 筑梦之路
- WIN10环境下配置pytorch
- 与生产环境中的 console.log 说再见
- 揭秘GaussDB(for Redis):全面对比Codis
- list.replace, str.append
- Using CMD (command prompt) to install MySQL & configure the environment
- Native JS --- infinite scrolling
- Which Chinese virtual human is better? Sullivan, IDC: Xiaobing Baidu Shangtang ranks in the first echelon
- 解析数仓lazyagg查询重写优化
猜你喜欢

Meichuang was selected into the list of "2022 CCIA top 50 Chinese network security competitiveness"
![[AI helps scientific research] fool drawing of loss curve](/img/38/5cb2a3d33a609dab3874215d5f7b5b.png)
[AI helps scientific research] fool drawing of loss curve

中国虚拟人哪家强?沙利文、IDC:小冰百度商汤位列第一梯队

Uncover gaussdb (for redis): comprehensive comparison of CODIS

leetcode - 384. Scramble array

剑指offer 第 3 天字符串(简单)

Summer Ending

剑指 Offer II 028. 展平多级双向链表

Connect with the flight book and obtain the user information according to the userid

关于数据在内存中的存储下
随机推荐
剑指 Offer II 032. 有效的变位词
Another night when visdom crashed
用include what you use拯救混乱的头文件
Sword finger offer 04 Find in 2D array
[flask tutorial] flask overview
Seven competencies required by architects
字符串入门十八讲合集四
Sword finger offer II 028 Flatten multi-level bidirectional linked list
list. replace, str.append
Native JS --- infinite scrolling
药物设计新福音:腾讯联合中科大、浙大开发自适应图学习方法,预测分子相互作用及分子性质
关于数据在内存中的存储下
Summer Ending
汇编标志位相关知识点(连)
Koa frame
《MongoDB入门教程》第01篇 MongoDB简介
又是被Visdom搞崩溃的一夜
Used in time filter (EL table)
Koa 框架
C# 切换中英文输入法




