放入变体时,Sublime Text 构建系统无法正常工作

Sublime Text build system not working when put in variants

我有这个用户构建系统 C Terminal.sublime-build 来编译和 运行 c 程序:

{
    "cmd": ["gcc.exe", "-std=c11", "-o", "$file_base_name", "$file", "&&", "start", "cmd", "/c", "$file_base_name & echo. & echo. & pause"],
    "shell": true,
    "selector": "source.c"
}

我用它来编译和 运行 我的一些 C 单个文件,它工作得很好。

但是,当我将它作为这样的变体放入默认 C Single File.sublime-build 时:

{
    "shell_cmd": "gcc \"${file}\" -o \"${file_path}/${file_base_name}\"",
    "file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",
    "working_dir": "${file_path}",
    "selector": "source.c",

    "variants":
    [
        {
            "name": "Run",
            "shell_cmd": "gcc \"${file}\" -o \"${file_path}/${file_base_name}\" && \"${file_path}/${file_base_name}\""
        },

        {
            "name": "Terminal",
            "cmd": ["gcc.exe", "-std=c11", "-o", "$file_base_name", "$file", "&&", "start", "cmd", "/c", "$file_base_name & echo. & echo. & pause"],
            "shell": true
        }
    ]
}

当我 select C Single File - Terminal 构建系统并构建时,终端没有弹出,它在 Sublime 输出中显示 [Finished in 0.3s]

有谁知道我可以让构建系统变体工作吗?

这对您不起作用,因为主构建(和其他变体)使用 shell_cmd 来指定要执行的内容,但该变体使用 cmd 代替。你不应该在构建中混合使用它们。

变体在被选中时将它们的密钥应用到基础构建之上,这允许它们覆盖顶级构建密钥并更改构建。主构建使用 shell_cmd,但 Terminal 变体使用 cmd.

当应用变体键时,这使得构建在构建中同时具有 shell_cmdcmd,并且在内部 exec 命令有利于 shell_cmd超过 cmd,这意味着对于您的变体,它实际上仍在执行顶级构建。

这在控制台中可见。执行构建后,如果你检查 Sublime 控制台 (View > Show Console),你可以看到一个日志,显示它执行了什么命令。它实际上是在执行顶级构建,即编译而不是其他。

要解决这个问题,您需要调整变体以也使用 shell_cmd 代替,或者在变体内部添加 "shell_cmd": null 来覆盖它,这将导致它使用 cmd 代替。