diff options
author | Marc Chevrier <marc.chevrier@gmail.com> | 2020-12-04 17:35:04 (GMT) |
---|---|---|
committer | Marc Chevrier <marc.chevrier@gmail.com> | 2020-12-23 14:47:46 (GMT) |
commit | cfd8a5ac1f443725342517ddbaee51692d8d0324 (patch) | |
tree | bf2224cb9c6b6ba1a7aed1eb2fbcaf31799cbc17 /Source/cmMakefileUtilityTargetGenerator.cxx | |
parent | a526f71266c2fed017c65a3d90b63286221476c0 (diff) | |
download | CMake-cfd8a5ac1f443725342517ddbaee51692d8d0324.zip CMake-cfd8a5ac1f443725342517ddbaee51692d8d0324.tar.gz CMake-cfd8a5ac1f443725342517ddbaee51692d8d0324.tar.bz2 |
Makefiles: Add support of DEPFILE for add_custom_command
Issue: #20286
Fixes: #21415
Diffstat (limited to 'Source/cmMakefileUtilityTargetGenerator.cxx')
-rw-r--r-- | Source/cmMakefileUtilityTargetGenerator.cxx | 39 |
1 files changed, 36 insertions, 3 deletions
diff --git a/Source/cmMakefileUtilityTargetGenerator.cxx b/Source/cmMakefileUtilityTargetGenerator.cxx index 6c18e48..a885b17 100644 --- a/Source/cmMakefileUtilityTargetGenerator.cxx +++ b/Source/cmMakefileUtilityTargetGenerator.cxx @@ -15,6 +15,7 @@ #include "cmLocalUnixMakefileGenerator3.h" #include "cmMakefile.h" #include "cmOSXBundleGenerator.h" +#include "cmStringAlgorithms.h" #include "cmSystemTools.h" cmMakefileUtilityTargetGenerator::cmMakefileUtilityTargetGenerator( @@ -36,10 +37,42 @@ void cmMakefileUtilityTargetGenerator::WriteRuleFiles() *this->BuildFileStream << "# Utility rule file for " << this->GeneratorTarget->GetName() << ".\n\n"; + const char* root = (this->Makefile->IsOn("CMAKE_MAKE_INCLUDE_FROM_ROOT") + ? "$(CMAKE_BINARY_DIR)/" + : ""); + + // Include the dependencies for the target. + std::string dependFile = + cmStrCat(this->TargetBuildDirectoryFull, "/compiler_depend.make"); + *this->BuildFileStream + << "# Include any custom commands dependencies for this target.\n" + << this->GlobalGenerator->IncludeDirective << " " << root + << cmSystemTools::ConvertToOutputPath( + this->LocalGenerator->MaybeConvertToRelativePath( + this->LocalGenerator->GetBinaryDirectory(), dependFile)) + << "\n\n"; + if (!cmSystemTools::FileExists(dependFile)) { + // Write an empty dependency file. + cmGeneratedFileStream depFileStream( + dependFile, false, this->GlobalGenerator->GetMakefileEncoding()); + depFileStream << "# Empty custom commands generated dependencies file for " + << this->GeneratorTarget->GetName() << ".\n" + << "# This may be replaced when dependencies are built.\n"; + } + + std::string dependTimestamp = + cmStrCat(this->TargetBuildDirectoryFull, "/compiler_depend.ts"); + if (!cmSystemTools::FileExists(dependTimestamp)) { + // Write a dependency timestamp file. + cmGeneratedFileStream depFileStream( + dependTimestamp, false, this->GlobalGenerator->GetMakefileEncoding()); + depFileStream << "# CMAKE generated file: DO NOT EDIT!\n" + << "# Timestamp file for custom commands dependencies " + "management for " + << this->GeneratorTarget->GetName() << ".\n"; + } + if (!this->NoRuleMessages) { - const char* root = (this->Makefile->IsOn("CMAKE_MAKE_INCLUDE_FROM_ROOT") - ? "$(CMAKE_BINARY_DIR)/" - : ""); // Include the progress variables for the target. *this->BuildFileStream << "# Include the progress variables for this target.\n" |