CMakePM: Skip default build types for CMakePresets

If a preset has a build directory set, that build directory and build
type should be displayed in the initial configuration dialog.

Change-Id: I884471cb4d482c92ab091a4043d642828318b4d2
Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
This commit is contained in:
Cristian Adam
2022-10-05 20:46:48 +02:00
parent a0f356aed6
commit 213c879882

View File

@@ -40,6 +40,7 @@
#include <projectexplorer/project.h> #include <projectexplorer/project.h>
#include <projectexplorer/projectexplorer.h> #include <projectexplorer/projectexplorer.h>
#include <projectexplorer/projectexplorerconstants.h> #include <projectexplorer/projectexplorerconstants.h>
#include <projectexplorer/session.h>
#include <projectexplorer/target.h> #include <projectexplorer/target.h>
#include <projectexplorer/taskhub.h> #include <projectexplorer/taskhub.h>
@@ -1953,6 +1954,22 @@ CMakeBuildConfigurationFactory::CMakeBuildConfigurationFactory()
FilePath path = forSetup ? Project::projectDirectory(projectPath) : projectPath; FilePath path = forSetup ? Project::projectDirectory(projectPath) : projectPath;
// Skip the default shadow build directories for build types if we have presets
const CMakeConfigItem presetItem = CMakeConfigurationKitAspect::cmakePresetConfigItem(k);
if (!presetItem.isNull()) {
const QString presetName = presetItem.expandedValue(k);
const auto project = qobject_cast<CMakeProject *>(SessionManager::startupProject());
PresetsDetails::ConfigurePreset configurePreset
= Utils::findOrDefault(project->presetsData().configurePresets,
[&presetName] (const PresetsDetails::ConfigurePreset &preset) {
return preset.name == presetName;
});
if (configurePreset.binaryDir)
return result;
}
for (int type = BuildTypeDebug; type != BuildTypeLast; ++type) { for (int type = BuildTypeDebug; type != BuildTypeLast; ++type) {
BuildInfo info = createBuildInfo(BuildType(type)); BuildInfo info = createBuildInfo(BuildType(type));
if (forSetup) { if (forSetup) {