CMake: Simplify buildkey generation

Just use the target name as buildkey. This is unique in cmake projects, so
there is no need to mangle the source directory into the whole thing.

This is a problem since different readers might report different source
directories. That will then result in RunConfigurations getting duplicated
after switching the reader types.

Task-number: QTCREATORBUG-22129
Change-Id: I849ab68f221d732341e98faa9a4e757d3a495b2a
Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
Tobias Hunger
2019-06-20 14:03:40 +02:00
parent add60c0148
commit 5bcd59c94f
8 changed files with 7 additions and 14 deletions

View File

@@ -206,7 +206,7 @@ const QList<BuildTargetInfo> CMakeBuildConfiguration::appTargets() const
bti.targetFilePath = ct.executable; bti.targetFilePath = ct.executable;
bti.projectFilePath = ct.sourceDirectory.stringAppended("/"); bti.projectFilePath = ct.sourceDirectory.stringAppended("/");
bti.workingDirectory = ct.workingDirectory; bti.workingDirectory = ct.workingDirectory;
bti.buildKey = CMakeTargetNode::generateId(ct.sourceDirectory, ct.title); bti.buildKey = ct.title;
appTargetList.append(bti); appTargetList.append(bti);
} }
} }

View File

@@ -361,7 +361,7 @@ void CMakeProject::updateProjectData(CMakeBuildConfiguration *bc)
setDisplayName(rootProjectNode()->displayName()); setDisplayName(rootProjectNode()->displayName());
for (const CMakeBuildTarget &bt : bc->buildTargets()) { for (const CMakeBuildTarget &bt : bc->buildTargets()) {
const QString buildKey = CMakeTargetNode::generateId(bt.sourceDirectory, bt.title); const QString buildKey = bt.title;
if (ProjectNode *node = findNodeForBuildKey(buildKey)) { if (ProjectNode *node = findNodeForBuildKey(buildKey)) {
if (auto targetNode = dynamic_cast<CMakeTargetNode *>(node)) if (auto targetNode = dynamic_cast<CMakeTargetNode *>(node))
targetNode->setConfig(patchedConfig); targetNode->setConfig(patchedConfig);

View File

@@ -177,11 +177,6 @@ CMakeTargetNode::CMakeTargetNode(const Utils::FilePath &directory, const QString
setIsProduct(); setIsProduct();
} }
QString CMakeTargetNode::generateId(const Utils::FilePath &directory, const QString &target)
{
return directory.toString() + "///::///" + target;
}
QString CMakeTargetNode::tooltip() const QString CMakeTargetNode::tooltip() const
{ {
return m_tooltip; return m_tooltip;
@@ -189,7 +184,7 @@ QString CMakeTargetNode::tooltip() const
QString CMakeTargetNode::buildKey() const QString CMakeTargetNode::buildKey() const
{ {
return generateId(filePath(), m_target); return m_target;
} }
Utils::FilePath CMakeTargetNode::buildDirectory() const Utils::FilePath CMakeTargetNode::buildDirectory() const

View File

@@ -63,8 +63,6 @@ class CMakeTargetNode : public ProjectExplorer::ProjectNode
public: public:
CMakeTargetNode(const Utils::FilePath &directory, const QString &target); CMakeTargetNode(const Utils::FilePath &directory, const QString &target);
static QString generateId(const Utils::FilePath &directory, const QString &target);
void setTargetInformation(const QList<Utils::FilePath> &artifacts, const QString &type); void setTargetInformation(const QList<Utils::FilePath> &artifacts, const QString &type);
QString tooltip() const final; QString tooltip() const final;

View File

@@ -237,7 +237,7 @@ CppTools::RawProjectParts generateRawProjectParts(const PreprocessedData &input,
++counter; ++counter;
CppTools::RawProjectPart rpp; CppTools::RawProjectPart rpp;
rpp.setProjectFileLocation(t.sourceDir.pathAppended("CMakeLists.txt").toString()); rpp.setProjectFileLocation(t.sourceDir.pathAppended("CMakeLists.txt").toString());
rpp.setBuildSystemTarget(CMakeTargetNode::generateId(t.sourceDir, t.name)); rpp.setBuildSystemTarget(t.name);
rpp.setDisplayName(t.id); rpp.setDisplayName(t.id);
rpp.setMacros(transform<QVector>(ci.defines, &DefineInfo::define)); rpp.setMacros(transform<QVector>(ci.defines, &DefineInfo::define));
rpp.setHeaderPaths(transform<QVector>(ci.includes, &IncludeInfo::path)); rpp.setHeaderPaths(transform<QVector>(ci.includes, &IncludeInfo::path));

View File

@@ -160,7 +160,7 @@ CMakeTargetNode *createTargetNode(const QHash<Utils::FilePath, ProjectNode *> &c
ProjectNode *cmln = cmakeListsNodes.value(dir); ProjectNode *cmln = cmakeListsNodes.value(dir);
QTC_ASSERT(cmln, return nullptr); QTC_ASSERT(cmln, return nullptr);
QString targetId = CMakeTargetNode::generateId(dir, displayName); QString targetId = displayName;
CMakeTargetNode *tn = static_cast<CMakeTargetNode *>( CMakeTargetNode *tn = static_cast<CMakeTargetNode *>(
cmln->findNode([&targetId](const Node *n) { return n->buildKey() == targetId; })); cmln->findNode([&targetId](const Node *n) { return n->buildKey() == targetId; }));

View File

@@ -311,7 +311,7 @@ CppTools::RawProjectParts ServerModeReader::createRawProjectParts(QString &error
CppTools::RawProjectPart rpp; CppTools::RawProjectPart rpp;
rpp.setProjectFileLocation(fg->target->sourceDirectory.toString() + "/CMakeLists.txt"); rpp.setProjectFileLocation(fg->target->sourceDirectory.toString() + "/CMakeLists.txt");
rpp.setBuildSystemTarget(CMakeTargetNode::generateId(fg->target->sourceDirectory, fg->target->name)); rpp.setBuildSystemTarget(fg->target->name);
rpp.setDisplayName(fg->target->name + QString::number(counter)); rpp.setDisplayName(fg->target->name + QString::number(counter));
rpp.setMacros(fg->macros); rpp.setMacros(fg->macros);
rpp.setIncludePaths(includes); rpp.setIncludePaths(includes);

View File

@@ -349,7 +349,7 @@ CppTools::RawProjectParts TeaLeafReader::createRawProjectParts(QString &errorMes
includePaths += m_parameters.workDirectory.toString(); includePaths += m_parameters.workDirectory.toString();
CppTools::RawProjectPart rpp; CppTools::RawProjectPart rpp;
rpp.setProjectFileLocation(cbt.sourceDirectory.toString() + "/CMakeLists.txt"); rpp.setProjectFileLocation(cbt.sourceDirectory.toString() + "/CMakeLists.txt");
rpp.setBuildSystemTarget(CMakeTargetNode::generateId(cbt.sourceDirectory, cbt.title)); rpp.setBuildSystemTarget(cbt.title);
rpp.setIncludePaths(includePaths); rpp.setIncludePaths(includePaths);
CppTools::RawProjectPartFlags cProjectFlags; CppTools::RawProjectPartFlags cProjectFlags;