Commit 4ffb6649 authored by Benjamin Zeller's avatar Benjamin Zeller
Browse files

CMakeProjectManager: Use factories to create runconfig

At the moment RC factories are ignored when creating
runconfigurations or updating them. This patch changes
the behavior so the RCs are first created/removed and
then updated to match the build targets. This way plugins
can provide custom factories and RCs for cmake projects.

Change-Id: I4a7797e7382784e33ecf016e322eab00e20c07e0
Reviewed-by: default avatarDaniel Teske <>
parent 00320f51
......@@ -646,16 +646,14 @@ void CMakeProject::updateRunConfigurations()
// TODO Compare with updateDefaultRunConfigurations();
void CMakeProject::updateRunConfigurations(Target *t)
// create new and remove obsolete RCs using the factories
// *Update* runconfigurations:
QMultiMap<QString, CMakeRunConfiguration*> existingRunConfigurations;
QList<ProjectExplorer::RunConfiguration *> toRemove;
foreach (ProjectExplorer::RunConfiguration *rc, t->runConfigurations()) {
if (CMakeRunConfiguration* cmakeRC = qobject_cast<CMakeRunConfiguration *>(rc))
existingRunConfigurations.insert(cmakeRC->title(), cmakeRC);
QtSupport::CustomExecutableRunConfiguration *ceRC =
qobject_cast<QtSupport::CustomExecutableRunConfiguration *>(rc);
if (ceRC && !ceRC->isConfigured())
toRemove << rc;
foreach (const CMakeBuildTarget &ct, buildTargets()) {
......@@ -671,27 +669,8 @@ void CMakeProject::updateRunConfigurations(Target *t)
} else {
// Does not exist yet
Core::Id id = CMakeRunConfigurationFactory::idFromBuildTarget(ct.title);
CMakeRunConfiguration *rc = new CMakeRunConfiguration(t, id, ct.executable,
ct.workingDirectory, ct.title);
QMultiMap<QString, CMakeRunConfiguration *>::const_iterator it =
for ( ; it != existingRunConfigurations.constEnd(); ++it) {
CMakeRunConfiguration *rc = it.value();
// The executables for those runconfigurations aren't build by the current buildconfiguration
// We just set a disable flag and show that in the display name
// removeRunConfiguration(rc);
foreach (ProjectExplorer::RunConfiguration *rc, toRemove)
if (t->runConfigurations().isEmpty()) {
// Oh no, no run configuration,
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment