diff options
-rw-r--r-- | src/plugins/clangtools/clangtool.cpp | 11 | ||||
-rw-r--r-- | src/plugins/qbsprojectmanager/qbsproject.cpp | 14 | ||||
-rw-r--r-- | src/plugins/qmakeprojectmanager/qmakeproject.cpp | 16 |
3 files changed, 33 insertions, 8 deletions
diff --git a/src/plugins/clangtools/clangtool.cpp b/src/plugins/clangtools/clangtool.cpp index 6cc636dd87..bbebc3560f 100644 --- a/src/plugins/clangtools/clangtool.cpp +++ b/src/plugins/clangtools/clangtool.cpp @@ -351,7 +351,16 @@ static FileInfos sortedFileInfos(const QVector<CppTools::ProjectPart::Ptr> &proj } } - Utils::sort(fileInfos, &FileInfo::file); + Utils::sort(fileInfos, [](const FileInfo &fi1, const FileInfo &fi2) { + if (fi1.file == fi2.file) { + // If the same file appears more than once, prefer contexts where the file is + // built as part of an application or library to those where it may not be, + // e.g. because it is just listed as some sort of resource. + return fi1.projectPart->buildTargetType != BuildTargetType::Unknown + && fi2.projectPart->buildTargetType == BuildTargetType::Unknown; + } + return fi1.file < fi2.file; + }); fileInfos.erase(std::unique(fileInfos.begin(), fileInfos.end()), fileInfos.end()); return fileInfos; diff --git a/src/plugins/qbsprojectmanager/qbsproject.cpp b/src/plugins/qbsprojectmanager/qbsproject.cpp index 4e46e43c68..db8404f178 100644 --- a/src/plugins/qbsprojectmanager/qbsproject.cpp +++ b/src/plugins/qbsprojectmanager/qbsproject.cpp @@ -916,9 +916,17 @@ static RawProjectParts generateProjectParts( location.value("line").toInt(), location.value("column").toInt()); rpp.setBuildSystemTarget(QbsProductNode::getBuildKey(prd)); - rpp.setBuildTargetType(prd.value("is-runnable").toBool() - ? BuildTargetType::Executable - : BuildTargetType::Library); + if (prd.value("is-runnable").toBool()) { + rpp.setBuildTargetType(BuildTargetType::Executable); + } else { + const QJsonArray pType = prd.value("type").toArray(); + if (pType.contains("staticlibrary") || pType.contains("dynamiclibrary") + || pType.contains("loadablemodule")) { + rpp.setBuildTargetType(BuildTargetType::Library); + } else { + rpp.setBuildTargetType(BuildTargetType::Unknown); + } + } rpp.setSelectedForBuilding(grp.value("is-enabled").toBool()); QHash<QString, QJsonObject> filePathToSourceArtifact; diff --git a/src/plugins/qmakeprojectmanager/qmakeproject.cpp b/src/plugins/qmakeprojectmanager/qmakeproject.cpp index 90eeeb8f9b..8afb8c33b5 100644 --- a/src/plugins/qmakeprojectmanager/qmakeproject.cpp +++ b/src/plugins/qmakeprojectmanager/qmakeproject.cpp @@ -290,10 +290,18 @@ void QmakeBuildSystem::updateCppCodeModel() rpp.setDisplayName(pro->displayName()); rpp.setProjectFileLocation(pro->filePath().toString()); rpp.setBuildSystemTarget(pro->filePath().toString()); - const bool isExecutable = pro->projectType() == ProjectType::ApplicationTemplate; - rpp.setBuildTargetType(isExecutable ? ProjectExplorer::BuildTargetType::Executable - : ProjectExplorer::BuildTargetType::Library); - + switch (pro->projectType()) { + case ProjectType::ApplicationTemplate: + rpp.setBuildTargetType(BuildTargetType::Executable); + break; + case ProjectType::SharedLibraryTemplate: + case ProjectType::StaticLibraryTemplate: + rpp.setBuildTargetType(BuildTargetType::Library); + break; + default: + rpp.setBuildTargetType(BuildTargetType::Unknown); + break; + } rpp.setFlagsForCxx({kitInfo.cxxToolChain, pro->variableValue(Variable::CppFlags)}); rpp.setFlagsForC({kitInfo.cToolChain, pro->variableValue(Variable::CFlags)}); rpp.setMacros(ProjectExplorer::Macro::toMacros(pro->cxxDefines())); |