From a862c7b3549a1b1ecd1ed0733bf34c98498343d9 Mon Sep 17 00:00:00 2001 From: Cristian Adam Date: Fri, 26 Mar 2021 16:24:03 +0100 Subject: [PATCH] CMakePM: Fix "Build type" for multi configuration generators The multi configuration generators (Visual Studio, Xcode) had an empty "Build type" which caused failures to parse the CMake file-api information. Change-Id: I70ee4978cee4d43e980edf4cd512d1ca95275638 Reviewed-by: Alessandro Portale --- .../cmakeprojectmanager/cmakebuildconfiguration.cpp | 10 ++++++++-- .../cmakeprojectmanager/cmakebuildconfiguration.h | 2 ++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp index 4632ca14b79..95b9f21975c 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp +++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp @@ -903,6 +903,7 @@ CMakeBuildConfiguration::CMakeBuildConfiguration(Target *target, Id id) const Kit *k = target->kit(); QStringList initialArgs = defaultInitialCMakeArguments(k, info.typeName); + setIsMultiConfig(CMakeGeneratorKitAspect::isMultiConfigGenerator(k)); // Android magic: if (DeviceTypeKitAspect::deviceTypeId(k) == Android::Constants::ANDROID_DEVICE_TYPE) { @@ -1347,7 +1348,7 @@ QString CMakeBuildConfiguration::cmakeBuildType() const config = CMakeConfigItem::itemsFromArguments(initialCMakeArguments()); } - if (!config.isEmpty()) { + if (!config.isEmpty() && !isMultiConfig()) { cmakeBuildType = QString::fromUtf8(CMakeConfigItem::valueOf("CMAKE_BUILD_TYPE", config)); const_cast(this) ->setCMakeBuildType(cmakeBuildType); @@ -1368,7 +1369,12 @@ void CMakeBuildConfiguration::setCMakeBuildType(const QString &cmakeBuildType, b bool CMakeBuildConfiguration::isMultiConfig() const { - return m_buildSystem->isMultiConfig(); + return m_isMultiConfig; +} + +void CMakeBuildConfiguration::setIsMultiConfig(bool isMultiConfig) +{ + m_isMultiConfig = isMultiConfig; } namespace Internal { diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h index 32ced5031ef..45519c77e3a 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h +++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h @@ -78,6 +78,7 @@ public: void setCMakeBuildType(const QString &cmakeBuildType, bool quiet = false); bool isMultiConfig() const; + void setIsMultiConfig(bool isMultiConfig); signals: void errorOccurred(const QString &message); @@ -115,6 +116,7 @@ private: Internal::CMakeBuildSystem *m_buildSystem = nullptr; QStringList m_extraCMakeArguments; + bool m_isMultiConfig = false; friend class Internal::CMakeBuildSettingsWidget; friend class Internal::CMakeBuildSystem;