diff --git a/src/plugins/mesonprojectmanager/mesonprojectparser.cpp b/src/plugins/mesonprojectmanager/mesonprojectparser.cpp index c84b5e4b3d6..528865f3d37 100644 --- a/src/plugins/mesonprojectmanager/mesonprojectparser.cpp +++ b/src/plugins/mesonprojectmanager/mesonprojectparser.cpp @@ -183,7 +183,7 @@ QList MesonProjectParser::appsTargets() const if (target.type == Target::Type::executable) { ProjectExplorer::BuildTargetInfo bti; bti.displayName = target.name; - bti.buildKey = Target::fullName(m_srcDir, target); + bti.buildKey = Target::fullName(m_buildDir, target); bti.displayNameUniquifier = bti.buildKey; bti.targetFilePath = Utils::FilePath::fromString(target.fileName.first()); bti.workingDirectory = Utils::FilePath::fromString(target.fileName.first()).absolutePath(); @@ -237,7 +237,7 @@ void MesonProjectParser::update(const QFuture m_rootNode = std::move(parserData->rootNode); m_targetsNames.clear(); for (const Target &target : m_parserResult.targets) { - m_targetsNames.push_back(Target::fullName(m_srcDir, target)); + m_targetsNames.push_back(Target::fullName(m_buildDir, target)); } addMissingTargets(m_targetsNames); m_targetsNames.sort(); @@ -253,7 +253,7 @@ ProjectExplorer::RawProjectPart MesonProjectParser::buildRawPart( { ProjectExplorer::RawProjectPart part; part.setDisplayName(target.name); - part.setBuildSystemTarget(Target::fullName(m_srcDir, target)); + part.setBuildSystemTarget(Target::fullName(m_buildDir, target)); part.setFiles(sources.sources + sources.generatedSources); auto flags = splitArgs(sources.parameters); part.setMacros(flags.macros); diff --git a/src/plugins/mesonprojectmanager/target.h b/src/plugins/mesonprojectmanager/target.h index 1efa3669490..b48c79e7c70 100644 --- a/src/plugins/mesonprojectmanager/target.h +++ b/src/plugins/mesonprojectmanager/target.h @@ -60,15 +60,17 @@ struct Target const std::optional subproject; const SourceGroupList sources; - static inline QString fullName(const Utils::FilePath &srcDir, const Target &target) + static inline QString fullName(const Utils::FilePath &buildDir, const Target &target) { using namespace Utils; - if (FilePath::fromString((target.fileName.first())).isAbsolutePath()) { - const auto fname = target.fileName.first().split('/').last(); - QString definedIn = FilePath::fromString(target.definedIn).absolutePath().toString(); - return definedIn.remove(srcDir.toString()) + '/' + fname; + auto fname = target.fileName.first(); + if (FilePath::fromString(fname).isAbsolutePath()) { + fname.remove(buildDir.toString()); + if (fname.startsWith('/')) + fname.removeFirst(); + return fname; } else { - return target.fileName.first(); + return fname; } }