summaryrefslogtreecommitdiffstats
path: root/Source/cmLocalUnixMakefileGenerator3.cxx
diff options
context:
space:
mode:
authorYurii Batrak <yuriib@met.no>2017-11-24 12:01:18 (GMT)
committerBrad King <brad.king@kitware.com>2017-12-14 13:13:42 (GMT)
commit5f2e2c387deb7f798cbc54d0980503e05873eaaa (patch)
tree95a65992d8754c8d1b96bf0ad2073753244fa8b1 /Source/cmLocalUnixMakefileGenerator3.cxx
parenteea976e930fcb7e8f92968c241d50ed49a1f1f0b (diff)
downloadCMake-5f2e2c387deb7f798cbc54d0980503e05873eaaa.zip
CMake-5f2e2c387deb7f798cbc54d0980503e05873eaaa.tar.gz
CMake-5f2e2c387deb7f798cbc54d0980503e05873eaaa.tar.bz2
Makefiles: Avoid nested make calls for Fortran module dependencies
Makefiles generated by cmake use a series of nested calls to build `*.provides.build` targets that are used when the 'requires' step is needed. That leads to significant degradation of the build time for incremental builds. Re-arrange dependencies to eliminate the nested calls. Explicit `.mod.stamp` targets introduced by this commit could lead to situation when a stamp file always older than its dependency. This happens during the incremental build when building of an updated Fortran source produces a module file that has no differences from the stored stamp file. In such case `cmake_copy_f90_mod` will be triggered on each new build to compare a module file with the corresponding stamp file. This behavior is expected and can not be changed without nested calls that slow down the build. The copy-if-different check is much cheaper than an entire nested make call.
Diffstat (limited to 'Source/cmLocalUnixMakefileGenerator3.cxx')
-rw-r--r--Source/cmLocalUnixMakefileGenerator3.cxx2
1 files changed, 2 insertions, 0 deletions
diff --git a/Source/cmLocalUnixMakefileGenerator3.cxx b/Source/cmLocalUnixMakefileGenerator3.cxx
index e26182a..a389ad0 100644
--- a/Source/cmLocalUnixMakefileGenerator3.cxx
+++ b/Source/cmLocalUnixMakefileGenerator3.cxx
@@ -1444,6 +1444,8 @@ bool cmLocalUnixMakefileGenerator3::ScanDependencies(
}
#ifdef CMAKE_BUILD_WITH_CMAKE
else if (lang == "Fortran") {
+ ruleFileStream << "# Note that incremental build could trigger "
+ << "a call to cmake_copy_f90_mod on each re-build\n";
scanner = new cmDependsFortran(this);
} else if (lang == "Java") {
scanner = new cmDependsJava();