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 <alessandro.portale@qt.io>
This commit is contained in:
Cristian Adam
2021-03-26 16:24:03 +01:00
parent 254365b7d6
commit a862c7b354
2 changed files with 10 additions and 2 deletions

View File

@@ -903,6 +903,7 @@ CMakeBuildConfiguration::CMakeBuildConfiguration(Target *target, Id id)
const Kit *k = target->kit(); const Kit *k = target->kit();
QStringList initialArgs = defaultInitialCMakeArguments(k, info.typeName); QStringList initialArgs = defaultInitialCMakeArguments(k, info.typeName);
setIsMultiConfig(CMakeGeneratorKitAspect::isMultiConfigGenerator(k));
// Android magic: // Android magic:
if (DeviceTypeKitAspect::deviceTypeId(k) == Android::Constants::ANDROID_DEVICE_TYPE) { if (DeviceTypeKitAspect::deviceTypeId(k) == Android::Constants::ANDROID_DEVICE_TYPE) {
@@ -1347,7 +1348,7 @@ QString CMakeBuildConfiguration::cmakeBuildType() const
config = CMakeConfigItem::itemsFromArguments(initialCMakeArguments()); config = CMakeConfigItem::itemsFromArguments(initialCMakeArguments());
} }
if (!config.isEmpty()) { if (!config.isEmpty() && !isMultiConfig()) {
cmakeBuildType = QString::fromUtf8(CMakeConfigItem::valueOf("CMAKE_BUILD_TYPE", config)); cmakeBuildType = QString::fromUtf8(CMakeConfigItem::valueOf("CMAKE_BUILD_TYPE", config));
const_cast<CMakeBuildConfiguration*>(this) const_cast<CMakeBuildConfiguration*>(this)
->setCMakeBuildType(cmakeBuildType); ->setCMakeBuildType(cmakeBuildType);
@@ -1368,7 +1369,12 @@ void CMakeBuildConfiguration::setCMakeBuildType(const QString &cmakeBuildType, b
bool CMakeBuildConfiguration::isMultiConfig() const bool CMakeBuildConfiguration::isMultiConfig() const
{ {
return m_buildSystem->isMultiConfig(); return m_isMultiConfig;
}
void CMakeBuildConfiguration::setIsMultiConfig(bool isMultiConfig)
{
m_isMultiConfig = isMultiConfig;
} }
namespace Internal { namespace Internal {

View File

@@ -78,6 +78,7 @@ public:
void setCMakeBuildType(const QString &cmakeBuildType, bool quiet = false); void setCMakeBuildType(const QString &cmakeBuildType, bool quiet = false);
bool isMultiConfig() const; bool isMultiConfig() const;
void setIsMultiConfig(bool isMultiConfig);
signals: signals:
void errorOccurred(const QString &message); void errorOccurred(const QString &message);
@@ -115,6 +116,7 @@ private:
Internal::CMakeBuildSystem *m_buildSystem = nullptr; Internal::CMakeBuildSystem *m_buildSystem = nullptr;
QStringList m_extraCMakeArguments; QStringList m_extraCMakeArguments;
bool m_isMultiConfig = false;
friend class Internal::CMakeBuildSettingsWidget; friend class Internal::CMakeBuildSettingsWidget;
friend class Internal::CMakeBuildSystem; friend class Internal::CMakeBuildSystem;