Variables VScode:在tasks.json中定义自己的变量

Variables VScode:在tasks.json中定义自己的变量,variables,task,visual-studio-code,Variables,Task,Visual Studio Code,我已经设置了一个tasks.json文件,用于在多个平台上构建项目。所有平台都可以看到项目存储库的相同内容。这可以通过磁盘共享(因为在VM中运行另一个平台)或通过与Git存储库同步来完成。 到目前为止,他们都看到了相同的task.json。但是,有些命令行相当长,并且这些长的命令行在大多数情况下是相同的。 例如: “rm-rf build;mkdir build;cd build;。/configure--with bash malloc=no CFLAGS=\”-O3-fno builtin

我已经设置了一个tasks.json文件,用于在多个平台上构建项目。所有平台都可以看到项目存储库的相同内容。这可以通过磁盘共享(因为在VM中运行另一个平台)或通过与Git存储库同步来完成。 到目前为止,他们都看到了相同的task.json。但是,有些命令行相当长,并且这些长的命令行在大多数情况下是相同的。 例如:

“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/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
当对构建目录或传递给configure etc的参数进行更改时,tasks.json文件只需要在一个位置进行编辑,而不需要在多个位置进行编辑

也许这已经是可能的,但我无法找到如何实现。我尝试使用声明块做了一些事情,但这似乎与problemMatcher紧密相关。您可以找到一些示例,但我找不到tasks.json文件元素的清晰文档以及它们如何交互

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

因此,问题是是否可以定义您自己的变量,以便您可以使用类似于${workspaceRoot}的变量

您可以在tasks.json中定义环境变量:

{
//看https://go.microsoft.com/fwlink/?LinkId=733558
//有关tasks.json格式的文档
“版本”:“2.0.0”,
“选择”:{
“环境”:{
“win_dir”:“构建windows”,
“linux_目录”:“构建”,
“osx_dir”:“构建osx”,
“配置”:“./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”
}
},
“任务”:[
{
“标签”:“示例”,
“类型”:“外壳”,
“命令”:“echo win_dir是$win_dir”
},
]
}

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

另一个答案不起作用,因为至少在windows上,shell不会替换作为参数给出的环境变量。
${env:…}
答案注释中建议的变量不会使用
tasks.json
本身中设置的环境变量替换,只能使用预先存在的变量。但是,您可以在
settings.json
中添加自定义设置,并使用
${config:…}
引用
tasks.json
中的设置

e、 g.
settings.json

{
"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 ${config:win_dir}; mkdir ${config:win_dir}; cd ${config:win_dir}; ${config:configure}"]
        },
        "linux": {
            "args": ["-c", "rm -rf ${config:linux_dir}; mkdir ${config:linux_dir}; cd ${config:linux_dir}; ${config:configure}"]
        },
        "osx": {
            "args": ["-c", "rm -rf ${config:osx_dir}; mkdir ${config:osx_dir}; cd ${config:osx_dir}; ${config:configure}"]
        },
        "isBuildCommand": true,
        "problemMatcher": "$make-compile"
    },
    ... others tasks using the variables
tasks.json
中:

{
"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 ${config:win_dir}; mkdir ${config:win_dir}; cd ${config:win_dir}; ${config:configure}"]
        },
        "linux": {
            "args": ["-c", "rm -rf ${config:linux_dir}; mkdir ${config:linux_dir}; cd ${config:linux_dir}; ${config:configure}"]
        },
        "osx": {
            "args": ["-c", "rm -rf ${config:osx_dir}; mkdir ${config:osx_dir}; cd ${config:osx_dir}; ${config:configure}"]
        },
        "isBuildCommand": true,
        "problemMatcher": "$make-compile"
    },
    ... others tasks using the variables

您可能希望编辑此答案,因为$env:win_dir是访问这些用户定义变量的正确方法。我同意w/
patstew
在另一个答案中,在
settings.json
中定义自定义变量并将其展开为
${config:myVariable}
对我来说是可行的。它应该是“${env:win dir”,但它无论如何都不起作用。Github上的相关问题:。