diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp index 1dcf14f3970..6b396a2aadb 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp +++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp @@ -111,7 +111,7 @@ CMakeBuildConfiguration::CMakeBuildConfiguration(Target *target, Utils::Id id) if (oldDir.isEmpty()) return newDir; - if (QDir(oldDir).exists("CMakeCache.txt")) { + if (QDir(oldDir).exists("CMakeCache.txt") && !QDir(newDir).exists("CMakeCache.txt")) { if (QMessageBox::information(nullptr, tr("Changing Build Directory"), tr("Change the build directory and start with a " diff --git a/src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp b/src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp index c890f3f4227..2f332dc7e9a 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp +++ b/src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp @@ -766,14 +766,23 @@ void CMakeBuildSystem::wireUpConnections() setParametersAndRequestParse(BuildDirParameters(cmakeBuildConfiguration()), CMakeBuildSystem::REPARSE_FORCE_CMAKE_RUN); }); - connect(cmakeBuildConfiguration(), &CMakeBuildConfiguration::buildDirectoryChanged, this, [this]() { - // The build directory of our BC has changed: - // Run with initial arguments! - qCDebug(cmakeBuildSystemLog) << "Requesting parse due to build directory change"; - setParametersAndRequestParse(BuildDirParameters(cmakeBuildConfiguration()), - CMakeBuildSystem::REPARSE_FORCE_INITIAL_CONFIGURATION - | CMakeBuildSystem::REPARSE_FORCE_CMAKE_RUN); - }); + connect(cmakeBuildConfiguration(), + &CMakeBuildConfiguration::buildDirectoryChanged, + this, + [this]() { + // The build directory of our BC has changed: + // Does the directory contain a CMakeCache ? Existing build, just parse + // No CMakeCache? Run with initial arguments! + qCDebug(cmakeBuildSystemLog) << "Requesting parse due to build directory change"; + const BuildDirParameters parameters(cmakeBuildConfiguration()); + const bool hasCMakeCache = QFile::exists( + (parameters.buildDirectory / "CMakeCache.txt").toString()); + const auto options = ReparseParameters( + hasCMakeCache + ? REPARSE_DEFAULT + : (REPARSE_FORCE_INITIAL_CONFIGURATION | REPARSE_FORCE_CMAKE_RUN)); + setParametersAndRequestParse(BuildDirParameters(cmakeBuildConfiguration()), options); + }); connect(project(), &Project::projectFileIsDirty, this, [this]() { if (cmakeBuildConfiguration()->isActive() && !isParsing()) {