设置为"自动"时不显示自定义生成系统



我编写了一个自定义构建系统来编译和运行 cpp 文件,如下所示:

{
"cmd": [
"clang++",
"-o",
"$file_base_name.out",
"$file",
"&&",
"./$file_base_name.out"
],
"selector": "source.cpp",
"quiet": true
}

它没有显示在自动构建系统中,我认为这是由于无法识别selector。我需要更改什么?

事实上,您使用的scope选择器在这里不正确; C++文件的scopesource.c++而不是source.cpp。在编辑文件时,可以使用菜单中的Tools > Developer > Show Scope Name(或关联的键(查看当前光标位置的完整范围。对于构建系统,范围弹出窗口中的第一行是要使用的行。

您的构建还有另一个问题(您在评论中提到了(,即构建无法按预期工作。原因是您使用cmd来执行构建,但您使用的是 shell 构造(&&(。

在生成系统中指定cmd时,需要提供字符串列表;第一项是要执行的程序的名称(此处为clang++(,其余项是要提供给正在执行的程序的参数。

所以在这种情况下,你要求Sublime直接执行clang++,你提供给它的参数之一是&&,它假定它是一个文件的名称。目的是在程序成功编译时尝试运行程序,但使用&&是 shell 的功能(例如bash之类的(而不是clang.

您可以尝试将"shell": true添加到您的构建中,它告诉Sublime它应该尝试通过系统外壳执行cmd;这会将所有内容作为一个整体传递给shell,shell确实知道如何处理&&

另一种选择是改用shell_cmd;在这种情况下,您提供一个字符串来表示您将输入到终端中的命令行。在这种情况下,当您执行构建时,Sublime 会自动将值传递给 shell 执行。

在您的情况下,这可能如下所示:

"shell_cmd": "clang++ -o "${file_base_name}.out" "$file" && "./${file_base_name}.out"",

除了值是单个字符串之外,还必须注意,如果您的文件名可能包含空格,则需要将所有文件名参数括在双引号中,以便 shell 正确处理事情。

相关内容

  • 没有找到相关文章

最新更新