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 шт):

Автор решения: Exploding Kitten

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"
            ],
        }
    ]
}
→ Ссылка