diff --git a/src/plugins/cmakeprojectmanager/cmakebuildstep.cpp b/src/plugins/cmakeprojectmanager/cmakebuildstep.cpp index d87a538f98b..4bc51dd42ec 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildstep.cpp +++ b/src/plugins/cmakeprojectmanager/cmakebuildstep.cpp @@ -267,7 +267,7 @@ void CMakeBuildStep::run(QFutureInterface &fi) m_runTrigger = connect(bc, &CMakeBuildConfiguration::dataAvailable, this, [this, &fi]() { runImpl(fi); }); m_errorTrigger = connect(bc, &CMakeBuildConfiguration::errorOccured, - this, [this, &fi]() { reportRunResult(fi, false); }); + this, [this, &fi](const QString& em) { handleCMakeError(fi, em); }); } else { runImpl(fi); } @@ -276,10 +276,21 @@ void CMakeBuildStep::run(QFutureInterface &fi) void CMakeBuildStep::runImpl(QFutureInterface &fi) { // Do the actual build: + disconnectTriggers(); + AbstractProcessStep::run(fi); +} + +void CMakeBuildStep::handleCMakeError(QFutureInterface &fi, const QString& errorMessage) +{ + disconnectTriggers(); + AbstractProcessStep::stdError(tr("Error parsing CMake: %1\n").arg(errorMessage)); + reportRunResult(fi, false); +} + +void CMakeBuildStep::disconnectTriggers() +{ disconnect(m_runTrigger); disconnect(m_errorTrigger); - - AbstractProcessStep::run(fi); } BuildStepConfigWidget *CMakeBuildStep::createConfigWidget() diff --git a/src/plugins/cmakeprojectmanager/cmakebuildstep.h b/src/plugins/cmakeprojectmanager/cmakebuildstep.h index 70d89c87830..08cee9a01cb 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildstep.h +++ b/src/plugins/cmakeprojectmanager/cmakebuildstep.h @@ -104,6 +104,8 @@ private: void ctor(ProjectExplorer::BuildStepList *bsl); void runImpl(QFutureInterface &fi); + void handleCMakeError(QFutureInterface &fi, const QString& errorMessage); + void disconnectTriggers(); void handleBuildTargetChanges(); CMakeRunConfiguration *targetsActiveRunConfiguration() const;