放入变体时,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_cmd
和 cmd
,并且在内部 exec
命令有利于 shell_cmd
超过 cmd
,这意味着对于您的变体,它实际上仍在执行顶级构建。
这在控制台中可见。执行构建后,如果你检查 Sublime 控制台 (View > Show Console
),你可以看到一个日志,显示它执行了什么命令。它实际上是在执行顶级构建,即编译而不是其他。
要解决这个问题,您需要调整变体以也使用 shell_cmd
代替,或者在变体内部添加 "shell_cmd": null
来覆盖它,这将导致它使用 cmd
代替。
我有这个用户构建系统 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_cmd
和 cmd
,并且在内部 exec
命令有利于 shell_cmd
超过 cmd
,这意味着对于您的变体,它实际上仍在执行顶级构建。
这在控制台中可见。执行构建后,如果你检查 Sublime 控制台 (View > Show Console
),你可以看到一个日志,显示它执行了什么命令。它实际上是在执行顶级构建,即编译而不是其他。
要解决这个问题,您需要调整变体以也使用 shell_cmd
代替,或者在变体内部添加 "shell_cmd": null
来覆盖它,这将导致它使用 cmd
代替。