Visual Studio Code: последовательный запуск задач из tasks.json?
Господа,
мне понадобилось сделать в VSC компиляцию, которая состоит из нескольких шагов.
А именно, я в рабочей папке выполняю три команды из командной строки:
gcc -c main.adb
gnatbind main
gnatlink main
(ну да, это та самая Ада, которая живее всех живых)
Для этого я пишу tasks.json в VSC и пытаюсь так связать задачи, чтобы по нажатию Ctrl+B запускалась первая, потом вторая, потом третья.
Я нашел советы по последовательному запуску задач в VSC, например: Как связать задачи в коде Visual Studio: https://coderoad.ru/43657839/Как-связать-задачи-в-коде-Visual-Studio-используя-только-tasks-json
Сделал все, как там написано. У меня три задачи compile1, compile2 и compile3. Все они относятся к группе build. Первая - default. Вторая зависит от первой. Третья зависит от первой и второй.
По описанию, которое я нашел - я все сделал правильно.
"А включаешь - не работет" : при нажатии Ctrl+B выполняется первая задача, на вторую и третью VSC внимания не обращает.
Посмотрите, пожалуйста, как надо поправить мой tasks.json, чтобы эта балалайка заиграла?
Спасибо!
{
"version": "2.0.0",
"tasks": [
{
"type": "shell",
"label": "compile1",
"command": "gcc.exe",
"args": [
"-c",
"${file}",
],
"options": {
"cwd": "C:/Programs/msys64/mingw64/bin"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
}
},
{
"type": "shell",
"label": "compile2",
"command": "gnatbind",
"args": [
"${workspaceFolder}${fileBasenameNoExtension}",
],
"options": {
"cwd": "C:/Programs/msys64/mingw64/bin"
},
"group": "build",
"dependsOn": [
"compile1"
],
"problemMatcher": [],
},
{
"type": "shell",
"label": "compile3",
"command": "gnatlink",
"args": [
"${workspaceFolder}${fileBasenameNoExtension}",
],
"options": {
"cwd": "C:/Programs/msys64/mingw64/bin"
},
"group": "build",
"dependsOn": [
"compile1",
"compile2"
],
"problemMatcher": [],
}
]
}
Ответы (1 шт):
VS Code все правильно делает, т.к. вы скорее всего не правильно поняли как работает dependsOn и default.
При указании задачи как default, VS Code начинает её выполнять при выборе Run Build Task или соответствующего сочетания клавиш, но в задаче compile1 нигде не указано, что нужно ещё выполнить 2 дополнительные задачи/этапа, поэтому ничего не происходит. dependsOn указывает наоборот, от какой задачи зависит текущая задача. Т.е. в вашем случает нужно сделать compile3 задачей по умолчанию и это приведет к тому, для работы compile3 нужно выполнить задачу compile2, а для неё в свою очередь нужна compile1, так и получится нужная последовательность.
Также в compile3 можно не указывать compile1 в dependsOn, студия сама поймет, что для второй задачи нужно выполнить первую сначала.
Наример:
{
"version": "2.0.0",
"tasks": [
{
"type": "shell",
"label": "compile1",
"command": "gcc",
"args": [
"-c",
"${file}",
],
"group": "build"
},
{
"type": "shell",
"label": "compile2",
"command": "gnatbind",
"args": [
"${workspaceFolder}/${fileBasenameNoExtension}",
],
"group": "build",
"dependsOn": [
"compile1"
]
},
{
"type": "shell",
"label": "compile3",
"command": "gnatlink",
"args": [
"${workspaceFolder}/${fileBasenameNoExtension}",
],
"group": {
"kind": "build",
"isDefault": true
},
"dependsOn": [
"compile2"
],
}
]
}