我是Visual Studio Code的新手,正在尝试编写 tasks.json 来执行我的自定义生成任务,以便可以通过“ Terminal / Run Build Task ...”来生成项目。
但是,我的构建任务由多个命令组成,例如(例如Windows脚本):
preBuildTask1.bat
preBuildTask2.bat
...
build.bat
...
postBuildTask1.bat
postBuildTask2.bat
...
我看起来task.json仅允许我为“ command ”属性放一个命令,例如:
"tasks": [
{
"label": "emcc",
"type": "shell",
"command": "buildTask.ps1",
"group": {
"kind": "build",
"isDefault": true
}
},
]
}
我当前的解决方法是将所有子任务放在Powershell脚本中,然后在task.json中调用该脚本,如上面代码中显示的“ buildTask.ps1 ”。 如果我可以为单个命令属性直接编写多个任务,将会更加方便。有人知道该怎么做吗?谢谢。
答案 0 :(得分:1)
感谢Mark的建议,我在VS代码的 tasks.json 中找到了定义带有多个子任务的命令的解决方案:
解决方案1 :只需将所有任务放入命令值中,并用“;”分隔:
"command": "task1;task2;task3"
解决方案2 :将子任务定义为环境变量,然后逐个调用它们。例如,在Windows上,我们可以使用powershell的命令 Invoke-Expression :
首先,将所有子任务定义为环境变量:
"options": {
"env": {
"TASK_1": "emsdk_env",
"TASK_2": "emcc canvas.cpp -o canvas.html --shell-file canvas_shell.html -s NO_EXIT_RUNTIME=1 -s EXTRA_EXPORTED_RUNTIME_METHODS='[\"ccall\", \"cwrap\"]'",
"TASK_3": "http-server -p 8000"
}
},
然后调用它们:
"tasks": [
{
"label": "emcc",
"type": "shell",
"command": "Invoke-Expression $env:TASK_1; Invoke-Expression $env:TASK_2; Invoke-Expression $env:TASK_3",
"group": {
"kind": "build",
"isDefault": true
},
"problemMatcher": []
}
]
当子任务命令行很长并且在定义命令时不想写超长字符串时,第二种解决方案很有用。
当然,我们也可以创建一个脚本然后调用它,这是我最初的解决方案。