Как разделить задачи между папками рабочей области vscode?

Мой проект VSCode - это мультикорневое рабочее пространство. То есть у меня есть несколько рабочих пространств, каждое в отдельных каталогах, у каждого есть папка .vscode.

Я пытаюсь создать рабочую область с зависимостями между каждым модулем с помощью задач сборки.

Я попытался установить параметр dependsOn для задачи, но это дает следующую ошибку:

Couldn't resolve dependent task 'build FOO' in workspace folder 'BAR' (здесь задача сборки BAR зависит от FOO)

Есть ли лучший / правильный / какой-либо способ достичь моей цели?


person alex    schedule 30.07.2018    source источник


Ответы (2)


В вашем .code-workspace файле может быть раздел tasks. Там вы можете создать задачу типа «Построить все» и определить dependsOn задачи. Однако там вы также не можете ссылаться на задачи сборки из папок рабочей области (для меня это звучит как разумная функция, и я считаю, что они должны реализовать ее в какой-то момент). Мой обходной путь - скопировать соответствующую задачу сборки из файлов подзадач в файл .code-workspace и сослаться на них в моей задаче «Собрать все».

Пример .code-workspace:

{
    "folders": [
        {
            "path": "proj-A"
        },
        {
            "path": "proj-B"
        }
    ],
    "tasks": {
        "version": "2.0.0",
        "tasks": [
            {
                "type": "shell",
                "label": "Build A",
                "command": "make",
                "args": ["-j4"],
                "options": {
                    "cwd": "${workspaceFolder}/../proj-A",
                },
                "problemMatcher": [
                    "$gcc"
                ],
                "group": "build",
            },
            {
                "type": "shell",
                "label": "Build B",
                "command": "make",
                "args": ["-j4"],
                "options": {
                    "cwd": "${workspaceFolder}/../proj-B",
                },
                "problemMatcher": [
                    "$gcc"
                ],
                "group": "build",
            },
            {
                "type": "shell",
                "label": "Build all",
                "command": "echo",
                "args": ["Building everything"],
                "options": {},
                "problemMatcher": [
                    "$gcc"
                ],
                "group": {
                    "kind": "build",
                    "isDefault": true
                },
                "dependsOrder":"sequence",
                "dependsOn": ["Build A", "Build B"]
            },
        ]
    }
}

Обратите внимание на параметр cwd в отдельных задачах сборки. ${workspaceFolder}, похоже, установлен на первый путь в разделе "folders". Вы также можете установить cwd на абсолютные пути.

Это немного взломано, и тот факт, что нужно копировать задачи сборки, некрасив, но на данный момент он работает, и его можно легко адаптировать, как только можно будет ссылаться на задачи файлов подзадач.

person felwolff    schedule 14.11.2019
comment
Спасибо, это то, что я хотел. Вы можете использовать ${workspaceFolder:proj-B}, чтобы определить конкретную папку рабочего пространства, которая будет использоваться вместо первой. - person Lucas Basquerotto; 28.04.2021

Убедитесь, что новый VSC уровень Задачи может помочь разделить задачу.

tasks.json теперь поддерживается на уровне пользовательских настроек.

Вы можете запустить команду Tasks: Open User Tasks, чтобы создать задачи уровня пользователя.
Эти задачи будут доступны для всех папок и рабочих областей.
Здесь поддерживаются только типы задач оболочки и процессов.

person VonC    schedule 03.02.2020
comment
Отлично, работает хорошо, спасибо! - person mike nelson; 21.03.2021