VScode:在tasks.json

时间:2017-06-01 09:13:45

标签: variables task visual-studio-code

我已经设置了一个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文件元素及其交互方式的明确文档。

也许我错过了什么,请教育我!

1 个答案:

答案 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" }, ] }

然后,您还可以使用环境匹配来引用相关的环境变量。