diff --git a/src/plugins/cmakeprojectmanager/builddirmanager.cpp b/src/plugins/cmakeprojectmanager/builddirmanager.cpp index 5c5314b31d2..dae9d01613c 100644 --- a/src/plugins/cmakeprojectmanager/builddirmanager.cpp +++ b/src/plugins/cmakeprojectmanager/builddirmanager.cpp @@ -331,8 +331,7 @@ void BuildDirManager::generateProjectTree(CMakeProjectNode *root) const Utils::FileName projectFile = m_buildConfiguration->target()->project()->projectFilePath(); QList tmp = Utils::filtered(m_futureInterface->future().result(), [projectFile](const FileNode *fn) -> bool { - const Utils::FileName &path = fn->filePath(); - return path != projectFile && !path.toString().startsWith(projectFile.toString() + ".user"); + return !fn->filePath().toString().startsWith(projectFile.toString() + ".user"); }); Utils::sort(tmp, ProjectExplorer::Node::sortByPath); @@ -344,6 +343,19 @@ void BuildDirManager::generateProjectTree(CMakeProjectNode *root) foreach (FileNode *fn, root->recursiveFileNodes()) usedNodes.insert(fn); + // Make sure the top level CMakeLists.txt is always visible: + if (root->fileNodes().isEmpty() + && root->folderNodes().isEmpty() + && root->projectNodes().isEmpty()) { + FileNode *cm = Utils::findOrDefault(allFiles, [&projectFile](const FileNode *fn) { + return fn->filePath() == projectFile; + }); + if (cm) { + root->addFileNodes({ cm }); + usedNodes.insert(cm); + } + } + QList leftOvers = Utils::filtered(allFiles, [&usedNodes](FileNode *fn) { return !usedNodes.contains(fn); });