我正在尝试在tasks.json
中定义一个VSCode任务,以适应VSCode运行所在的特定体系结构。为此,我想将架构设为uname --m
(例如 “ aarch64”或“ amd64”)。我的目标是将uname
的输出插入到这样的环境变量中
"version": "2.0.0",
"tasks": [
{
"label": "build",
"type": "shell",
"command": "cmake",
"args": [
"-DMYLIB_INCLUDE_DIR=$MYLIB/include",
"-DMYLIB_LIBRARY=$MYLIB/lib"
],
"options": {
"env": {
"MYLIB": "${workspaceFolder}/mylib/${command:get_arch}"
}
},
}
]
在我的情况下,我将在mylib
,mylib/aarch64
, etc 下使用mylib/amd64
的特定于体系结构的版本。
到目前为止,我一直试图定义在get_arch
的环境定义中使用的第二个MYLIB
任务,该任务仅运行uname
。
{
"label": "get_arch",
"type": "shell",
"command": "uname --m"
}
当然,此任务不是正确的命令,因此VSCode不会检测到它,并且我的构建任务失败。我查看了有关变量替换的文档,但他们没有提及是否有可能替换 shell命令。我想从扩展中可以做到这一点,但我想让事情尽可能简单。
答案 0 :(得分:2)
此extension提供了一种将任意shell命令作为VS Code命令启动的方法:
"tasks": [
{
"label": "test_arch",
"type": "shell",
"command": "echo",
"args": [
"${MYARCH}"
],
"options": {
"env": {
"MYARCH": "${input:get_arch}"
}
},
"problemMatcher": []
},
],
"inputs": [
{
"id": "get_arch",
"type": "command",
"command": "shellCommand.execute",
"args": {
"command": "uname -m"
}
}
]
我发现的一个缺点是,在选择器中提示命令结果时,必须再次按Enter键。除此之外,这是实现所需功能的最直接方法,但是它可以在许多类似情况下使用。
或者,您可以使用Arch Picker添加pickString input或创建仅添加单个命令GetArch的扩展。
答案 1 :(得分:2)
如果不想每次都按Enter键,则可以在useFirstResult: true
部分中添加选项args
。