diff --git a/src/plugins/cmakeprojectmanager/fileapidataextractor.cpp b/src/plugins/cmakeprojectmanager/fileapidataextractor.cpp index 79891a8b5b0..568b9510bd3 100644 --- a/src/plugins/cmakeprojectmanager/fileapidataextractor.cpp +++ b/src/plugins/cmakeprojectmanager/fileapidataextractor.cpp @@ -312,11 +312,10 @@ RawProjectParts generateRawProjectParts(const PreprocessedData &input, const FilePath &sourceDirectory) { RawProjectParts rpps; + const QDir sourceDir(sourceDirectory.toString()); int counter = 0; for (const TargetDetails &t : input.targetDetails) { - QDir sourceDir(sourceDirectory.toString()); - bool needPostfix = t.compileGroups.size() > 1; int count = 1; for (const CompileInfo &ci : t.compileGroups) { @@ -359,14 +358,15 @@ RawProjectParts generateRawProjectParts(const PreprocessedData &input, cxxProjectFlags.commandLineFlags = cProjectFlags.commandLineFlags; rpp.setFlagsForCxx(cxxProjectFlags); - FilePath precompiled_header - = FilePath::fromString(findOrDefault(t.sources, [&ending](const SourceInfo &si) { - return si.path.endsWith(ending); - }).path); + FilePath precompiled_header = FilePath::fromString( + findOrDefault(t.sources, [&ending](const SourceInfo &si) { + return si.path.endsWith(ending); + }).path); rpp.setFiles(transform(ci.sources, [&t, &sourceDir](const int si) { return sourceDir.absoluteFilePath(t.sources[static_cast(si)].path); })); + if (!precompiled_header.isEmpty()) { if (precompiled_header.toFileInfo().isRelative()) { const FilePath parentDir = FilePath::fromString(sourceDir.absolutePath()); @@ -381,6 +381,22 @@ RawProjectParts generateRawProjectParts(const PreprocessedData &input, rpps.append(rpp); ++count; } + + // Check sources for more files and associate them with the current target + const QStringList extraSources = Utils::transform( + Utils::filtered(t.sources, [](const SourceInfo &si) { return si.compileGroup == -1; }), + [&sourceDir](const SourceInfo &si) { return sourceDir.absoluteFilePath(si.path); }); + if (!extraSources.isEmpty()) { + RawProjectPart rpp; + rpp.setProjectFileLocation(t.sourceDir.pathAppended("CMakeLists.txt").toString()); + rpp.setBuildSystemTarget(t.name); + rpp.setDisplayName(t.id + "_extra"); + + rpp.setFiles(extraSources); + + // This is all the information we have :-/ + rpps.append(rpp); + } } return rpps;