Variables VScode:在tasks.json中定义自己的变量
我已经设置了一个tasks.json文件,用于在多个平台上构建项目。所有平台都可以看到项目存储库的相同内容。这可以通过磁盘共享(因为在VM中运行另一个平台)或通过与Git存储库同步来完成。 到目前为止,他们都看到了相同的task.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
“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上的相关问题:。