Comments (19)
Verify this issue has been fixed. Thanks.
ENV:
VS code: 1.91.1
CMake Tools Extension: v1.19.19 (pre-release)
from vscode-cmake-tools.
I would like to add that I can't find the correct way to simply add more build types. The CMakeFiles I use have for instance ServRel or ToolRel as build types, which I can't access at all.
from vscode-cmake-tools.
Thanks for reporting this issue. Today we try to repro using a simple CMake Project, but we didn't repro it. We find that if we set the "CMAKE_BUILD_TYPE": "Release" in related configuration, and the -DCMAKE_BUILD_TYPE=Release displays on CMake output when configure the project. For further investigation, could you please share us a demo project with clear repro steps? We are looking forward to hearing from you. Thanks.
ENV:
VS code version: 1.90.0
CMake Extension version: 1.18.42
Please see the verified results as below.
from vscode-cmake-tools.
@Evelyn-001 Hi, thanks for the reply. This gif looks okay, and maybe I need a little time to learn to use CMakePresets.json. Actually I begin to use CMake since about CMake 3.12 or before that.
My previous trial was on a Apple M1 machine, which is not available now.
I'm currently using a Windows 11, x86-64 machine, and I can reproduce it.
I guess Ninja as generator is the key to reproduce.
Here is the detail:
- C/C++ compiler: Visual Studio 2022 (17.10.1)
- CMake: 3.29.5 (manually installed, instead of the VS2022 installed one)
- Build Tool: Ninja 1.12.1 (manually installed, instead of the VS2022 installed one)
VSCode: Version: 1.90.0
VSCode CMake Tools plugin version: v1.18.42
VSCode User setting.json
{
"cmake.generator": "Ninja",
"cmake.pinnedCommands": [
"workbench.action.tasks.configureTaskRunner",
"workbench.action.tasks.runTask"
],
}
CMakeLists.txt
cmake_minimum_required(VERSION 3.29)
project(x)
message(STATUS "[x] CMAKE_BUILD_TYPE: ${CMAKE_BUILD_TYPE}")
add_executable(x x.c)
x.c:
int main() {}
CMake Configure output by CMake: Configure
in VSCode command palette:
Do I set CMAKE_BUILD_TYPE
environment variable? No
from vscode-cmake-tools.
@Evelyn-001 Using the aforementioned CMakeLists.txt
and x.c
files, I can reproduce the bug on my Apple-M1 machine, where I does not specify Ninja
as generator:
- VSCode version: 1.90.0
- CMake version: 3.29.5
- VSCode CMake Tools extension version: v1.18.42
- VSCode User settings.json keep minimal as:
{
"cmake.pinnedCommands": [
"workbench.action.tasks.configureTaskRunner",
"workbench.action.tasks.runTask"
]
}
- Environment variable
CMAKE_BUILD_TYPE
is not defined - All VSCode instances closed and restarted
I suggest removing the use of CMakePresets.json
for a clean reproduce.
from vscode-cmake-tools.
Thanks for your reply. According to your comment, we try to repro it using above demo files, please see the verified results as below. Is it your issue? Thanks.
ENV:
VS code version: 1.90.0
CMake Extension version: 1.18.42
from vscode-cmake-tools.
Thanks for your reply. According to your comment, we try to repro it using above demo files, please see the verified results as below. Is it your issue? Thanks. ENV: VS code version: 1.90.0 CMake Extension version: 1.18.42
Thanks for the reply. The verified result you provided in the gif is nearly what I thing the issue is. And to be precise, I think there are two sub-issues:
- When the C/C++ compiler is
cl.exe
, if specified Ninja as generator in settings.json, the bug appears - When the C/C++ compiler is
Clang
, includingClang.exe
from Visual Studio (for Windows), andAppleClang
(for macOS), the bug appears
from vscode-cmake-tools.
This issue reproduces with below Conditions:
- When the C/C++ compiler is cl.exe, if specified Ninja as generator in settings.json, the bug appears
- When the C/C++ compiler is Clang, the bug appears
ENV:
VSCode version: 1.90.1
CMake version: 3.28.3-msvc11
Ninja version: 1.11.0
VSCode CMake Tools extension version: v1.18.42
from vscode-cmake-tools.
@gcampbell-msft, if user do not explicitly specify a value for CMAKE_BUILD_TYPE when executing CMake, or do not explicitly set it before building, will CMake choose a default CMAKE_BUILD_TYPE of Debug? Coud you please help look at this issue? Thanks in advance.
from vscode-cmake-tools.
@Evelyn-001 Yes, if there is no CMAKE_BUILD_TYPE specified, then the default is Debug.
from vscode-cmake-tools.
@Evelyn-001 Yes, if there is no CMAKE_BUILD_TYPE specified, then the default is Debug.
😂😂 Could you please drop this default "Debug"? I think this "Debug" may sometimes become a "Bug" in my C/C++ projects
from vscode-cmake-tools.
@zchrissirhcz @Evelyn-001 Let me take some time to investigate, I actually believe I may have been wrong about our default, let me look more closely into it and get you the full understanding and context. Thanks!
from vscode-cmake-tools.
@zchrissirhcz Okay I've investigated closer and we do in fact default to "Debug". What are you expecting the default to be? I'm guessing simply an empty string?
from vscode-cmake-tools.
@zchrissirhcz Follow up to help us understand your scenario better, is there a reason that you don't want to explicitly set the build type?
from vscode-cmake-tools.
I think CMAKE_BUILD_TYPE
should be set by user, and a default value provided by "VSCode CMake Tools" is not required. Consider this case: a cross-platform C/C++ project, in its CMakeLists.txt
, automatically detect and set value for CMAKE_BUILD_TYPE
:
cmake_minimum_required(VERSION 3.5)
projet(x)
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build." FORCE)
endif()
message(STATUS "[x] CMAKE_BUILD_TYPE: ${CMAKE_BUILD_TYPE}")
When invoked in command like:
cmake -S . -B build
it will print [x] CMAKE_BUILD_TYPE: Release
But when invoked in VSCode CMake Tools' "cmake configure", it prints [x] CMAKE_BUILD_TYPE: Debug
.
I see this usage in:
-
- the ncnn project: https://github.com/Tencent/ncnn/blob/master/CMakeLists.txt#L26-L28
-
- the 3rd search result in google with keywords "default value for cmake_build_type": https://www.kitware.com/cmake-and-the-default-build-type/
from vscode-cmake-tools.
@zchrissirhcz Okay I've investigated closer and we do in fact default to "Debug". What are you expecting the default to be? I'm guessing simply an empty string?
@gcampbell-msft
To be precise, I expect CMake Tools extension not passing -DCMAKE_BUILD_TYPE=Debug
, and also don't passing -DCMAKE_BUILD_TYPE=""
.
An empty string (-DCMAKE_BUILD_TYPE=""
) will also make existing project's CMakeLists.txt
not working as expected. Just don't passing this variable by default.
If user do specify CMAKE_BUILD_TYPE
in settings by UI/json file, passing that value. And this value can be one of : Debug
, Release
, MinSizeRel
, RelWithDebInfo
. And meanwhile, user can also specify other values, such as ToolRel
in @Luvideria 's case.
from vscode-cmake-tools.
@zchrissirhcz Thanks for all of this information, we will definitely assess this on the backlog and investigate. Again, thanks!
from vscode-cmake-tools.
Brief Issue Summary
CMake: Configure
always uses-DCMAKE_BUILD_TYPE:STRING=Debug
even if I deleteCMAKE_BUILD_TYPE
or setCMAKE_BUILD_TYPE=Release
in setting of CMake Tools extension, and I've already set environment variable:export CMAKE_BUILD_TYPE=Release
CMake Tools Diagnostics
{ "os": "darwin", "vscodeVersion": "1.90.0", "cmtVersion": "1.18.41", "configurations": [ { "folder": "/Users/zz/work/cppsober/kcv", "cmakeVersion": "3.29.5", "configured": true, "generator": "Ninja", "usesPresets": false, "compilers": { "C": "/Library/Developer/CommandLineTools/usr/bin/cc", "CXX": "/Library/Developer/CommandLineTools/usr/bin/c++" } } ], "cpptoolsIntegration": { "isReady": true, "hasCodeModel": true, "activeBuildType": "Debug", "buildTypesSeen": [ "Debug" ], "requests": [], "responses": [], "partialMatches": [], "targetCount": 7, "executablesCount": 1, "librariesCount": 3, "targets": [ { "name": "birch-autotimer-update", "type": "UTILITY" }, { "name": "imgui", "type": "STATIC_LIBRARY" }, { "name": "konacv", "type": "STATIC_LIBRARY" }, { "name": "test", "type": "EXECUTABLE" }, { "name": "glfw", "type": "STATIC_LIBRARY" }, { "name": "update_mappings", "type": "UTILITY" } ] }, "settings": [ { "communicationMode": "automatic", "useCMakePresets": "never", "configureOnOpen": false } ] }Debug Log
No response
Additional Information
No response
12bc6cdb375f9688ba2eff535c36b26dbbaff710
from vscode-cmake-tools.
@smp73, thanks for your reply. Do you want to use -DCMAKE_BUILD_TYPE:STRING=Release ? you need to add Adding "configuration": "release" in CMakePresets.json file. Please refer to this comment in that issue. Thanks.
from vscode-cmake-tools.
Related Issues (20)
- cmake.getLaunchTargetFilename returns nothing (again?) HOT 10
- CMakePresets error including nested presets files HOT 5
- CMakePresets fail to load on RedHat. Error on Output: Invalid variable reference ${which_declare} HOT 6
- why vs code build cmake project output Directory auto add auto ${buildType} HOT 3
- Presets are not reloaded when an included file is changed untile reload HOT 6
- No Debug or Launch Targets with empty Build type HOT 3
- Deletes CMakeCache.txt on file save HOT 10
- Redundant messages appear in the terminal window
- Change of `binaryDir` in `CMakePresets.json` not respected HOT 2
- [Feature Request] New command substitutions `launchTargetName` and `getLaunchTargetName`
- Command Request: Refresh CMakePresets HOT 3
- Slow after Cmake build finished for cmake tools build to finish. [cache] Parsing CMake cache string HOT 5
- `cmake.pinnedCommands` added automatically to settings HOT 4
- CMakeLists.txt HOT 2
- Reopen 3797: cmake-tools still does JSON.stringify in 1.19.XX HOT 11
- cmake continually re-runs to regenerate generate.stamp.depend, causing poor performance HOT 4
- Failed to configure a cmake project under drive root HOT 6
- statusBarVisibility not hiding build,debug,launch HOT 2
- duplicate launch/debug button
- Allow stopping a CMake build launched via workbench.action HOT 4
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from vscode-cmake-tools.