我已经设置了一个tasks.json文件,用于在多个平台上构建项目。所有平台都看到项目存储库的相同内容。这可以通过磁盘共享完成,因为在VM中运行另一个平台,或者通过与Git存储库同步。 到目前为止,他们都看到了同样的任务。然而,一些命令行相当长,并且这些长行在大多数情况下是相同的。 例如:
"rm -rf build; mkdir build; cd build; ../configure --with-bash-malloc=no CFLAGS=\"-O3 -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free\" LDFLAGS=-L/usr/local/lib LIBS=\"-ltcmalloc -lcurl\" CC=clang
不同的平台也有类似的路线。
对于不同的平台,配置部分总是相同的,因此将这个常见部分分解出来会很好。因此问题是,是否可以定义自己的变量,因此您可以使用类似${workspaceRoot}
的方法。
因此定义某处
"win_dir": "build_windows",
"linux_dir": "build",
"osx_dir": "build_osx",
"configure": "../configure --with-bash-malloc=no CFLAGS=\"-O3 -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free\" LDFLAGS=-L/usr/local/lib LIBS=\"-ltcmalloc -lcurl\" CC=clang"
然后写
"tasks": [
{
"taskName": "configure",
"command": "bash",
"windows": {
"args": ["-c", "rm -rf ${win_dir}; mkdir ${win_dir}; cd ${win_dir}; ${configure}"]
},
"linux": {
"args": ["-c", "rm -rf ${linux_dir}; mkdir ${linux_dir}; cd ${linux_dir}; ${configure}"]
},
"osx": {
"args": ["-c", "rm -rf ${osx_dir}; mkdir ${osx_dir}; cd ${osx_dir}; ${configure}"]
},
"isBuildCommand": true,
"problemMatcher": "$make-compile"
},
... others tasks using the variables
当对build目录或传递给configure etc的参数进行更改时,tasks.json文件只需要在一个地方编辑,而不是很多。
也许已经有可能,但我无法找到方法。我尝试用declares块做一些事情,但这似乎很难与problemMatcher绑定。您可以找到一些示例,但我找不到tasks.json文件元素及其交互方式的明确文档。
也许我错过了什么,请教育我!
答案 0 :(得分:2)
因此问题是,是否可以定义自己的变量,因此您可以使用它们类似于$ {workspaceRoot}。
您可以在tasks.json中定义环境变量:
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"options": {
"env": {
"win_dir": "build_windows",
"linux_dir": "build",
"osx_dir": "build_osx",
"configure": "../configure --with-bash-malloc=no CFLAGS=\"-O3 -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free\" LDFLAGS=-L/usr/local/lib LIBS=\"-ltcmalloc -lcurl\" CC=clang"
}
},
"tasks": [
{
"label": "Example",
"type": "shell",
"command": "echo win_dir is $win_dir"
},
]
}
然后,您还可以使用环境匹配来引用相关的环境变量。