Как запустить Cmake в Visual Studio Code с помощью задач

Я пытаюсь запустить 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 пункт должен работать.

0

Решение

Вы передаете аргументы 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\""]
},
...
]
}
1

Другие решения

{
"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!'",
],
...
1

По вопросам рекламы [email protected]