CMakePM: When using presets only use presets for candidates

Since the CMake presets is built upon Imports, when loading the presets
it's better to only use the candidates from preset Kits and not any
matching Kit that could handle the build directory.

This makes working with CMake Presets a bit easier.

Task-number: QTCREATORBUG-29535
Change-Id: I895e2e9162763e4cf3af5cdef5c9d5b228211fab
Reviewed-by: Marcus Tillmanns <marcus.tillmanns@qt.io>
This commit is contained in:
Cristian Adam
2024-02-05 13:49:27 +01:00
parent 98acd22734
commit 7454f84901
2 changed files with 23 additions and 13 deletions

View File

@@ -147,20 +147,31 @@ static QString displayPresetName(const QString &presetName)
FilePaths CMakeProjectImporter::importCandidates() FilePaths CMakeProjectImporter::importCandidates()
{ {
FilePaths candidates; FilePaths candidates = presetCandidates();
candidates << scanDirectory(projectFilePath().absolutePath(), "build"); if (candidates.isEmpty()) {
candidates << scanDirectory(projectFilePath().absolutePath(), "build");
const QList<Kit *> kits = KitManager::kits(); const QList<Kit *> kits = KitManager::kits();
for (const Kit *k : kits) { for (const Kit *k : kits) {
FilePath shadowBuildDirectory FilePath shadowBuildDirectory
= CMakeBuildConfiguration::shadowBuildDirectory(projectFilePath(), = CMakeBuildConfiguration::shadowBuildDirectory(projectFilePath(),
k, k,
QString(), QString(),
BuildConfiguration::Unknown); BuildConfiguration::Unknown);
candidates << scanDirectory(shadowBuildDirectory.absolutePath(), QString()); candidates << scanDirectory(shadowBuildDirectory.absolutePath(), QString());
}
} }
const FilePaths finalists = Utils::filteredUnique(candidates);
qCInfo(cmInputLog) << "import candidates:" << finalists;
return finalists;
}
FilePaths CMakeProjectImporter::presetCandidates()
{
FilePaths candidates;
for (const auto &configPreset : m_project->presetsData().configurePresets) { for (const auto &configPreset : m_project->presetsData().configurePresets) {
if (configPreset.hidden.value()) if (configPreset.hidden.value())
continue; continue;
@@ -190,9 +201,7 @@ FilePaths CMakeProjectImporter::importCandidates()
} }
} }
const FilePaths finalists = Utils::filteredUnique(candidates); return candidates;
qCInfo(cmInputLog) << "import candidates:" << finalists;
return finalists;
} }
Target *CMakeProjectImporter::preferredTarget(const QList<Target *> &possibleTargets) Target *CMakeProjectImporter::preferredTarget(const QList<Target *> &possibleTargets)

View File

@@ -25,6 +25,7 @@ public:
Utils::FilePaths importCandidates() final; Utils::FilePaths importCandidates() final;
ProjectExplorer::Target *preferredTarget(const QList<ProjectExplorer::Target *> &possibleTargets) final; ProjectExplorer::Target *preferredTarget(const QList<ProjectExplorer::Target *> &possibleTargets) final;
Utils::FilePaths presetCandidates();
private: private:
QList<void *> examineDirectory(const Utils::FilePath &importPath, QList<void *> examineDirectory(const Utils::FilePath &importPath,
QString *warningMessage) const final; QString *warningMessage) const final;