From 2f77dc34158910e9f07107836bd5fcc923dd26a7 Mon Sep 17 00:00:00 2001 From: Cristian Adam Date: Tue, 22 Feb 2022 18:16:24 +0100 Subject: [PATCH] CMakePM: Proper handling of the extra generator CMake fails if it has -DCMAKE_GENERATOR:STRING=CodeBlocks - Ninja It expects separate values: -DCMAKE_EXTRA_GENERATOR:STRING=CodeBlocks -DCMAKE_GENERATOR:STRING=Ninja Fixes: QTCREATORBUG-27060 Change-Id: Ia2b5bdc425e569118d689b7223fbef5f953d98a7 Reviewed-by: Reviewed-by: Eike Ziller --- .../cmakebuildconfiguration.cpp | 18 ++++++++++++++++-- .../cmakekitinformation.cpp | 9 ++++----- 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp index 6513dadab92..c16154520b8 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp +++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp @@ -1739,8 +1739,22 @@ void InitialCMakeArgumentsAspect::setAllValues(const QString &values, QStringLis { QStringList arguments = values.split('\n', Qt::SkipEmptyParts); for (QString &arg: arguments) { - if (arg.startsWith("-G")) - arg.replace("-G", "-DCMAKE_GENERATOR:STRING="); + if (arg.startsWith("-G")) { + const QString strDash(" - "); + const int idxDash = arg.indexOf(strDash); + if (idxDash > 0) { + // -GCodeBlocks - Ninja + QString generator = "-DCMAKE_GENERATOR:STRING=" + arg.mid(idxDash + strDash.length()); + arguments.append(generator); + + arg = arg.first(idxDash); + arg.replace("-G", "-DCMAKE_EXTRA_GENERATOR:STRING="); + + } else { + // -GNinja + arg.replace("-G", "-DCMAKE_GENERATOR:STRING="); + } + } if (arg.startsWith("-A")) arg.replace("-A", "-DCMAKE_GENERATOR_PLATFORM:STRING="); if (arg.startsWith("-T")) diff --git a/src/plugins/cmakeprojectmanager/cmakekitinformation.cpp b/src/plugins/cmakeprojectmanager/cmakekitinformation.cpp index cd315af53b8..f627db0d393 100644 --- a/src/plugins/cmakeprojectmanager/cmakekitinformation.cpp +++ b/src/plugins/cmakeprojectmanager/cmakekitinformation.cpp @@ -668,11 +668,10 @@ CMakeConfig CMakeGeneratorKitAspect::generatorCMakeConfig(const ProjectExplorer: if (info.generator.isEmpty()) return config; - if (info.extraGenerator.isEmpty()) - config << CMakeConfigItem("CMAKE_GENERATOR", info.generator.toUtf8()); - else - config << CMakeConfigItem("CMAKE_GENERATOR", - (info.extraGenerator + " - " + info.generator).toUtf8()); + config << CMakeConfigItem("CMAKE_GENERATOR", info.generator.toUtf8()); + + if (!info.extraGenerator.isEmpty()) + config << CMakeConfigItem("CMAKE_EXTRA_GENERATOR", info.extraGenerator.toUtf8()); if (!info.platform.isEmpty()) config << CMakeConfigItem("CMAKE_GENERATOR_PLATFORM", info.platform.toUtf8());