diff --git a/src/plugins/projectexplorer/buildtargetinfo.h b/src/plugins/projectexplorer/buildtargetinfo.h index 0aa5011dda1..38cadea9912 100644 --- a/src/plugins/projectexplorer/buildtargetinfo.h +++ b/src/plugins/projectexplorer/buildtargetinfo.h @@ -41,6 +41,7 @@ class PROJECTEXPLORER_EXPORT BuildTargetInfo public: QString buildKey; // Used to identify this BuildTargetInfo object in its list. QString displayName; + QString displayNameUniquifier; Utils::FileName targetFilePath; Utils::FileName projectFilePath; diff --git a/src/plugins/projectexplorer/runconfiguration.cpp b/src/plugins/projectexplorer/runconfiguration.cpp index 475eeb9dca3..2c8e2384955 100644 --- a/src/plugins/projectexplorer/runconfiguration.cpp +++ b/src/plugins/projectexplorer/runconfiguration.cpp @@ -49,6 +49,7 @@ #include #include +#include #include #include #include @@ -466,6 +467,7 @@ RunConfigurationFactory::availableCreators(Target *parent) const rci.id = m_runConfigBaseId; rci.buildKey = ti.buildKey; rci.displayName = displayName; + rci.displayNameUniquifier = ti.displayNameUniquifier; rci.creationMode = ti.isQtcRunnable || !hasAnyQtcRunnable ? RunConfigurationCreationInfo::AlwaysCreate : RunConfigurationCreationInfo::ManualCreationOnly; @@ -540,7 +542,7 @@ RunConfiguration *RunConfigurationCreationInfo::create(Target *target) const rc->m_buildKey = buildKey; rc->doAdditionalSetup(*this); - rc->setDefaultDisplayName(displayName); + rc->setDisplayName(displayName); return rc; } @@ -575,6 +577,15 @@ const QList RunConfigurationFactory::creatorsForTa if (factory->canHandle(parent)) items.append(factory->availableCreators(parent)); } + QHash> itemsPerDisplayName; + for (RunConfigurationCreationInfo &item : items) + itemsPerDisplayName[item.displayName] << &item; + for (auto it = itemsPerDisplayName.cbegin(); it != itemsPerDisplayName.cend(); ++it) { + if (it.value().size() == 1) + continue; + for (RunConfigurationCreationInfo * const rci : it.value()) + rci->displayName += rci->displayNameUniquifier; + } return items; } diff --git a/src/plugins/projectexplorer/runconfiguration.h b/src/plugins/projectexplorer/runconfiguration.h index c454f7e0ade..c0443ae07e2 100644 --- a/src/plugins/projectexplorer/runconfiguration.h +++ b/src/plugins/projectexplorer/runconfiguration.h @@ -234,6 +234,7 @@ public: Core::Id id; QString buildKey; QString displayName; + QString displayNameUniquifier; CreationMode creationMode = AlwaysCreate; bool useTerminal = false; }; diff --git a/src/plugins/qmakeprojectmanager/qmakeproject.cpp b/src/plugins/qmakeprojectmanager/qmakeproject.cpp index 894163ab47c..6e92cf45d2c 100644 --- a/src/plugins/qmakeprojectmanager/qmakeproject.cpp +++ b/src/plugins/qmakeprojectmanager/qmakeproject.cpp @@ -1029,6 +1029,12 @@ void QmakeProject::updateBuildSystemData() bti.projectFilePath = node->filePath(); bti.workingDirectory = FileName::fromString(workingDir); bti.displayName = bti.projectFilePath.toFileInfo().completeBaseName(); + const FileName relativePathInProject + = bti.projectFilePath.relativeChildPath(projectDirectory()); + if (!relativePathInProject.isEmpty()) { + bti.displayNameUniquifier = QString::fromLatin1(" (%1)") + .arg(relativePathInProject.toUserOutput()); + } bti.buildKey = bti.projectFilePath.toString(); bti.isQtcRunnable = config.contains("qtc_runnable");