diff options
author | Brad King <brad.king@kitware.com> | 2023-02-21 13:46:51 (GMT) |
---|---|---|
committer | Kitware Robot <kwrobot@kitware.com> | 2023-02-21 13:47:00 (GMT) |
commit | ad8ada1bee0bb0d58e893979229f4966baf35b39 (patch) | |
tree | a90f817ecd475b5db7733f85292754dbd764b55c | |
parent | c2897eb72551e766c300c84a5a51b5a8cf97b81b (diff) | |
parent | 2b713b0f9590831e24c8771768ffd0710c7198ce (diff) | |
download | CMake-ad8ada1bee0bb0d58e893979229f4966baf35b39.zip CMake-ad8ada1bee0bb0d58e893979229f4966baf35b39.tar.gz CMake-ad8ada1bee0bb0d58e893979229f4966baf35b39.tar.bz2 |
Merge topic 'KateNinjaImprovements'
2b713b0f95 Kate: mention Ninja Multiconfig in the docs
f6f8f89e6c Kate: support for the targets of multi config ninja
0429a37e48 Kate: enable the ninja multiconfig generator for kate
Acked-by: Kitware Robot <kwrobot@kitware.com>
Acked-by: buildbot <buildbot@kitware.com>
Merge-request: !8226
-rw-r--r-- | Help/generator/Kate.rst | 3 | ||||
-rw-r--r-- | Source/cmExtraKateGenerator.cxx | 67 | ||||
-rw-r--r-- | Source/cmExtraKateGenerator.h | 2 |
3 files changed, 45 insertions, 27 deletions
diff --git a/Help/generator/Kate.rst b/Help/generator/Kate.rst index d12723b..11354f2 100644 --- a/Help/generator/Kate.rst +++ b/Help/generator/Kate.rst @@ -28,5 +28,8 @@ This "extra" generator may be specified as: ``Kate - Ninja`` Generate with :generator:`Ninja`. +``Kate - Ninja Multi-Config`` + Generate with :generator:`Ninja Multi-Config`. + ``Kate - Unix Makefiles`` Generate with :generator:`Unix Makefiles`. diff --git a/Source/cmExtraKateGenerator.cxx b/Source/cmExtraKateGenerator.cxx index a128a8b..6e6d009 100644 --- a/Source/cmExtraKateGenerator.cxx +++ b/Source/cmExtraKateGenerator.cxx @@ -35,6 +35,7 @@ cmExternalMakefileProjectGeneratorFactory* cmExtraKateGenerator::GetFactory() // factory.AddSupportedGlobalGenerator("MSYS Makefiles"); #endif factory.AddSupportedGlobalGenerator("Ninja"); + factory.AddSupportedGlobalGenerator("Ninja Multi-Config"); factory.AddSupportedGlobalGenerator("Unix Makefiles"); } @@ -48,7 +49,9 @@ void cmExtraKateGenerator::Generate() this->ProjectName = this->GenerateProjectName( lg->GetProjectName(), mf->GetSafeDefinition("CMAKE_BUILD_TYPE"), this->GetPathBasename(lg->GetBinaryDirectory())); - this->UseNinja = (this->GlobalGenerator->GetName() == "Ninja"); + this->UseNinja = + ((this->GlobalGenerator->GetName() == "Ninja") || + (this->GlobalGenerator->GetName() == "Ninja Multi-Config")); this->CreateKateProjectFile(*lg); this->CreateDummyKateProjectFile(*lg); @@ -82,6 +85,7 @@ void cmExtraKateGenerator::WriteTargets(const cmLocalGenerator& lg, const std::string& makeArgs = mf->GetSafeDefinition("CMAKE_KATE_MAKE_ARGUMENTS"); std::string const& homeOutputDir = lg.GetBinaryDirectory(); + const auto configs = mf->GetGeneratorConfigs(cmMakefile::IncludeEmptyConfig); /* clang-format off */ fout << @@ -105,16 +109,16 @@ void cmExtraKateGenerator::WriteTargets(const cmLocalGenerator& lg, // this is for kate >= 4.13: fout << "\t\t\"targets\":[\n"; - this->AppendTarget(fout, "all", make, makeArgs, homeOutputDir, + this->AppendTarget(fout, "all", configs, make, makeArgs, homeOutputDir, homeOutputDir); - this->AppendTarget(fout, "clean", make, makeArgs, homeOutputDir, + this->AppendTarget(fout, "clean", configs, make, makeArgs, homeOutputDir, homeOutputDir); // add all executable and library targets and some of the GLOBAL // and UTILITY targets for (const auto& localGen : this->GlobalGenerator->GetLocalGenerators()) { const auto& targets = localGen->GetGeneratorTargets(); - std::string currentDir = localGen->GetCurrentBinaryDirectory(); + const std::string currentDir = localGen->GetCurrentBinaryDirectory(); bool topLevel = (currentDir == localGen->GetBinaryDirectory()); for (const auto& target : targets) { @@ -138,8 +142,8 @@ void cmExtraKateGenerator::WriteTargets(const cmLocalGenerator& lg, } } if (insertTarget) { - this->AppendTarget(fout, targetName, make, makeArgs, currentDir, - homeOutputDir); + this->AppendTarget(fout, targetName, configs, make, makeArgs, + currentDir, homeOutputDir); } } break; case cmStateEnums::UTILITY: @@ -154,19 +158,21 @@ void cmExtraKateGenerator::WriteTargets(const cmLocalGenerator& lg, break; } - this->AppendTarget(fout, targetName, make, makeArgs, currentDir, - homeOutputDir); + this->AppendTarget(fout, targetName, configs, make, makeArgs, + currentDir, homeOutputDir); break; case cmStateEnums::EXECUTABLE: case cmStateEnums::STATIC_LIBRARY: case cmStateEnums::SHARED_LIBRARY: case cmStateEnums::MODULE_LIBRARY: case cmStateEnums::OBJECT_LIBRARY: { - this->AppendTarget(fout, targetName, make, makeArgs, currentDir, - homeOutputDir); - std::string fastTarget = cmStrCat(targetName, "/fast"); - this->AppendTarget(fout, fastTarget, make, makeArgs, currentDir, - homeOutputDir); + this->AppendTarget(fout, targetName, configs, make, makeArgs, + currentDir, homeOutputDir); + if (!this->UseNinja) { + std::string fastTarget = cmStrCat(targetName, "/fast"); + this->AppendTarget(fout, fastTarget, configs, make, makeArgs, + currentDir, homeOutputDir); + } } break; default: @@ -179,29 +185,36 @@ void cmExtraKateGenerator::WriteTargets(const cmLocalGenerator& lg, std::vector<std::string> objectFileTargets; localGen->GetIndividualFileTargets(objectFileTargets); for (std::string const& f : objectFileTargets) { - this->AppendTarget(fout, f, make, makeArgs, currentDir, homeOutputDir); + this->AppendTarget(fout, f, configs, make, makeArgs, currentDir, + homeOutputDir); } } fout << "\t] }\n"; } -void cmExtraKateGenerator::AppendTarget(cmGeneratedFileStream& fout, - const std::string& target, - const std::string& make, - const std::string& makeArgs, - const std::string& path, - const std::string& homeOutputDir) const +void cmExtraKateGenerator::AppendTarget( + cmGeneratedFileStream& fout, const std::string& target, + const std::vector<std::string>& configs, const std::string& make, + const std::string& makeArgs, const std::string& path, + const std::string& homeOutputDir) const { static char JsonSep = ' '; - fout << "\t\t\t" << JsonSep << R"({"name":")" << target - << "\", " - "\"build_cmd\":\"" - << make << " -C \\\"" << (this->UseNinja ? homeOutputDir : path) - << "\\\" " << makeArgs << " " << target << "\"}\n"; - - JsonSep = ','; + for (const std::string& conf : configs) { + fout << "\t\t\t" << JsonSep << R"({"name":")" << target + << ((configs.size() > 1) ? (std::string(":") + conf) : std::string()) + << "\", " + "\"build_cmd\":\"" + << make << " -C \\\"" << (this->UseNinja ? homeOutputDir : path) + << "\\\" " + << ((this->UseNinja && configs.size() > 1) + ? std::string(" -f build-") + conf + ".ninja" + : std::string()) + << makeArgs << " " << target << "\"}\n"; + + JsonSep = ','; + } } void cmExtraKateGenerator::CreateDummyKateProjectFile( diff --git a/Source/cmExtraKateGenerator.h b/Source/cmExtraKateGenerator.h index c66ddbf..203fa2f 100644 --- a/Source/cmExtraKateGenerator.h +++ b/Source/cmExtraKateGenerator.h @@ -5,6 +5,7 @@ #include "cmConfigure.h" // IWYU pragma: keep #include <string> +#include <vector> #include "cmExternalMakefileProjectGenerator.h" @@ -29,6 +30,7 @@ private: void WriteTargets(const cmLocalGenerator& lg, cmGeneratedFileStream& fout) const; void AppendTarget(cmGeneratedFileStream& fout, const std::string& target, + const std::vector<std::string>& configs, const std::string& make, const std::string& makeArgs, const std::string& path, const std::string& homeOutputDir) const; |