diff --git a/src/plugins/cmakeprojectmanager/fileapidataextractor.cpp b/src/plugins/cmakeprojectmanager/fileapidataextractor.cpp index cabac0b3b98..c4f4810f34f 100644 --- a/src/plugins/cmakeprojectmanager/fileapidataextractor.cpp +++ b/src/plugins/cmakeprojectmanager/fileapidataextractor.cpp @@ -595,9 +595,20 @@ void addTargets(const QHash &cm const FilePath &sourceDir, const FilePath &buildDir) { + QHash targetDetailsHash; + for (const TargetDetails &t : targetDetails) + targetDetailsHash.insert(t.id, &t); + const TargetDetails defaultTargetDetails; + auto getTargetDetails = [&targetDetailsHash, &defaultTargetDetails](const QString &id) + -> const TargetDetails & { + auto it = targetDetailsHash.constFind(id); + if (it != targetDetailsHash.constEnd()) + return *it.value(); + return defaultTargetDetails; + }; + for (const FileApiDetails::Target &t : config.targets) { - const TargetDetails &td = Utils::findOrDefault(targetDetails, - Utils::equal(&TargetDetails::id, t.id)); + const TargetDetails &td = getTargetDetails(t.id); const FilePath dir = directorySourceDir(config, sourceDir, t.directory);