microsoft / microsoft/vscode-cmake-tools

[Bug] `UTILITY` targets with source files can interfere with cpptools `includePath` generation when Build Target is `all`

Open
#4,404 5 comments 0 reactions 0 assignees View on GitHub
bug
Dominant language
TypeScript
Stars
1.7k
Forks
546
Avg merge
2d 16h
Merged PRs (30d)
32

Description

### Brief Issue Summary

Some `UTILITY` targets, such as the ones created by `Doxygen.cmake`, have a list of sources attached. If one of these targets happens to be placed at index `[0]` in the list of configurations passed to `CppConfigurationProvider.updateFileGroup()` by `updateConfigurationData()`, then `provideConfigurations()` for those sources will provide incomplete configurations for those sources.

This is because such a `UTILITY` target breaks the assumption articulated in this comment in `getConfiguration()`:

```typescript
return configurations?.values().next().value; // Any value is fine if the target doesn't match
```

### CMake Tools Diagnostics

```shell
// With "all" selected as Build Target:
{
"os": "linux",
"vscodeVersion": "1.99.2",
"cmtVersion": "1.13.0",
"configurations": [
{
"folder": "/home/malsyned/work/preferred/fsg/preferred-fsg",
"cmakeVersion": "4.0.0",
"configured": true,
"generator": "Unix Makefiles",
"usesPresets": true,
"compilers": {
"C": "/home/malsyned/packages/LLVM-ET-Arm-19.1.5-Linux-x86_64/bin/clang",
"CXX": "/home/malsyned/packages/LLVM-ET-Arm-19.1.5-Linux-x86_64/bin/clang++"
}
}
],
"cpptoolsIntegration": {
"isReady": true,
"hasCodeModel": true,
"activeBuildType": "Debug",
"buildTypesSeen": [
"Debug"
],
"requests": [
"file:///home/malsyned/work/preferred/fsg/preferred-fsg/src/main.c"
],
"responses": [
{
"uri": "file:///home/malsyned/work/preferred/fsg/preferred-fsg/src/main.c",
"configuration": {
"includePath": [],
"defines": [],
"compilerPath": "/home/malsyned/packages/LLVM-ET-Arm-19.1.5-Linux-x86_64/bin/clang++",
"compilerArgs": [],
"compilerFragments": [
"--target=arm-none-eabi"
]
}
}
],
"partialMatches": [],
"targetCount": 44,
"executablesCount": 2,
"librariesCount": 12,
"targets": []
},
"settings": [
{
"communicationMode": "automatic",
"useCMakePresets": "auto",
"configureOnOpen": true
}
]
}

// With a valid executable selected as Build Target
{
"os": "linux",
"vscodeVersion": "1.99.2",
"cmtVersion": "1.13.0",
"configurations": [
{
"folder": "/home/malsyned/work/preferred/fsg/preferred-fsg",
"cmakeVersion": "4.0.0",
"configured": true,
"generator": "Unix Makefiles",
"usesPresets": true,
"compilers": {
"C": "/home/malsyned/packages/LLVM-ET-Arm-19.1.5-Linux-x86_64/bin/clang",
"CXX": "/home/malsyned/packages/LLVM-ET-Arm-19.1.5-Linux-x86_64/bin/clang++"
}
}
],
"cpptoolsIntegration": {
"isReady": true,
"hasCodeModel": true,
"activeBuildType": "Debug",
"buildTypesSeen": [
"Debug"
],
"requests": [
"file:///home/malsyned/work/preferred/fsg/preferred-fsg/src/main.c"
],
"responses": [
{
"uri": "file:///home/malsyned/work/preferred/fsg/preferred-fsg/src/main.c",
"configuration": {
"includePath": [
"/home/malsyned/work/preferred/fsg/preferred-fsg/src/app",
"/home/malsyned/work/preferred/fsg/preferred-fsg/build/arm-debug/_deps/freertos-kernel-src/include",
"/home/malsyned/work/preferred/fsg/preferred-fsg/src/arm/ti/rm44l520pge/openrtos",
"/home/malsyned/work/preferred/fsg/preferred-fsg/src/arm/ti/rm44l520pge/halcogen",
"/home/malsyned/work/preferred/fsg/preferred-fsg/src/arm/ti/rm44l520pge/halcogen/include",
"/home/malsyned/work/preferred/fsg/preferred-fsg/build/arm-debug/src/arm/ti/rm44l520pge/openrtos/Source_Code/OpenRTOS/kernel/portable/GCC/Hercules",
"/home/malsyned/work/preferred/fsg/preferred-fsg/src/arm",
"/home/malsyned/work/preferred/fsg/preferred-fsg/build/arm-debug/_deps/rtt-src/RTT",
"/home/malsyned/work/preferred/fsg/preferred-fsg/src/arm/ti/rm44l520pge"
],
"defines": [
"DEBUG"
],
"compilerPath": "/home/malsyned/packages/LLVM-ET-Arm-19.1.5-Linux-x86_64/bin/clang",
"compilerArgs": [],
"compilerFragments": [
"-mcpu=cortex-r4f -mfpu=vfpv3-d16 -mfloat-abi=hard -fno-strict-aliasing -fdata-sections -ffunction-sections -g",
"-g3",
"-fdebug-macro",
"--target=arm-none-eabi"
]
}
}
],
"partialMatches": [],
"targetCount": 44,
"executablesCount": 2,
"librariesCount": 12,
"targets": []
},
"settings": [
{
"communicationMode": "automatic",
"useCMakePresets": "auto",
"configureOnOpen": true
}
]
}
```

### Debug Log

```shell
[main] Configuring project: preferred-fsg
[main] Saving open files before configure/build
[driver] Removing /home/malsyned/work/preferred/fsg/preferred-fsg/build/arm-debug/CMakeCache.txt
[driver] Removing /home/malsyned/work/preferred/fsg/preferred-fsg/build/arm-debug/CMakeFiles
[driver] Start configure
[driver] Running pre-configure checks and steps
[cmakefileapi-driver] Configuring using preset
[cmakefileapi-driver] Invoking CMake /usr/bin/cmake with arguments ["-DARM_CPU=cortex-r4f","-DARM_FPU=vfpv3-d16","-DARM_FLOAT_ABI=hard","-DCMAKE_EXPORT_COMPILE_COMMANDS=1","-DCPPUTEST_TESTS_DETAILED=1","-DCMAKE_BUILD_TYPE=Debug","-DCMAKE_TOOLCHAIN_FILE=cmake/llvm-et-arm.cmake","-S","/home/malsyned/work/preferred/fsg/preferred-fsg","-B","/home/malsyned/work/preferred/fsg/preferred-fsg/build/arm-debug"]
[proc] Executing command: /usr/bin/cmake -DARM_CPU=cortex-r4f -DARM_FPU=vfpv3-d16 -DARM_FLOAT_ABI=hard -DCMAKE_EXPORT_COMPILE_COMMANDS=1 -DCPPUTEST_TESTS_DETAILED=1 -DCMAKE_BUILD_TYPE=Debug -DCMAKE_TOOLCHAIN_FILE=cmake/llvm-et-arm.cmake -S /home/malsyned/work/preferred/fsg/preferred-fsg -B /home/malsyned/work/preferred/fsg/preferred-fsg/build/arm-debug
[proc] with environment: {"CASROOT":"/usr","CHROME_DESKTOP":"code.desktop","CINNAMON_VERSION":"6.4.9","CMT_DEVRUN":"1","CSF_DrawPluginDefaults":"/usr/share/opencascade/resources/DrawResources","CSF_EXCEPTION_PROMPT":"1","CSF_IGESDefaults":"/usr/share/opencascade/resources/XSTEPResource","CSF_LANGUAGE":"us","CSF_MDTVTexturesDirectory":"/usr/share/opencascade/resources/Textures","CSF_MIGRATION_TYPES":"/usr/share/opencascade/resources/StdResource/MigrationSheet.txt","CSF_OCCTResourcePath":"/usr/share/opencascade/resources","CSF_PluginDefaults":"/usr/share/opencascade/resources/StdResource","CSF_SHMessage":"/usr/share/opencascade/resources/SHMessage","CSF_STEPDefaults":"/usr/share/opencascade/resources/XSTEPResource","CSF_ShadersDirectory":"/usr/share/opencascade/resources/Shaders","CSF_StandardDefaults":"/usr/share/opencascade/resources/StdResource","CSF_StandardLiteDefaults":"/usr/share/opencascade/resources/StdResource","CSF_TObjDefaults":"/usr/share/opencascade/resources/StdResource","CSF_TObjMessage":"/usr/share/opencascade/resources/TObj","CSF_XCAFDefaults":"/usr/share/opencascade/resources/StdResource","CSF_XSMessage":"/usr/share/opencascade/resources/XSMessage","CSF_XmlOcafResource":"/usr/share/opencascade/resources/XmlOcafResource","DBUS_SESSION_BUS_ADDRESS":"unix:path=/run/user/1000/bus","DEBUGINFOD_URLS":"https://debuginfod.archlinux.org ","DESKTOP_SESSION":"cinnamon","DISPLAY":":0","DRAWDEFAULT":"/usr/share/opencascade/resources/DrawResources/DrawDefault","DRAWHOME":"/usr/share/opencascade/resources/DrawResources","EDITOR":"/usr/bin/nano","ELECTRON_NO_ATTACH_CONSOLE":"1","GDK_BACKEND":"x11","GDMSESSION":"cinnamon","GIO_LAUNCHED_DESKTOP_FILE":"/usr/share/applications/code.desktop","GIO_LAUNCHED_DESKTOP_FILE_PID":"14652","GJS_DEBUG_OUTPUT":"stderr","GJS_DEBUG_TOPICS":"JS ERROR;JS LOG","GNOME_DESKTOP_SESSION_ID":"this-is-deprecated","GTK2_RC_FILES":"/home/malsyned/.gtkrc-2.0","GTK3_MODULES":"xapp-gtk3-module","GTK_MODULES":"canberra-gtk-module","HG":"/usr/bin/hg","HOME":"/home/malsyned","LANG":"en_US.UTF-8","LC_ADDRESS":"en_US.UTF-8","LC_IDENTIFICATION":"en_US.UTF-8","LC_MEASUREMENT":"en_US.UTF-8","LC_MONETARY":"en_US.UTF-8","LC_NAME":"en_US.UTF-8","LC_NUMERIC":"en_US.UTF-8","LC_PAPER":"en_US.UTF-8","LC_TELEPHONE":"en_US.UTF-8","LC_TIME":"en_US.UTF-8","LESSOPEN":"|/usr/bin/lesspipe.sh %s","LIBVA_DRIVER_NAME":"nvidia","LLVM_ET_ARM_PATH":"/home/malsyned/packages/LLVM-ET-Arm-19.1.5-Linux-x86_64","LOGNAME":"malsyned","MAIL":"/var/spool/mail/malsyned","MMGT_CLEAR":"1","MOTD_SHOWN":"pam","NO_AT_BRIDGE":"1","ORIGINAL_XDG_CURRENT_DESKTOP":"X-Cinnamon","PATH":"/home/malsyned/.local/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/lib/jvm/default/bin:/opt/microchip/xc16/v2.10/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl:/var/lib/snapd/snap/bin","PWD":"/home/malsyned","PYTHONSTARTUP":"/home/malsyned/.pythonrc","QT_QPA_PLATFORMTHEME":"qt5ct","SAL_USE_VCLPLUGIN":"gtk","SESSION_MANAGER":"local/malsyned:@/tmp/.ICE-unix/3848,unix/malsyned:/tmp/.ICE-unix/3848","SHELL":"/bin/bash","SHLVL":"1","USER":"malsyned","VSCODE_CLI":"1","VSCODE_CRASH_REPORTER_PROCESS_TYPE":"extensionHost","VSCODE_CWD":"/home/malsyned","VSCODE_ESM_ENTRYPOINT":"vs/workbench/api/node/extensionHostProcess","VSCODE_HANDLES_UNCAUGHT_ERRORS":"true","VSCODE_IPC_HOOK":"/run/user/1000/vscode-f2c9b164-1.99-main.sock","VSCODE_NLS_CONFIG":"{\"userLocale\":\"en-us\",\"osLocale\":\"en-us\",\"resolvedLanguage\":\"en\",\"defaultMessagesFile\":\"/opt/visual-studio-code/resources/app/out/nls.messages.json\",\"locale\":\"en-us\",\"availableLanguages\":{}}","VSCODE_PID":"14670","XAUTHORITY":"/home/malsyned/.Xauthority","XC16_TOOLCHAIN_ROOT":"/opt/microchip/xc16/v2.10","XDG_CURRENT_DESKTOP":"X-Cinnamon","XDG_DATA_DIRS":"/home/malsyned/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share:/usr/share:/var/lib/snapd/desktop","XDG_GREETER_DATA_DIR":"/var/lib/lightdm-data/malsyned","XDG_RUNTIME_DIR":"/run/user/1000","XDG_SEAT":"seat0","XDG_SEAT_PATH":"/org/freedesktop/DisplayManager/Seat0","XDG_SESSION_CLASS":"user","XDG_SESSION_DESKTOP":"cinnamon","XDG_SESSION_ID":"2","XDG_SESSION_PATH":"/org/freedesktop/DisplayManager/Session0","XDG_SESSION_TYPE":"x11","XDG_VTNR":"7","_":"/opt/visual-studio-code/bin/../code","ELECTRON_RUN_AS_NODE":"1","VSCODE_L10N_BUNDLE_LOCATION":"","VSCODE_DOTNET_INSTALL_TOOL_ORIGINAL_HOME":"/home/malsyned","APPLICATION_INSIGHTS_NO_DIAGNOSTIC_CHANNEL":"1","APPLICATIONINSIGHTS_CONFIGURATION_CONTENT":"{}"}
[cmake] -- The C compiler identification is Clang 19.1.5
[cmake] -- The CXX compiler identification is Clang 19.1.5
[cmake] -- The ASM compiler identification is Clang with GNU-like command-line
[cmake] -- Found assembler: /home/malsyned/packages/LLVM-ET-Arm-19.1.5-Linux-x86_64/bin/clang
[cmake] -- Detecting C compiler ABI info
[cmake] -- Detecting C compiler ABI info - done
[cmake] -- Check for working C compiler: /home/malsyned/packages/LLVM-ET-Arm-19.1.5-Linux-x86_64/bin/clang - skipped
[cmake] -- Detecting C compile features
[cmake] -- Detecting C compile features - done
[cmake] -- Detecting CXX compiler ABI info
[cmake] -- Detecting CXX compiler ABI info - done
[cmake] -- Check for working CXX compiler: /home/malsyned/packages/LLVM-ET-Arm-19.1.5-Linux-x86_64/bin/clang++ - skipped
[cmake] -- Detecting CXX compile features
[cmake] -- Detecting CXX compile features - done
[cmake] -- Performing Test DEBUG_MACRO_FLAG
[cmake] -- Performing Test DEBUG_MACRO_FLAG - Success
[cmake] -- Performing Test GENERAL_REGS_ONLY_FLAG
[cmake] -- Performing Test GENERAL_REGS_ONLY_FLAG - Failed
[cmake] -- Performing Test WARN_VFP_CLOBBER_FLAG
[cmake] -- Performing Test WARN_VFP_CLOBBER_FLAG - Success
[cmake] -- Found Doxygen: /usr/bin/doxygen (found version "1.13.2") found components: doxygen dot
[cmake] -- Found Git: /usr/bin/git (found version "2.49.0")
[cmake] -- Using a custom FREERTOS_PORT.
[cmake] -- Looking for sys/types.h
[cmake] -- Looking for sys/types.h - found
[cmake] -- Looking for stdint.h
[cmake] -- Looking for stdint.h - found
[cmake] -- Looking for stddef.h
[cmake] -- Looking for stddef.h - found
[cmake] -- Check size of long long
[cmake] -- Check size of long long - done
[cmake] -- Setting CPPUTEST_PLATFORM: Gcc
[cmake] -- Looking for fopen_s
[cmake] -- Looking for fopen_s - not found
[cmake] -- Looking for kill
[cmake] -- Looking for kill - not found
[cmake] -- Looking for fork
[cmake] -- Looking for fork - not found
[cmake] -- Looking for waitpid
[cmake] -- Looking for waitpid - not found
[cmake] -- Looking for gettimeofday
[cmake] -- Looking for gettimeofday - not found
[cmake] -- Looking for pthread_mutex_lock
[cmake] -- Looking for pthread_mutex_lock - not found
[cmake] -- Looking for strdup
[cmake] -- Looking for strdup - not found
[cmake] -- Performing Test CMAKE_HAVE_LIBC_PTHREAD
[cmake] -- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Failed
[cmake] -- Check if compiler accepts -pthread
[cmake] -- Check if compiler accepts -pthread - no
[cmake] -- Looking for pthread_create in pthreads
[cmake] -- Looking for pthread_create in pthreads - not found
[cmake] -- Looking for pthread_create in pthread
[cmake] -- Looking for pthread_create in pthread - not found
[cmake] -- Could NOT find Threads (missing: Threads_FOUND)
[cmake] -- Configuring done (2.3s)
[cmake] -- Generating done (0.1s)
[cmake] -- Build files have been written to: /home/malsyned/work/preferred/fsg/preferred-fsg/build/arm-debug
[cmakefileapi-parser] Read reply folder: /home/malsyned/work/preferred/fsg/preferred-fsg/build/arm-debug/.cmake/api/v1/reply
[cmakefileapi-parser] Found index files: ["cache-v2-67820b73205ab44be163.json","cmakeFiles-v1-9179efbbaa19715f3a9a.json","codemodel-v2-03d8cad993f644b0a492.json","directory-.-Debug-bd45beedfb51236c4180.json","directory-_deps.cpputest-build-Debug-2001403ed54af95ad282.json","directory-_deps.cpputest-build.src-Debug-c5247a96bf30e8d9ffc4.json","directory-_deps.cpputest-build.src.CppUTest-Debug-f7e5e05e2376250fea8b.json","directory-_deps.cpputest-build.src.CppUTestExt-Debug-faf64c9264f1013c6ac0.json","directory-_deps.freertos-kernel-build-Debug-5154e9a5facf64cfd517.json","directory-_deps.freertos-kernel-build.include-Debug-d356773737b72fa6bc5a.json","directory-_deps.freertos-kernel-build.portable-Debug-b5f863bdaf8ff39bb0da.json","directory-src.app-Debug-2e167ed549b5f7501b6a.json","directory-src.arm-Debug-6fbaf8ae9d717803baf2.json","directory-src.arm.ti.rm44l520pge-Debug-7f28aaf7b3a60d50b60f.json","directory-src.arm.ti.rm44l520pge.halcogen-Debug-a334fd7129867a6a5bec.json","directory-src.arm.ti.rm44l520pge.openrtos-Debug-f6ae54396dbbf5693454.json","directory-tests-Debug-b01f6abb0ab61427ef3b.json","index-2025-04-15T01-59-12-0727.json","target-Continuous-Debug-e1cbd7b23bb9ed6c0b72.json","target-ContinuousBuild-Debug-f46c841649756006ad00.json","target-ContinuousConfigure-Debug-8227b390ea7a72618aac.json","target-ContinuousCoverage-Debug-ee5b3d75515c452ea995.json","target-ContinuousMemCheck-Debug-83814e786e6c436c120a.json","target-ContinuousStart-Debug-558b13874adbfd41d68c.json","target-ContinuousSubmit-Debug-b26b87c5590a7289b2d9.json","target-ContinuousTest-Debug-a06e58aded5796b63837.json","target-ContinuousUpdate-Debug-31e432bc9fb623995563.json","target-CppUTest-Debug-7b0a44eb9900033287bc.json","target-CppUTestExt-Debug-87697f85ccd5d54d8da7.json","target-Experimental-Debug-f4af877508453d517859.json","target-ExperimentalBuild-Debug-e959fd81e597253b91ef.json","target-ExperimentalConfigure-Debug-e9501939413a34e9be33.json","target-ExperimentalCoverage-Debug-df7de4a4c329ca27e594.json","target-ExperimentalMemCheck-Debug-a36468afa1f39435ccc6.json","target-ExperimentalStart-Debug-dd9f88a5f1c51246bf4e.json","target-ExperimentalSubmit-Debug-02ca7017426fe88e5131.json","target-ExperimentalTest-Debug-987fb328e465efe07914.json","target-ExperimentalUpdate-Debug-6d93f6f03ed14abb1761.json","target-Nightly-Debug-463f6e1cb9a9d6b8c641.json","target-NightlyBuild-Debug-3bef9c0b6e73eca0574b.json","target-NightlyConfigure-Debug-91d795028dd5f81f0dc1.json","target-NightlyCoverage-Debug-c9b389b4b84ac128f436.json","target-NightlyMemCheck-Debug-b65e9c1addf4070f633c.json","target-NightlyMemoryCheck-Debug-a849357c696adc22d25e.json","target-NightlyStart-Debug-45b585be59935c89fe0d.json","target-NightlySubmit-Debug-2fd9533183372570cd19.json","target-NightlyTest-Debug-9e3712890fc74af58f2f.json","target-NightlyUpdate-Debug-9c7be0b2924e45f6c0f5.json","target-app-Debug-3b7f545f7114ad367de6.json","target-doc-Debug-3d28f2d638c9d2949a87.json","target-freertos_config-Debug-d1e8d7fcf9da251fc951.json","target-freertos_kernel-Debug-9ffbf0fab4dddd8fbe2d.json","target-freertos_kernel_port-Debug-891b43989f5d69e0277a.json","target-freertos_kernel_port_headers-Debug-d1c68409f9fbb429f34a.json","target-gitdescribe-Debug-4422059a8d49f57268e0.json","target-halcogen-Debug-1060c74a922c2ae1ec9d.json","target-hercules_bsp-Debug-3f675fb98a203c7cce63.json","target-preferred-fsg-Debug-9c52a2e28b306641b439.json","target-preferred-fsg-tests-all-Debug-322493639340846e0c06.json","target-segger-rtt-Debug-a151acc331202c4a0d4c.json","target-segger-rtt-picolibc-Debug-a5e2134c4fb246ddaf1d.json","target-segger-rtt-stdstreams-Debug-47ae225c03bc44a63f53.json","toolchains-v1-852637e0fed7669a4b9f.json"]
[cache] Reading CMake cache file /home/malsyned/work/preferred/fsg/preferred-fsg/build/arm-debug/CMakeCache.txt
[cache] Parsing CMake cache string
[extension] [6171] cmake.cleanConfigure finished (returned {"result":0,"resultType":0})
```

### Additional Information

IntelliSense fails to find header files when Build Target is `all`:
![Image](https://github.com/user-attachments/assets/fd5e4258-2e93-4813-9017-6688a7935dfa)

IntelliSense finds header files when Build Target is `preferred-fsg`:
![Image](https://github.com/user-attachments/assets/989506a6-7472-4fb2-a3d9-9d12fff7692f)

CMake File API replies for a `UTILITY` target and an `EXECUTABLE` target which both have `src/main.c` as a source file, leading to this bug:

[target-doc-Debug-3d28f2d638c9d2949a87.json](https://github.com/user-attachments/files/19746083/target-doc-Debug-3d28f2d638c9d2949a87.json)

[target-preferred-fsg-Debug-9c52a2e28b306641b439.json](https://github.com/user-attachments/files/19746203/target-preferred-fsg-Debug-9c52a2e28b306641b439.json)

Contributor guide

Open the contributing guide

Research direction

Start with updateConfigurationData(), updateFileGroup(), provideConfigurations(), and getConfiguration(), especially the fallback shown in getConfiguration(). Reproduce with a CMake project containing a UTILITY target with sources and Build Target set to all, then compare the generated includePath configuration with a valid executable target. Done means source configurations retain the expected include paths and compiler data when the UTILITY target is first.

Written by the indexing model from the issue text.

Assessment

Tech stack
cmake, typescript
Domain
build-system, developer-experience, tooling
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
30/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.