How to run Cmake in Visual Studio Code using tasks
Solution 1
{
"label": "cmake",
"type": "shell",
"options": {
"cwd": "${workspaceRoot}/build"
},
"command": "cmake \"MinGW Makefiles\" ${workspaceRoot}",
},
This works, It seems that the "Executing task in folder cpppractice:" is not accurate and it is executing it in the correct place, as for why it did not work previously I think it's parsing the args incorrectly? I can't confirm, but here is the output:
Executing task in folder cpppractice: cmake "MinGW Makefiles"
C:\workspace\cpp\cpppractice <
-- Configuring done
-- Generating done
-- Build files have been written to: C:/workspace/cpp/cpppractice/build
Where previously it was compalining about not being able Use the generator "MinGW" which means that it separating the argument "MinGW Makefiles". After some tinkering I found out that this is also an answer:
{
"label": "cmake",
"type": "shell",
"options": {
"cwd": "${workspaceRoot}/build"
},
"command": "cmake",
"args": [
"-G",
"'MinGW Makefiles'",
"./.."
],
...
},
I actually find the second approach a little bit cleaner but both work the same, So in order to pass an argument as a string you have to use single quotes like so:
...
"command":"echo",
"args": [
"'Za Warudo!'",
],
...
Solution 2
You pass arguments to cmake
wrongly. The whole string cmake ${workspaceRoot} -G "MinGW Makefiles"
is treated as a command name. Arguments must be listed in the args
array.
{
"version": "2.0.0",
"tasks": [
{
"label": "cmake",
"type": "shell",
"options": {
"cwd": "${workspaceRoot}/build"
},
"command": "cmake",
"args": [
"${workspaceRoot}",
"-G",
"\"MinGW Makefiles\""
]
},
...
]
}
Immac
Senior Software Engineer, I Love videogames, especially nintendo ones, but I do play many different titles. I really like C++.
Updated on June 08, 2022Comments
-
Immac almost 2 years
I'm trying to run cmake with
ctrl+shift+B
like so:{ "version": "2.0.0", "tasks": [ { "label": "cmake", "type": "shell", "options": { "cwd": "${workspaceRoot}/build" }, "command": "cmake ${workspaceRoot} -G \"MinGW Makefiles\"", (...) }, { "label": "make", "type": "shell", "command": "mingw32-make.exe", "options": { "cwd": "${workspaceRoot}/build" }, (...), "dependsOn":["cmake"] }, { "label": "build", "type": "shell", "options": { "cwd": "${workspaceRoot}/build" }, "group": { "kind": "build", "isDefault": true }, "dependsOn": ["make"] } ] }
But no matter what I do It runs on ${workspaceRoot} instead of the ${workspaceRoot}/build one:
Executing task in folder cpppractice: cmake C:\workspace\cpp\cpppractice -G "MinGW Makefiles"
Is there anyhting wrong with this approach? As far as I understand the
cwd
variable in theoptions
item should work. -
Immac about 6 yearsI had already tried this, but the output is the same:
Executing task in folder cpppractice: cmake C:\workspace\cpp\cpppractice -G "MinGW Makefiles"