使用 shell 命令作为 VSCode 任务变量值

Using a shell command as VSCode task variable value

我正在尝试在 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/aarch64mylib/amd64.[=23 下有特定于体系结构的版本 mylib =]

我目前的尝试是定义 MYLIB 环境定义中使用的第二个 get_arch 任务,它只运行 uname

{
    "label": "get_arch",
    "type": "shell",
    "command": "uname --m"
}

当然,此任务不是正确的命令,因此 VSCode 未检测到它,因此我的构建任务失败了。我查看了有关变量替换的文档,但他们没有提及是否可以替换 shell 命令。我想这在扩展中是可能的,但我想让事情尽可能简单。

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 的扩展。

如果不想每次都按回车,可以在args部分添加选项useFirstResult: true