Я пытаюсь запустить cmake с ctrl+shift+B
вот так:
{
"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"]
}
]
}
Но что бы я ни делал, он работает на $ {workspaceRoot} вместо $ {workspaceRoot} / build:
Executing task in folder cpppractice: cmake C:\workspace\cpp\cpppractice -G "MinGW Makefiles"
Что-то не так с этим подходом? Насколько я понимаю cwd
переменная в options
пункт должен работать.
Вы передаете аргументы cmake
ошибочно. Вся строка cmake ${workspaceRoot} -G "MinGW Makefiles"
рассматривается как имя команды. Аргументы должны быть перечислены в args
массив.
{
"version": "2.0.0",
"tasks": [
{
"label": "cmake",
"type": "shell",
"options": {
"cwd": "${workspaceRoot}/build"},
"command": "cmake",
"args": [
"${workspaceRoot}",
"-G",
"\"MinGW Makefiles\""]
},
...
]
}
{
"label": "cmake",
"type": "shell",
"options": {
"cwd": "${workspaceRoot}/build"},
"command": "cmake \"MinGW Makefiles\" ${workspaceRoot}",
},
Это работает, кажется, что «Выполнение задачи в папке cpppractice:» не является точным, и оно выполняет его в правильном месте, так как почему это не сработало ранее, я думаю, что оно неправильно анализирует аргументы? Я не могу подтвердить, но вот вывод:
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
Там, где раньше он компилировал о невозможности использовать генератор MinGW, что означает разделение аргумента «MakeGiles MinGW».
После некоторой обработки я узнал, что это также ответ:
{
"label": "cmake",
"type": "shell",
"options": {
"cwd": "${workspaceRoot}/build"},
"command": "cmake",
"args": [
"-G",
"'MinGW Makefiles'",
"./.."],
...
},
На самом деле я нахожу второй подход немного чище, но оба работают одинаково, поэтому для передачи аргумента в виде строки вы должны использовать одинарные кавычки, например:
...
"command":"echo",
"args": [
"'Za Warudo!'",
],
...