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

我正在尝试在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}"
            }
        },}
]

在我的情况下,我将在mylibmylib/aarch64 etc 下使用mylib/amd64的特定于体系结构的版本。

到目前为止,我一直试图定义在get_arch的环境定义中使用的第二个MYLIB任务,该任务仅运行uname

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

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

darlayu 回答:使用Shell命令作为VSCode任务变量值

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

,

如果不想每次都按Enter键,则可以在useFirstResult: true部分中添加选项args

本文链接:https://www.f2er.com/3145327.html

大家都在问