我有这个用户构建的系统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]
。
有人知道我能让构建系统变体工作吗?
这对您不起作用,因为主构建(和其他变体(使用shell_cmd
来指定要执行的内容,但该变体使用cmd
。你不应该把它们混合在一个构建中。
变体在被选中时将其密钥应用于基本构建的顶部,这允许它们覆盖顶级构建密钥并更改构建。主构建使用shell_cmd
,但Terminal
变体使用cmd
。
当应用变体密钥时,这使得构建中同时具有shell_cmd
和cmd
,并且在内部exec
命令更倾向于shell_cmd
而不是cmd
,这意味着对于您的变体,它实际上仍在执行顶级构建。
这在控制台中可见。执行构建后,如果您在Sublime控制台(View > Show Console
(中进行检查,您可以看到一个日志,显示它执行了什么命令。它实际上是在执行顶级构建,即编译,而不是其他。
要解决此问题,您需要将变体调整为也使用shell_cmd
,或者在变体内部添加"shell_cmd": null
以覆盖它,这将导致它使用cmd
。