Hon*_*ang 7 json visual-studio-code
我是 Visual Studio Code 的新手,并尝试编写tasks.json来执行我的自定义构建任务,以便我可以通过“终端/运行构建任务...”来构建我的项目。
但是,我的构建任务由多个命令组成,例如(例如 Windows 脚本):
preBuildTask1.bat
preBuildTask2.bat
...
build.bat
...
postBuildTask1.bat
postBuildTask2.bat
...
Run Code Online (Sandbox Code Playgroud)
我看起来 task.json 只允许我为“ command ”属性放置一个命令,例如:
"tasks": [
{
"label": "emcc",
"type": "shell",
"command": "buildTask.ps1",
"group": {
"kind": "build",
"isDefault": true
}
},
]
}
Run Code Online (Sandbox Code Playgroud)
我当前的工作是将所有子任务放入 powershell 脚本中,然后在tasks.json 中调用该脚本,如上面代码中所示的“ buildTask.ps1 ”。如果我可以直接为单个命令属性编写多个任务,那就更方便了。有人知道该怎么做吗?谢谢。
感谢Mark的建议,我找到了在VS代码的tasks.json中定义具有多个子任务的命令的解决方案:
解决方案 1:只需将所有任务放在命令值中,并用“;”分隔:
"command": "task1;task2;task3"
Run Code Online (Sandbox Code Playgroud)
方案二:将子任务定义为环境变量,然后一一调用。例如,在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"
}
},
Run Code Online (Sandbox Code Playgroud)
然后,调用它们:
"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": []
}
]
Run Code Online (Sandbox Code Playgroud)
当子任务命令行很长并且不想在定义命令时写入超长字符串时,第二种解决方案很有用。
当然,我们也可以创建一个脚本然后调用它,这是我最初的解决方案。
| 归档时间: |
|
| 查看次数: |
9412 次 |
| 最近记录: |