iwyu (Include-What-You-Use)
Include-What-You-Use is a tool for use with clang
to analyze #includes
in C
and C++
source files.
“Include what you use” means this: for every symbol (type, function variable, or macro) that you use in foo.cc
, either foo.cc
or foo.h
should #include
a .h
file that exports the declaration of that symbol.
The include-what-you-use tool is a program that can be built with the clang
libraries in order to analyze #include
directives of source files to find include-what-you-use violations, and suggest fixes for them.
The main goal of include-what-you-use is to remove superfluous #include
directives.
It does this both by figuring out what #include
directives are not actually needed for this file (for both .cc
and .h
files), and replacing #include
directives with forward-declares when possible.
Note
When referring to foo.cc
the meaning is for a source file, the suffix can be different like using .cpp
.
When referring to foo.cc
the meaning is for a header file, the suffix can be different like using .hpp
or .hh
.
Note
In this project we use iwyu
as an abbreviation/shorthand for Include-What-You-Use and henceforth we will refer
to this tool as iwyu
.
Installation of iwyu
:
iwyu
can be installed via conda-forge
like this:
conda install -c conda-forge include-what-you-use
Include-What-You-Use can be invoked manually, however in this project it’s being done via cmake
.
It can be done by setting the ENABLE_IWYU
option to ON
(default is OFF
).
For example you can use it like this:
cmake -S . -B bld -Wdev -Werror=dev -DCMAKE_FIND_ROOT_PATH=$CONDA_PREFIX -DENABLE_IWYU=ON
cmake --build bld --target Poc
This will create & use a build directory called bld
and cmake
will invoke iwyu
on each C++
source file.