ST3上的自动构建系统未显示我的自定义构建

问题描述 投票:0回答:1

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

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

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

sublimetext3 sublimetext build-system
1个回答
0
投票

实际上您正在使用的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_cmd;在这种情况下,您将提供一个字符串,代表您要输入到终端的命令行。在这种情况下,当您执行构建时,Sublime会自动将该值传递给Shell以执行。

在您的情况下,可能看起来像:

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

除了作为单个字符串的值之外,还必须注意,如果文件名可能包含空格,则需要将所有文件名参数都用双引号引起来,以便外壳程序能够正确处理。

© www.soinside.com 2019 - 2024. All rights reserved.