放入变体时,Sublime Text构建系统不起作用

问题描述

我有这个用户构建系统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","shell": true
        }
    ]
}

当我选择C Single File - Terminal构建系统并进行构建时,终端不会弹出,并且在Sublime输出显示[Finished in 0.3s]

有人知道我可以使用构建系统变体吗?

解决方法

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

变量在被选择时将其键应用于基础构建的顶部,这使他们可以覆盖顶级构建键并更改构建。主版本使用shell_cmd,而Terminal变体使用cmd

应用变体键时,该版本在版本中同时具有shell_cmdcmd,并且内部exec命令胜过shell_cmd {1}},这意味着对于您的变体,它实际上仍在执行顶级构建。

这在控制台中可见。执行构建后,如果签入Sublime控制台(cmd),则会看到一条日志,向您显示执行了什么命令。它实际上是在执行顶层构建,正在编译,仅此而已。

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...