microsoft / vscode-cmake-tools

CMake integration in Visual Studio Code
https://marketplace.visualstudio.com/items?itemName=vector-of-bool.cmake-tools
MIT License
1.47k stars 451 forks source link

Add multiple directories to the workspace and all directories will be configured even if I only want to configure one directory #3311

Open traversebitree opened 1 year ago

traversebitree commented 1 year ago

Brief Issue Summary

Brief

Add multiple directories to the workspace and all directories will be configured even if I only want to configure one directory.

Reproduce

Step1. Open a new VSCode window.

Step2. Add multiple folders to the workspace (untitled).

image Then like this:
image Note: both are top directories, with no subdirectory or include.

Step3. Write some list files:

image Code in CMakeLists.txt of TEST01:

cmake_minimum_required(VERSION 3.25)
project(TEST01)
list(APPEND CMAKE_MESSAGE_INDENT "[TEST01]  ")
message(STATUS "hello from test01.")

Code in CMakeLists.txt of TEST02:

cmake_minimum_required(VERSION 3.25)
project(TEST02)
list(APPEND CMAKE_MESSAGE_INDENT "[TEST02]  ")
message(STATUS "hello from test02.")

Step4. Try configure

Try1. Configure All Projects button

image Outputs here:

[main] Configuring project: TEST01 
[proc] Executing command: "C:\Program Files\CMake\bin\cmake.EXE" --no-warn-unused-cli -DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE -SD:/Workspace/CPP/PROFESSIONAL-CMAKE-TEST/TEST01 -Bd:/Workspace/CPP/PROFESSIONAL-CMAKE-TEST/TEST01/build -G "Visual Studio 17 2022" -T host=x64 -A x64
[cmake] Not searching for unused variables given on the command line.
[cmake] -- Selecting Windows SDK version 10.0.22000.0 to target Windows 10.0.22621.
[cmake] -- [TEST01]  hello from test01.
[cmake] -- Configuring done (0.0s)
[cmake] -- Generating done (0.0s)
[cmake] -- Build files have been written to: D:/Workspace/CPP/PROFESSIONAL-CMAKE-TEST/TEST01/build
[visual-studio] Patch Windows SDK path from C:\Program Files (x86)\Windows Kits\10\bin\x64 to C:\Program Files (x86)\Windows Kits\10\bin\10.0.22000.0\x64 for C:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Auxiliary\Build\vcvarsall.bat
[main] Configuring project: TEST02 
[proc] Executing command: "C:\Program Files\CMake\bin\cmake.EXE" --no-warn-unused-cli -DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE -SD:/Workspace/CPP/PROFESSIONAL-CMAKE-TEST/TEST02 -Bd:/Workspace/CPP/PROFESSIONAL-CMAKE-TEST/TEST02/build -G "Visual Studio 17 2022" -T host=x64 -A x64
[cmake] Not searching for unused variables given on the command line.
[cmake] -- Selecting Windows SDK version 10.0.22000.0 to target Windows 10.0.22621.
[cmake] -- [TEST02]  hello from test02.
[cmake] -- Configuring done (0.0s)
[cmake] -- Generating done (0.0s)
[cmake] -- Build files have been written to: D:/Workspace/CPP/PROFESSIONAL-CMAKE-TEST/TEST02/build
[visual-studio] Patch Windows SDK path from C:\Program Files (x86)\Windows Kits\10\bin\x64 to C:\Program Files (x86)\Windows Kits\10\bin\10.0.22000.0\x64 for C:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Auxiliary\Build\vcvarsall.bat

Conclusion: The two projects (folders) are configured.

Try2. Set TEST01 as active and configure

image Outputs are the same with Try1:

[main] Configuring project: TEST01 
[proc] Executing command: "C:\Program Files\CMake\bin\cmake.EXE" --no-warn-unused-cli -DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE -SD:/Workspace/CPP/PROFESSIONAL-CMAKE-TEST/TEST01 -Bd:/Workspace/CPP/PROFESSIONAL-CMAKE-TEST/TEST01/build -G "Visual Studio 17 2022" -T host=x64 -A x64
[cmake] Not searching for unused variables given on the command line.
[cmake] -- Selecting Windows SDK version 10.0.22000.0 to target Windows 10.0.22621.
[cmake] -- [TEST01]  hello from test01.
[cmake] -- Configuring done (0.0s)
[cmake] -- Generating done (0.0s)
[cmake] -- Build files have been written to: D:/Workspace/CPP/PROFESSIONAL-CMAKE-TEST/TEST01/build
[visual-studio] Patch Windows SDK path from C:\Program Files (x86)\Windows Kits\10\bin\x64 to C:\Program Files (x86)\Windows Kits\10\bin\10.0.22000.0\x64 for C:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Auxiliary\Build\vcvarsall.bat
[main] Configuring project: TEST02 
[proc] Executing command: "C:\Program Files\CMake\bin\cmake.EXE" --no-warn-unused-cli -DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE -SD:/Workspace/CPP/PROFESSIONAL-CMAKE-TEST/TEST02 -Bd:/Workspace/CPP/PROFESSIONAL-CMAKE-TEST/TEST02/build -G "Visual Studio 17 2022" -T host=x64 -A x64
[cmake] Not searching for unused variables given on the command line.
[cmake] -- Selecting Windows SDK version 10.0.22000.0 to target Windows 10.0.22621.
[cmake] -- [TEST02]  hello from test02.
[cmake] -- Configuring done (0.0s)
[cmake] -- Generating done (0.0s)
[cmake] -- Build files have been written to: D:/Workspace/CPP/PROFESSIONAL-CMAKE-TEST/TEST02/build
[visual-studio] Patch Windows SDK path from C:\Program Files (x86)\Windows Kits\10\bin\x64 to C:\Program Files (x86)\Windows Kits\10\bin\10.0.22000.0\x64 for C:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Auxiliary\Build\vcvarsall.bat

Conclusion: I want only configure TEST01, but the two projects (folders) are configured.

Try3. Set TEST02 as active and configure

image image Outputs are the same with Try1 and Try2:

[main] Configuring project: TEST01 
[proc] Executing command: "C:\Program Files\CMake\bin\cmake.EXE" --no-warn-unused-cli -DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE -SD:/Workspace/CPP/PROFESSIONAL-CMAKE-TEST/TEST01 -Bd:/Workspace/CPP/PROFESSIONAL-CMAKE-TEST/TEST01/build -G "Visual Studio 17 2022" -T host=x64 -A x64
[cmake] Not searching for unused variables given on the command line.
[cmake] -- Selecting Windows SDK version 10.0.22000.0 to target Windows 10.0.22621.
[cmake] -- [TEST01]  hello from test01.
[cmake] -- Configuring done (0.0s)
[cmake] -- Generating done (0.0s)
[cmake] -- Build files have been written to: D:/Workspace/CPP/PROFESSIONAL-CMAKE-TEST/TEST01/build
[visual-studio] Patch Windows SDK path from C:\Program Files (x86)\Windows Kits\10\bin\x64 to C:\Program Files (x86)\Windows Kits\10\bin\10.0.22000.0\x64 for C:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Auxiliary\Build\vcvarsall.bat
[main] Configuring project: TEST02 
[proc] Executing command: "C:\Program Files\CMake\bin\cmake.EXE" --no-warn-unused-cli -DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE -SD:/Workspace/CPP/PROFESSIONAL-CMAKE-TEST/TEST02 -Bd:/Workspace/CPP/PROFESSIONAL-CMAKE-TEST/TEST02/build -G "Visual Studio 17 2022" -T host=x64 -A x64
[cmake] Not searching for unused variables given on the command line.
[cmake] -- Selecting Windows SDK version 10.0.22000.0 to target Windows 10.0.22621.
[cmake] -- [TEST02]  hello from test02.
[cmake] -- Configuring done (0.0s)
[cmake] -- Generating done (0.0s)
[cmake] -- Build files have been written to: D:/Workspace/CPP/PROFESSIONAL-CMAKE-TEST/TEST02/build
[visual-studio] Patch Windows SDK path from C:\Program Files (x86)\Windows Kits\10\bin\x64 to C:\Program Files (x86)\Windows Kits\10\bin\10.0.22000.0\x64 for C:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Auxiliary\Build\vcvarsall.bat

Conclusion: The same. I want only configure TEST02, but the two projects (folders) are configured.

Conclusion

The two folders (projects) are both top. They are added into the WORKSPACE, no subdirectory or include. Configure one project, but all projects are configured.

CMake Tools Diagnostics

{
  "os": "win32",
  "vscodeVersion": "1.81.1",
  "cmtVersion": "1.15.31",
  "configurations": [
    {
      "folder": "d:\\Workspace\\CPP\\PROFESSIONAL-CMAKE-TEST\\TEST01",
      "cmakeVersion": "3.27.3",
      "configured": true,
      "generator": "Visual Studio 17 2022",
      "usesPresets": false,
      "compilers": {}
    },
    {
      "folder": "d:\\Workspace\\CPP\\PROFESSIONAL-CMAKE-TEST\\TEST02",
      "cmakeVersion": "3.27.3",
      "configured": true,
      "generator": "Visual Studio 17 2022",
      "usesPresets": false,
      "compilers": {}
    }
  ],
  "cpptoolsIntegration": {
    "isReady": false,
    "hasCodeModel": false,
    "activeBuildType": "",
    "buildTypesSeen": [],
    "requests": [],
    "responses": [],
    "partialMatches": [],
    "targetCount": 0,
    "executablesCount": 0,
    "librariesCount": 0,
    "targets": []
  },
  "settings": [
    {
      "communicationMode": "automatic",
      "useCMakePresets": "auto",
      "configureOnOpen": false
    },
    {
      "communicationMode": "automatic",
      "useCMakePresets": "auto",
      "configureOnOpen": false
    }
  ]
}

Debug Log

No response

Additional Information

gcampbell-msft commented 1 year ago

@traversebitree Based on your reproduction steps. This is expected as you are using entry points that "Configure ALL projects".

Does this still happen when you simply run "Configure" from the command palette?

traversebitree commented 1 year ago

@gcampbell-msft

Thank you for your reply. With the command palette, run "CMake: Configure". It works ok. Can you add this CMake: Configure button or right-click menu item in the slide bar and status bar to only configure the active workspace? image image

gcampbell-msft commented 1 year ago

@traversebitree I'll definitely add this as a feature request to our backlog and we will work to see where it fits in with our other work!

traversebitree commented 1 year ago

@traversebitree I'll definitely add this as a feature request to our backlog and we will work to see where it fits in with our other work!

Thank you very much!