diff --git a/src/plugins/qmakeprojectmanager/qmakenodetreebuilder.cpp b/src/plugins/qmakeprojectmanager/qmakenodetreebuilder.cpp index dcd92eb54dc..594fb7613ac 100644 --- a/src/plugins/qmakeprojectmanager/qmakenodetreebuilder.cpp +++ b/src/plugins/qmakeprojectmanager/qmakenodetreebuilder.cpp @@ -143,11 +143,21 @@ static void createTree(const QmakePriFile *pri, QmakePriFileNode *node, const Fi // other normal files: const QVector &fileTypes = qmakeStaticData()->fileTypeData; + FileNameList generatedFiles; + const auto proFile = dynamic_cast(pri); for (int i = 0; i < fileTypes.size(); ++i) { FileType type = fileTypes.at(i).type; const QSet &newFilePaths = Utils::filtered(pri->files(type), [&toExclude](const Utils::FileName &fn) { return !Utils::contains(toExclude, [&fn](const Utils::FileName &ex) { return fn.isChildOf(ex); }); }); + if (proFile) { + for (const FileName &fp : newFilePaths) { + for (const ExtraCompiler *ec : proFile->extraCompilers()) { + if (ec->source() == fp) + generatedFiles << ec->targets(); + } + } + } if (!newFilePaths.isEmpty()) { auto vfolder = std::make_unique(pri->filePath().parentDir()); @@ -192,6 +202,22 @@ static void createTree(const QmakePriFile *pri, QmakePriFileNode *node, const Fi } } + if (!generatedFiles.empty()) { + QTC_CHECK(proFile); + const FileName baseDir = generatedFiles.size() == 1 ? generatedFiles.first().parentDir() + : proFile->buildDir(); + auto genFolder = std::make_unique(baseDir); + genFolder->setDisplayName(QCoreApplication::translate("QmakeProjectManager::QmakePriFile", + "Generated Files")); + genFolder->setIsGenerated(true); + for (const FileName &fp : generatedFiles) { + auto fileNode = std::make_unique(fp, FileNode::fileTypeForFileName(fp)); + fileNode->setIsGenerated(true); + genFolder->addNestedNode(std::move(fileNode)); + } + node->addNode(std::move(genFolder)); + } + // Virtual folders: for (QmakePriFile *c : pri->children()) { std::unique_ptr newNode;