From 7e6e02eb0852837ba0f2c3aec445916b8403f1c2 Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Tue, 24 Mar 2020 11:01:40 +0100 Subject: [PATCH] CMake: Warn on build directory changes Change-Id: I78c5e850e268f4d7d66e40961bca85ef61be0483 Reviewed-by: Tobias Hunger --- .../cmakebuildconfiguration.cpp | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp index 8221fc1be90..e9202012118 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp +++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp @@ -47,7 +47,9 @@ #include +#include #include +#include using namespace ProjectExplorer; using namespace Utils; @@ -65,12 +67,31 @@ CMakeBuildConfiguration::CMakeBuildConfiguration(Target *target, Core::Id id) m_buildSystem = new CMakeBuildSystem(this); buildDirectoryAspect()->setFileDialogOnly(true); + const auto buildDirAspect = aspect(); + buildDirAspect->setFileDialogOnly(true); + buildDirAspect->setValueAcceptor( + [this](const QString &oldDir, const QString &newDir) -> Utils::optional { + if (oldDir.isEmpty()) + return newDir; + + if (QDir(oldDir).exists("CMakeCache.txt")) { + if (QMessageBox::information(nullptr, + tr("Changing Build Directory"), + tr("Change the build directory and start with a " + "basic CMake configuration?"), + QMessageBox::Ok, + QMessageBox::Cancel) + == QMessageBox::Ok) { + return newDir; + } + } + return Utils::nullopt; + }); appendInitialBuildStep(Constants::CMAKE_BUILD_STEP_ID); appendInitialCleanStep(Constants::CMAKE_BUILD_STEP_ID); setInitializer([this, target](const BuildInfo &info) { - CMakeConfig config; config.append({"CMAKE_BUILD_TYPE", info.typeName.toUtf8()});