Skip to content

Conversation

Copy link
Contributor

Copilot AI commented Jan 29, 2026

This change addresses item #4509

This changes visible behavior

When using CMake Presets with build presets that define a targets field, the CMake: Set Build Target command now displays all available CMake targets from the code model, not just the preset-defined targets.

The following changes are proposed:

  • Remove early return in showTargetSelector() that filtered targets to only preset-defined ones
  • Prepend [Targets In Preset] option to target list when using presets with defined targets
  • Maintain existing folder grouping and selection behavior

Technical Details

Before: Method returned early when useCMakePresets && buildPreset?.targets, showing only:

const targets = [this.targetsInPresetName];
targets.push(...buildPreset.targets);

After: Adds preset option to full target list:

if (this.useCMakePresets && this.buildPreset?.targets) {
    itemsGroup.push({ type: 'named', name: this.targetsInPresetName });
}
// Continue with drv.uniqueTargets...

Users can now select from all 800+ targets in their project while retaining the ability to build preset-defined targets via [Targets In Preset].

Other Notes/Information

Files modified:

  • src/cmakeProject.ts: 12 lines changed (6 insertions, 7 deletions)
  • CHANGELOG.md: Added bug fix entry under v1.23

Warning

Firewall rules blocked me from connecting to one or more addresses (expand for details)

I tried to connect to the following addresses, but was blocked by firewall rules:

  • 0psvsblobprodwus2145.vsblob.vsassets.io
    • Triggering command: /usr/local/bin/node node /usr/local/bin/npm install (dns block)
  • 2wrvsblobprodwus2180.vsblob.vsassets.io
    • Triggering command: /usr/local/bin/node node /usr/local/bin/yarn install (dns block)
  • 40vvsblobprodwus2135.vsblob.vsassets.io
    • Triggering command: /usr/local/bin/node node /usr/local/bin/yarn install (dns block)
    • Triggering command: /usr/local/bin/node node /usr/local/bin/npm install (dns block)
  • b15vsblobprodwus2164.vsblob.vsassets.io
    • Triggering command: /usr/local/bin/node node /usr/local/bin/yarn install (dns block)
  • b53vsblobprodwus2154.vsblob.vsassets.io
    • Triggering command: /usr/local/bin/node node /usr/local/bin/yarn install (dns block)
  • d94vsblobprodwus2119.vsblob.vsassets.io
    • Triggering command: /usr/local/bin/node node /usr/local/bin/yarn install (dns block)
  • ezcvsblobprodwus2170.vsblob.vsassets.io
    • Triggering command: /usr/local/bin/node node /usr/local/bin/npm install (dns block)
  • k4pvsblobprodwus2140.vsblob.vsassets.io
    • Triggering command: /usr/local/bin/node node /usr/local/bin/yarn install (dns block)
    • Triggering command: /usr/local/bin/node node /usr/local/bin/npm install (dns block)
  • n6wvsblobprodwus2123.vsblob.vsassets.io
    • Triggering command: /usr/local/bin/node node /usr/local/bin/yarn install (dns block)
  • p2tvsblobprodwus2189.vsblob.vsassets.io
    • Triggering command: /usr/local/bin/node node /usr/local/bin/yarn install (dns block)
  • v41vsblobprodwus2175.vsblob.vsassets.io
    • Triggering command: /usr/local/bin/node node /usr/local/bin/yarn install (dns block)

If you need me to access, download, or install something from one of these locations, you can either:

Original prompt

This section details on the original issue you should resolve

<issue_title>[Bug] Running command CMake: Set Build Target does not show available targets in build folder</issue_title>
<issue_description>### Brief Issue Summary

Reproduce:

  • CTRL + SHIFT + P
  • Run: CMake: Set Build Target
  • Prompt asks me to select a default target

Expected to see a list of buildable cmake targets to select a build target from.

Bug: Actually just saw one build preset name and [Targets In Preset]

CMake Tools Diagnostics

{
  "os": "win32",
  "vscodeVersion": "1.101.0",
  "cmtVersion": "1.20.53",
  "configurations": [
    {
      "folder": "d:\\workspace\\mw2",
      "cmakeVersion": "4.0.2",
      "configured": true,
      "generator": "Ninja",
      "usesPresets": true,
      "compilers": {
        "C": "C:/Program Files (x86)/Microsoft Visual Studio/2019/Professional/VC/Tools/MSVC/14.29.30133/bin/Hostx64/x64/cl.exe",
        "CXX": "C:/Program Files (x86)/Microsoft Visual Studio/2019/Professional/VC/Tools/MSVC/14.29.30133/bin/Hostx64/x64/cl.exe"
      }
    }
  ],
  "cpptoolsIntegration": {
    "isReady": true,
    "hasCodeModel": true,
    "activeBuildType": "RelWithDebInfo",
    "buildTypesSeen": [
      "RelWithDebInfo"
    ],
    "requests": [],
    "responses": [],
    "partialMatches": [],
    "targetCount": 810,
    "executablesCount": 188,
    "librariesCount": 615,
    "targets": []
  },
  "settings": [
    {
      "communicationMode": "automatic",
      "useCMakePresets": "auto",
      "configureOnOpen": true
    }
  ]
}

Debug Log

[extension] [6976] cmake.setDefaultTarget started
[extension] [6976] cmake.setDefaultTarget finished (returned undefined)
[cache] Reading CMake cache file D:/workspace/mw2/buildninja/CMakeCache.txt
[cache] Parsing CMake cache string
[cache] Reading CMake cache file D:/workspace/mw2/buildninja/CMakeCache.txt
[cache] Parsing CMake cache string

Additional Information

The cmake.loggingLevel debug output is when I select [Targets In Preset].

Other features (like selecting debug or launch targets) correctly display all available cmake targets so that I can choose from them. But for some reason CMake: Set Build Target does not show all targets (and not even all my build presets, but thats unrelated to this case)

My current workaround is: Click the CMake button on the left (showing PROJECT STATUS, PROJECT OUTLINE, etc.)
Then I go to PROJECT OUTLINE -> Search my target I want to build -> Right click -> Set as Build Target. Then it correctly sets the build target for the cmake extension (showing that it works to just set build targets that have no preset, its just not possible via the CMake: Set Build Target command.</issue_description>

<agent_instructions>ou are Copilot coding agent acting as a senior maintainer/contributor for the VS Code extension repository microsoft/vscode-cmake-tools.
You are deeply familiar with CMake, CMake Presets, CTest, kit/toolchain selection, VS Code extension APIs, and the architecture of this repo (TypeScript-heavy).
Your job is to resolve the GitHub issue provided below safely and in a maintainable way, matching existing patterns and UX.

SOURCE OF TRUTH

NON-NEGOTIABLE PROCESS

  1. Triage & understanding (issue-first)
  • Read the entire issue thread.
  • Extract and write down:
    • expected behavior
    • actual behavior
    • repro steps (or minimal repro you infer)
    • affected OS/toolchains/generators/presets
    • whether it is a regression and from which version/commit (if indicated)
  • Identify which CMake Tools feature area is involved (configure/build/test/debug, presets, kits, status bar, tasks, command palette, IntelliSense).
  1. Orient yourself in the repo (implementation map)
  • Identify the relevant user-facing workflows impacted (configure/build/test/debug, presets, kits, status bar, tasks, command palette).
  • Locate the existing implementation areas (commands, configuration/presets handling, test integration, UI, telemetry/logging).
  • Identify existing tests and how they are run in CI; prefer extending existing suites over inventing a new harness.
  1. Changelog discipline (required)
  • Find the project’s changelog / release notes mechanism (e.g., CHANGELOG.md, docs/changelog, “Unreleased” section, or a dedicated changes/ folder).
  • Add exactly ONE appropriate entry for this change, in the correct section and format used by the repo.
  • The entry must describe user-visible behavior (not internal refactors).
  • If the change is not user-visible, explicitly justify that and still add a brief “Internal” entry if the repo’s convention supports it.
  • Ensure the ...

💬 We'd love your input! Share your thoughts on Copilot coding agent in our 2 minute survey.

…h presets

When using CMake Presets with build presets that define a targets field,
the showTargetSelector() method was returning early and only showing
preset-defined targets instead of all available CMake targets.

This fix removes the early return and instead adds the [Targets In Preset]
option to the beginning of the full target list when appropriate. Users can
now see and select from all available CMake targets, while still having the
option to use [Targets In Preset] to build the preset-defined targets.

Fixes #4509

Co-authored-by: hanniavalera <90047725+hanniavalera@users.noreply.github.com>
Copilot AI changed the title [WIP] Fix bug with CMake build target selection Jan 29, 2026
Copilot AI requested a review from hanniavalera January 29, 2026 20:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

2 participants