我有这个用户构建系统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
}
]
}
当我选择C Single File - Terminal
构建系统并进行构建时,终端不会弹出,并且在Sublime输出中显示[Finished in 0.3s]
。
有人知道我可以使用构建系统变体吗?
答案 0 :(得分:1)
这对您不起作用,因为主版本(和其他变体)使用shell_cmd
指定要执行的内容,但是该变体使用cmd
。您不应该在构建中混合使用它们。
变量在被选择时将其键应用于基础构建的顶部,这使他们可以覆盖顶级构建键并更改构建。主版本使用shell_cmd
,而Terminal
变体使用cmd
。
应用变体键时,该版本在版本中同时具有shell_cmd
和cmd
,并且内部exec
命令胜过shell_cmd
{1}},这意味着对于您的变体,它实际上仍在执行顶级构建。
这在控制台中可见。执行构建后,如果签入Sublime控制台(cmd
),则会看到一条日志,向您显示执行了什么命令。它实际上是在执行顶层构建,正在编译,仅此而已。
要解决该问题,您需要调整变体以也使用View > Show Console
,或者在变体内部添加shell_cmd
以覆盖它,这将导致它使用"shell_cmd": null
代替。