[cmake-developers] Patch to only consider build dependencies between files in the source directory

Brad King brad.king at kitware.com
Tue Mar 15 14:13:51 EDT 2016


On 03/15/2016 10:48 AM, Attila Krasznahorkay wrote:
> https://cmake.org/pipermail/cmake-developers/2015-December/027197.html
> 
> With the following patch, when setting the CMAKE_ONLY_IN_SOURCE_DEPENDENCIES
> variable to 1/ON/TRUE, this file size goes down to just a few kilobytes.
> Speeding up our build noticeably.

Thanks.  As Ben pointed out in the original thread the build tree should
be included as well.  Perhaps a name like

  CMAKE_DEPENDS_IN_PROJECT_ONLY

could be used to indicate that it includes only dependencies in the project
directories (source or build tree).

> As far as I can see, the "cmake -E cmake_depends" call is only used by
> the Makefile generator at the moment. So I only taught that generator
> about this new variable.

The Makefile generator is the only one for which CMake takes responsibility
for implicit dependency scanning.

> I just didn't see what I should do in the Ninja generator for instance
> to apply this setting. Even though I would be very interested in implementing
> the feature in that generator as well.

The Ninja generator uses the compiler's information about dependencies
as generated by options like `gcc -MD`.  Since that occurs along with
the compilation there is little cost to including all dependencies
except for stat during rebuilds.  See discussion here:

  https://cmake.org/Bug/view.php?id=14914

about the opposite use case (including system dependencies instead of
excluding them).

> +  infoFileStream
> +    << "set(CMAKE_ONLY_IN_SOURCE_DEPENDENCIES "
> +    << ( this->Makefile->IsOn( "CMAKE_ONLY_IN_SOURCE_DEPENDENCIES" ) ?
> +         "1" : "0" )
> +    << ")\n";

Rather than communicating this to the dependency scanning step and
doing the filtering there, please look at applying the filter during
generation of CMAKE_<LANG>_TARGET_INCLUDE_PATH.

Thanks,
-Brad



More information about the cmake-developers mailing list