diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp index 8bed2fb1bd5..2ef96068916 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp +++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp @@ -183,6 +183,7 @@ CMakeBuildSettingsWidget::CMakeBuildSettingsWidget(CMakeBuildConfiguration *bc) m_configTextFilterModel(new CategorySortFilterModel(this)) { QTC_CHECK(bc); + auto buildSystem = static_cast(bc->buildSystem()); auto vbox = new QVBoxLayout(this); vbox->setContentsMargins(0, 0, 0, 0); @@ -200,8 +201,8 @@ CMakeBuildSettingsWidget::CMakeBuildSettingsWidget(CMakeBuildConfiguration *bc) }); auto buildTypeAspect = bc->aspect(); - connect(buildTypeAspect, &BaseAspect::changed, this, [this, buildTypeAspect]() { - if (!m_buildConfiguration->isMultiConfig()) { + connect(buildTypeAspect, &BaseAspect::changed, this, [this, buildSystem, buildTypeAspect] { + if (!buildSystem->isMultiConfig()) { CMakeConfig config; config << CMakeConfigItem("CMAKE_BUILD_TYPE", buildTypeAspect->value().toUtf8()); @@ -355,8 +356,6 @@ CMakeBuildSettingsWidget::CMakeBuildSettingsWidget(CMakeBuildConfiguration *bc) }.setSpacing(0) }.attachTo(details, false); - auto buildSystem = static_cast(bc->buildSystem()); - updateAdvancedCheckBox(); setError(buildSystem->error()); setWarning(buildSystem->warning()); @@ -1196,7 +1195,7 @@ CMakeBuildConfiguration::CMakeBuildConfiguration(Target *target, Id id) const Kit *k = target->kit(); CommandLine cmd = defaultInitialCMakeCommand(k, info.typeName); - setIsMultiConfig(CMakeGeneratorKitAspect::isMultiConfigGenerator(k)); + m_buildSystem->setIsMultiConfig(CMakeGeneratorKitAspect::isMultiConfigGenerator(k)); // Android magic: if (DeviceTypeKitAspect::deviceTypeId(k) == Android::Constants::ANDROID_DEVICE_TYPE) { @@ -1286,8 +1285,6 @@ CMakeBuildConfiguration::CMakeBuildConfiguration(Target *target, Id id) setInitialCMakeArguments(cmd.splitArguments()); setCMakeBuildType(info.typeName); }); - - setIsMultiConfig(CMakeGeneratorKitAspect::isMultiConfigGenerator(target->kit())); } CMakeBuildConfiguration::~CMakeBuildConfiguration() @@ -1660,7 +1657,7 @@ QString CMakeBuildConfiguration::cmakeBuildType() const ->setCMakeBuildType(QString::fromUtf8(it->value)); }; - if (!isMultiConfig()) + if (!m_buildSystem->isMultiConfig()) setBuildTypeFromConfig(configurationChanges()); QString cmakeBuildType = aspect()->value(); @@ -1682,7 +1679,7 @@ QString CMakeBuildConfiguration::cmakeBuildType() const config = initialCMakeConfiguration(); } - if (!config.isEmpty() && !isMultiConfig()) + if (!config.isEmpty() && !m_buildSystem->isMultiConfig()) setBuildTypeFromConfig(config); return cmakeBuildType; @@ -1698,16 +1695,6 @@ void CMakeBuildConfiguration::setCMakeBuildType(const QString &cmakeBuildType, b } } -bool CMakeBuildConfiguration::isMultiConfig() const -{ - 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 e1592de2055..7e9bac08816 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h +++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h @@ -73,9 +73,6 @@ public: QString cmakeBuildType() const; void setCMakeBuildType(const QString &cmakeBuildType, bool quiet = false); - bool isMultiConfig() const; - void setIsMultiConfig(bool isMultiConfig); - QStringList additionalCMakeArguments() const; void setAdditionalCMakeArguments(const QStringList &args); void filterConfigArgumentsFromAdditionalCMakeArguments(); @@ -103,8 +100,6 @@ private: CMakeConfig m_configurationChanges; Internal::CMakeBuildSystem *m_buildSystem = nullptr; - bool m_isMultiConfig = false; - friend class Internal::CMakeBuildSettingsWidget; friend class Internal::CMakeBuildSystem; }; diff --git a/src/plugins/cmakeprojectmanager/cmakebuildstep.cpp b/src/plugins/cmakeprojectmanager/cmakebuildstep.cpp index cd537172c8e..afda21acb36 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildstep.cpp +++ b/src/plugins/cmakeprojectmanager/cmakebuildstep.cpp @@ -406,7 +406,7 @@ CommandLine CMakeBuildStep::cmakeCommand() const auto bs = qobject_cast(buildSystem()); auto bc = qobject_cast(buildConfiguration()); - if (bc && bs && bs->isMultiConfig()) { + if (bc && bs && bs->isMultiConfigReader()) { cmd.addArg("--config"); cmd.addArg(bc->cmakeBuildType()); } diff --git a/src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp b/src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp index 51593d9f84f..3ed4d1dbf94 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp +++ b/src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp @@ -200,6 +200,8 @@ CMakeBuildSystem::CMakeBuildSystem(CMakeBuildConfiguration *bc) connect(&m_reader, &FileApiReader::dirty, this, &CMakeBuildSystem::becameDirty); wireUpConnections(); + + m_isMultiConfig = CMakeGeneratorKitAspect::isMultiConfigGenerator(bc->kit()); } CMakeBuildSystem::~CMakeBuildSystem() @@ -1060,6 +1062,16 @@ bool CMakeBuildSystem::filteredOutTarget(const CMakeBuildTarget &target) } bool CMakeBuildSystem::isMultiConfig() const +{ + return m_isMultiConfig; +} + +void CMakeBuildSystem::setIsMultiConfig(bool isMultiConfig) +{ + m_isMultiConfig = isMultiConfig; +} + +bool CMakeBuildSystem::isMultiConfigReader() const { return m_reader.isMultiConfig(); } diff --git a/src/plugins/cmakeprojectmanager/cmakebuildsystem.h b/src/plugins/cmakeprojectmanager/cmakebuildsystem.h index 2972259ff2d..0b175e14973 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildsystem.h +++ b/src/plugins/cmakeprojectmanager/cmakebuildsystem.h @@ -104,6 +104,9 @@ public: static bool filteredOutTarget(const CMakeBuildTarget &target); bool isMultiConfig() const; + void setIsMultiConfig(bool isMultiConfig); + + bool isMultiConfigReader() const; bool usesAllCapsTargets() const; CMakeProject *project() const; @@ -184,6 +187,8 @@ private: bool m_waitingForParse = false; bool m_combinedScanAndParseResult = false; + bool m_isMultiConfig = false; + ParseGuard m_currentGuard; CppEditor::CppProjectUpdater *m_cppCodeModelUpdater = nullptr; diff --git a/src/plugins/cmakeprojectmanager/cmakeproject.cpp b/src/plugins/cmakeprojectmanager/cmakeproject.cpp index aa78dd534e7..0d2fb14be55 100644 --- a/src/plugins/cmakeprojectmanager/cmakeproject.cpp +++ b/src/plugins/cmakeprojectmanager/cmakeproject.cpp @@ -136,7 +136,7 @@ MakeInstallCommand CMakeProject::makeInstallCommand(const Target *target, if (bs && bc) { if (bs->usesAllCapsTargets()) installTarget = "INSTALL"; - if (bs->isMultiConfig()) + if (bs->isMultiConfigReader()) config << "--config" << bc->cmakeBuildType(); }