Sublime Text 中的 build 编译系统详解

简介

这篇文章介绍 Sublime Text 中的 Build System,掌握如何配置编译系统可以提高我们开发和测试程序的效率。 下面主要是通过 C++ build 的一个配置案例来理解它是怎么运作的:

首先,我们通过 prv 来打开 C++ Build 的配置文件

可以看到,定义了 C 和 C++ 两个不同的 build 文件,我们打开其中一个

C++ Single File.sublime-build

json 复制代码
{
    "shell_cmd": "g++ \"${file}\" -o \"${file_path}/${file_base_name}\"",
    "file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",
    "working_dir": "${file_path}",
    "selector": "source.c, source.c++",

    "variants":
    [
        {
            "name": "Run",
            "shell_cmd": "g++ \"${file}\" -o \"${file_path}/${file_base_name}\" && \"${file_path}/${file_base_name}\""
        }
    ]
}

• 这个字段指定了构建 C++ 文件时执行的命令。 • 在这个配置中,命令是:

bash 复制代码
g++ "${file}" -o "${file_path}/${file_base_name}"

• g++:GNU C++ 编译器,用于编译当前文件。

${file}:表示当前在 Sublime Text 中打开的 C++ 文件的完整路径。

-o "${file_path}/${file_base_name}"

• -o:指定输出文件。

${file_path}:是当前文件所在的文件夹路径。

${file_base_name}:是文件名(不包含扩展名)。

• 这个命令将在源文件的同一目录下生成一个与源文件同名的可执行文件(但没有 .cpp 扩展名)。

2. file_regex:

• 这是一个正则表达式,用于帮助 Sublime Text 解析编译器的错误信息,并让你能够快速定位到出错的文件和行号。

• 在这个配置中,正则表达式是:

ini 复制代码
^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$

解析如下:

^(..[^:]*)::捕获文件路径(直到第一个冒号 : 为止)。

([0-9]+)::捕获行号。

([0-9]+)?:可选地捕获列号(如果提供)。

(.*):捕获编译器的错误信息。

这使得你在点击编译输出中的错误时,能够直接跳转到相应的代码行。

3. working_dir:

• 指定执行 shell 命令时的工作目录。

${file_path} 将工作目录设置为当前打开的 C++ 文件所在的目录。

4. selector:

• 此字段定义了构建系统适用于哪些文件类型。

• 在这个配置中,选择器是:

复制代码
source.c, source.c++

source.c 是什么意思?

这是 scope selector(域选择器),前面的 source 就表示域或范围。 Sublime Text 中 scope 是树状结构组织的,source 表示文件类型或者语言类型。

比如:

• source.c: 表示 C 语言的源文件

• source.c++: 表示 C++ 语言的源文件

Sublime Text 还有其他许多不同的 scope selectors,比如:

编程语言(Programming language):

• source.python: Python files (.py).

• source.go: Go files (.go).

标记语言(Markup language):

• text.html: HTML files (.html).

• text.xml: XML files (.xml).

• text.markdown: Markdown files (.md).

配置文件(Configuration Files):

• source.json: JSON files (.json).

• source.yaml: YAML files (.yaml).

纯文本(Plain Text):

• text.plain: Plain text files (.txt).

特殊文件类型(Special Cases):

• text.html.markdown: Markdown files with HTML support.

• text.xml.xsl: XSL (eXtensible Stylesheet Language) files.

上面的 scope 都是文件类型的,其实 Sublime Text 中还有其他类型的 scope,比如:

• keyword.control.c++: 表示 C++ 语言中的控制关键字(比如 if, for 等等).

• string.quoted.double.c++: 表示 C++ 中的双引号字符串

怎么查看当前文本的 scope?

把光标放在编辑区的某段字符上

  • 在 Windows/Linux 中,我们可以按 Ctrl + Alt + Shift + P

  • 在 MacOS 中,我们可以按 CMD + Alt + P

5. variants:

• variants 部分定义了额外的构建配置,你可以手动触发这些配置。

• 在这个配置中,有一个名为 "Run" 的变体。

• name:该变体的名称,可以从构建菜单中选择(或使用快捷键触发)。

• shell_cmd:这个命令首先编译文件,然后如果编译成功,运行生成的可执行文件:

bash 复制代码
g++ "${file}" -o "${file_path}/${file_base_name}" && "${file_path}/${file_base_name}"

• &&:确保只有在编译成功后才运行可执行文件。

全文完!

如果你喜欢我的文章,欢迎关注我的微信公众号 deliverit。

相关推荐
感哥5 小时前
C++ 多态
c++
沐怡旸12 小时前
【底层机制】std::string 解决的痛点?是什么?怎么实现的?怎么正确用?
c++·面试
River41615 小时前
Javer 学 c++(十三):引用篇
c++·后端
轻松Ai享生活17 小时前
5 节课深入学习Linux Cgroups
linux
感哥17 小时前
C++ std::set
c++
侃侃_天下18 小时前
最终的信号类
开发语言·c++·算法
christine-rr18 小时前
linux常用命令(4)——压缩命令
linux·服务器·redis
三坛海会大神55518 小时前
LVS与Keepalived详解(二)LVS负载均衡实现实操
linux·负载均衡·lvs
東雪蓮☆18 小时前
深入理解 LVS-DR 模式与 Keepalived 高可用集群
linux·运维·服务器·lvs
博笙困了18 小时前
AcWing学习——差分
c++·算法