Given a C++ translation unit that compiles without errors, this tool lists
unnecessary #include
directives in the main source file. Nested
#include
directives in the files included from the main source file are not
considered.
Definition: An #include
directive is unnecessary if the translation unit
compiles without errors after you remove it.
Definition: An #include
directive is replaceable if it can be replaced with
one or more #include
directives for different headers without causing a
compile error.
For example, suppose the header file Base.h
defines a base class. The header
file Derived.h
defines a class deriving from the base class, so it includes
Base.h
. The main source file includes Derived.h
but does not use any
symbols defined in Derived.h
and uses only symbols defined in Base.h
. The
tool will say Derive.h
is replaceable, and suggest the main source file
directly include Base.h
instead.
- Git
- CMake 2.8 or better
The tool uses clang to preprocess and parse C++ source code. Download the llvm and clang sources to the working tree by running the commands:
git submodule init
git submodule update
Run the commands:
mkdir build
cd build
cmake ..
make
To run the tests:
make test
Run the commands:
mkdir build
cd build
cmake -G "Visual Studio 10" ..
In Visual C++, open the find-unnecessary-includes.sln
solution. Build the
find-unnecessary-includes
project.
To run the tests, build the RUN_TESTS
project.