原创不易,转载请注明出处,谢谢。
环境
ubunu 18.04
生成include-what-you-use可执行文件
linux下安装比较简单。
https://github.com/include-what-you-use/include-what-you-use
参考上方网址,别搞错版本,基本没啥问题。
上方链接中编译步骤讲解的非常清楚,下面是我的生成步骤:
cd include-what-you-use-clang_9.0/
mkdir build
cd build
#include-what-you-use版本不同这里装的llvm和clang不同,对应关系如下图。
sudo apt install llvm-9-dev libclang-9-dev clang-9
#注意这里的llvm-9改成你安装的对应版本。
cmake -G "Unix Makefiles" -DCMAKE_PREFIX_PATH=/usr/lib/llvm-9 ../include-what-you-use-clang_9.0
make
最后我们获得了include-what-you-use可执行程序。
用项目下的python脚本生成imp文件,该文件用于防止使用的时候提示你把类似#include 这种替换成#include <qstring.h>。
python3.7 generate_qt_mappings.py /media/lynn/win10_data/shellWithOtherOs/code/.test/Test4PCH/include ./qt_5.12.imp
使用
新建一个qt项目用来测试。
–mapping_file选项用于选择imp文件。
记得要加上编译参数,编译参数可以在qtCreator打开项目,rebuild一下项目,compile output里会显示出来。
单个文件使用:
./include-what-you-use -Xiwyu --mapping_file=qt_5.12.imp -I/opt/Qt5.12.2/5.12.2/gcc_64/include/QtCore -I. -isystem /usr/include/libdrm -I/opt/Qt5.12.2/5.12.2/gcc_64/mkspecs/linux-g++ -I/opt/Qt5.12.2/5.12.2/gcc_64/include /media/lynn/win10_data/shellWithOtherOs/code/.test/Test4PCH/g.hpp -fPIC
针对整个项目使用:
1.用QtCreator run qmake生成MakeFile文件
2.将include-what-you-use和生成的qt_5.12.imp文件放到MakeFile所在目录下
3.用make添加CXX自动运行include-what-you-use
# -B的意思是make所有目标,-k的意思是即使目标无法创建也继续执行。
make -B -k CXX=include-what-you-use>iwyu.out CFLAGS=" -Xiwyu --mapping_file=qt_5.12.imp"
效果
ps:发现我的imp文件好像没有起到应该有的作用,还是提示我用#include "qXX.h"替换 #include ,后续知道怎么解决再来更新。
单个文件使用:
项目所有文件使用:
注意
我用下来,该工具提示了我无用的include、不合理的include、可以改为前向声明的include、无用的成员变量,功能还是比较强大的。
但是,请注意不要100%信赖这个工具提示的信息,建议修改的时候还是要过一下脑子,不要无脑粘贴,这个过程中说不定会发现代码中不合理的地方,这样有助于你让自己的代码更合理。