diff options
author | Joerg Bornemann <joerg.bornemann@qt.io> | 2022-05-24 14:41:57 (GMT) |
---|---|---|
committer | Joerg Bornemann <joerg.bornemann@qt.io> | 2022-05-25 11:04:01 (GMT) |
commit | 76608c60d38e1cb93a77a430c1cef3ec85f2ce83 (patch) | |
tree | 26ae44d0d3c5b1b47c1306b218631696445511d0 /Source | |
parent | ced9a3b0bbc85fbd392b7323b18d00309a444ddc (diff) | |
download | CMake-76608c60d38e1cb93a77a430c1cef3ec85f2ce83.zip CMake-76608c60d38e1cb93a77a430c1cef3ec85f2ce83.tar.gz CMake-76608c60d38e1cb93a77a430c1cef3ec85f2ce83.tar.bz2 |
AutoMoc: Take AUTOMOC_BUILD_DIR into account in depfile
For the Ninja generator and targets that have AUTOMOC_BUILD_DIR set, the
AutoMoc target was always out of date.
That was because the depfile in the AutoMoc build directory was
referencing the wrong timestamp file:
target_autogen/timestamp: ...dependencies...
instead of
automoc_build_dir/timestamp: ...dependencies...
Use the relative path of the timestamp file as rule name for the
depfile. That path is calculated with AUTOMOC_BUILD_DIR taken into
account.
Fixes: #23547
Diffstat (limited to 'Source')
-rw-r--r-- | Source/cmQtAutoGenInitializer.cxx | 5 | ||||
-rw-r--r-- | Source/cmQtAutoGenInitializer.h | 1 |
2 files changed, 5 insertions, 1 deletions
diff --git a/Source/cmQtAutoGenInitializer.cxx b/Source/cmQtAutoGenInitializer.cxx index a47b3c0..40f3ab5 100644 --- a/Source/cmQtAutoGenInitializer.cxx +++ b/Source/cmQtAutoGenInitializer.cxx @@ -407,6 +407,7 @@ bool cmQtAutoGenInitializer::InitCustomTargets() } // Common directories + std::string relativeBuildDir; { // Collapsed current binary directory std::string const cbd = cmSystemTools::CollapseFullPath( @@ -424,6 +425,8 @@ bool cmQtAutoGenInitializer::InitCustomTargets() cmStrCat(cbd, '/', this->GenTarget->GetName(), "_autogen"); } cmSystemTools::ConvertToUnixSlashes(this->Dir.Build); + this->Dir.RelativeBuild = + cmSystemTools::RelativePath(cbd, this->Dir.Build); // Cleanup build directory this->AddCleanFile(this->Dir.Build); @@ -1357,7 +1360,7 @@ bool cmQtAutoGenInitializer::InitAutogenTarget() cmStrCat(this->Dir.Build, "/", timestampFileName); this->AutogenTarget.DepFile = cmStrCat(this->Dir.Build, "/deps"); this->AutogenTarget.DepFileRuleName = - cmStrCat(this->GenTarget->GetName(), "_autogen/", timestampFileName); + cmStrCat(this->Dir.RelativeBuild, "/", timestampFileName); commandLines.push_back(cmMakeCommandLine( { cmSystemTools::GetCMakeCommand(), "-E", "touch", outputFile })); diff --git a/Source/cmQtAutoGenInitializer.h b/Source/cmQtAutoGenInitializer.h index 603c537..33749ba 100644 --- a/Source/cmQtAutoGenInitializer.h +++ b/Source/cmQtAutoGenInitializer.h @@ -178,6 +178,7 @@ private: { std::string Info; std::string Build; + std::string RelativeBuild; std::string Work; ConfigString Include; std::string IncludeGenExp; |