繁体   English   中英

如何在 macOS 上的 Sublime Text 3 上自动运行 C++11?

[英]How to Automatically Run C++11 on Sublime Text 3 on macOS?

我想使用 Sublime Text 3 构建系统自动运行 C++:

当我手动设置构建系统时它起作用:

> Tools > Build System > C++11

我应该改变什么才能设置,

> Tools > Build System > Automatic 

并运行 C++11?

C++11.build-system

{
    "cmd": ["g++", "-std=c++11", "-o", "${file_path}/${file_base_name}", "${file}"],
    "file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",
    "working_dir": "${file_path}",
    "selector": "source.c, source.c++",
    "quiet": true,
    "variants":
    [
        {
            "name": "Run",
            "cmd": ["bash", "-c", "g++ '${file}' -o '${file_path}/${file_base_name}' && '${file_path}/${file_base_name}'"]
        },
        {
            "name": "Build without C++11",
            "cmd": ["g++ '${file}' -o '${file_path}/${file_base_name}'"]
        }
    ]
}

测试

#include <stdio.h>

int main()
{
    printf("Hello World!\n");
}

输出(手动)

Hello World!

输出(自动)

[Finished in 0.1s]

我的猜测是它可能会使用,

> Tools > Build System > C++ Single File 

C++ 单个 File.build-system:

// {
//  "shell_cmd": "g++ \"${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": "g++ \"${file}\" -o \"${file_path}/${file_base_name}\" && \"${file_path}/${file_base_name}\""
//      }
//  ]
// }

{
    "cmd": ["g++", "-std=c++11", "-o", "${file_path}/${file_base_name}", "${file}"],
    "file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",
    "working_dir": "${file_path}",
    "selector": "source.c, source.c++",

    "variants":
    [
        {
            "name": "Run",
            "cmd": ["bash", "-c", "g++ '${file}' -o '${file_path}/${file_base_name}' && '${file_path}/${file_base_name}'"]
        },
    {
            "name": "Run with C++11",
            "cmd": ["bash", "-c", "g++ '${file}' -std=c++11 -o '${file_path}/${file_base_name}' && '${file_path}/${file_base_name}'"]
        },
        {
            "name": "Build without C++11",
            "cmd": ["g++ '${file}' -o '${file_path}/${file_base_name}'"]
        }
    ]
}

Sublime 根据使用的语法为Automatic选择构建系统,它与构建系统中的selector相关联。 对于 C,这是source.c ,对于 C++ 是source.c++ ,依此类推。

当您选择Tools > Build ,Sublime 将当前文件的语法与它当前知道的所有构建系统进行匹配,并基于此进行选择。 这里可能会发生一些不同的事情:

  1. 没有构建系统与文件的范围相关联; 执行构建时,未选择No Build System并且状态栏中显示No Build System 在这种情况下,什么也不会发生。

  2. 恰好有一个与范围相关联的构建; 该构建被选择并直接执行。

  3. 有多个构建与范围相关联。 第一次发生这种情况时,Sublime 会通过一个快速面板提示您,询问您要执行的构建,然后执行该构建。 只要您将构建系统设置为相同,未来的构建将继续自动选择和使用该构建。

请务必注意,当您在构建系统中使用variant时,尽管只有一个sublime-build文件,但该文件定义了多个构建,因此在这种情况下,上面的 #3 自动适用。

从上面查看您的构建系统来看,它似乎应该可以正常工作,特别是如果在“ Tools > Build System菜单中手动选择构建系统符合您的预期。

您的自定义构建系统启用了quiet: true ,这会阻止 Sublime 显示执行时间(以及构建失败的错误信息),但在自动构建的情况下,您上面的输出看起来像是在打印[Finished]

从这一点我同意,在这种情况下,Sublime 选择了一个与您预期不同的构建系统,这可能确实是内部构建(尽管根据您上面的输出,您可能已经修改了它)。

由于您提供的构建在您手动执行时有效,我最好的猜测是您已经遇到了上面的情况 3; 有多个构建与文件的范围相匹配。

在这种情况下,使用Tools > Build With...将使 Sublime 再次提示您选择所需的构建。 这样做并确保选择所需的构建可能会为您解决问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM