diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp index 9afa4b8e21b..91de7766c7d 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp +++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp @@ -40,6 +40,7 @@ #include #include #include +#include #include #include @@ -1953,6 +1954,22 @@ CMakeBuildConfigurationFactory::CMakeBuildConfigurationFactory() 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(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) { BuildInfo info = createBuildInfo(BuildType(type)); if (forSetup) {