diff options
-rw-r--r-- | Source/cmQtAutoGenInitializer.cxx | 28 |
1 files changed, 23 insertions, 5 deletions
diff --git a/Source/cmQtAutoGenInitializer.cxx b/Source/cmQtAutoGenInitializer.cxx index 2894201..4dd78e5 100644 --- a/Source/cmQtAutoGenInitializer.cxx +++ b/Source/cmQtAutoGenInitializer.cxx @@ -1111,11 +1111,30 @@ bool cmQtAutoGenInitializer::InitAutogenTarget() // Register info file as generated by CMake this->Makefile->AddCMakeOutputFile(this->AutogenTarget.InfoFile); + // Determine whether to use a depfile for the AUTOGEN target. + const bool useNinjaDepfile = this->QtVersion >= IntegerVersion(5, 15) && + this->GlobalGen->GetName().find("Ninja") != std::string::npos; + // Files provided by the autogen target std::vector<std::string> autogenByproducts; + std::vector<std::string> timestampByproducts; if (this->Moc.Enabled) { this->AddGeneratedSource(this->Moc.CompilationFile, this->Moc, true); - autogenByproducts.push_back(this->Moc.CompilationFileGenex); + if (useNinjaDepfile) { + if (this->MultiConfig) { + // Make all mocs_compilation_<CONFIG>.cpp files byproducts of the + // ${target}_autogen/timestamp custom command. + // We cannot just use Moc.CompilationFileGenex here, because that + // custom command runs cmake_autogen for each configuration. + for (const auto& p : this->Moc.CompilationFile.Config) { + timestampByproducts.push_back(p.second); + } + } else { + timestampByproducts.push_back(this->Moc.CompilationFileGenex); + } + } else { + autogenByproducts.push_back(this->Moc.CompilationFileGenex); + } } if (this->Uic.Enabled) { @@ -1265,8 +1284,6 @@ bool cmQtAutoGenInitializer::InitAutogenTarget() this->AutogenTarget.DependFiles.begin(), this->AutogenTarget.DependFiles.end()); - const bool useNinjaDepfile = this->QtVersion >= IntegerVersion(5, 15) && - this->GlobalGen->GetName().find("Ninja") != std::string::npos; if (useNinjaDepfile) { // Create a custom command that generates a timestamp file and // has a depfile assigned. The depfile is created by JobDepFilesMergeT. @@ -1327,8 +1344,9 @@ bool cmQtAutoGenInitializer::InitAutogenTarget() this->AddGeneratedSource(outputFile, this->Moc); const std::string no_main_dependency; this->LocalGen->AddCustomCommandToOutput( - outputFile, dependencies, no_main_dependency, commandLines, - autogenComment.c_str(), this->Dir.Work.c_str(), + { outputFile }, timestampByproducts, dependencies, no_main_dependency, + /*implicit_depends=*/{}, commandLines, autogenComment.c_str(), + this->Dir.Work.c_str(), /*cmp0116=*/cmPolicies::NEW, /*replace=*/false, /*escapeOldStyle=*/false, /*uses_terminal=*/false, |