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。

相关推荐
爱网络爱Linux7 小时前
【系列】每天一个 Linux 命令(53)startx 命令
linux·rhce·rhca·linux运维·linux命令大全·红帽认证
讳疾忌医丶7 小时前
深度拆解 RocksDB 内核:基于 C++17 的 FIFO 调度状态机与温度阶梯自愈设计
java·c++·算法·架构
ZhengEnCi7 小时前
L2A-一个域名如何访问多台云服务器-子域名、路径前缀与Nginx反向代理选型指南
linux·人工智能
M78佐菲7 小时前
51单片机学习笔记:ds18b20要点整理
linux·笔记·嵌入式硬件·学习·51单片机
2401_868534787 小时前
OpenStack 架构全景:八个核心组件深度拆解
c++·需求分析
高亦真8 小时前
今天是学习嵌入式的第37天
linux·学习·算法
软件课代表CiCi8 小时前
运行库是什么?电脑缺运行库怎么办?c++运行库缺失修复全攻略
开发语言·c++·windows·电脑·dll修复·dll丢失·运行库
一个有温度的技术博主8 小时前
Linux 核心命令速查指南:从文件操作到系统运维
linux·服务器
小小的木头人8 小时前
Docker 环境下迁移 containerd 数据目录:从 `/var/lib/containerd` 到 `/data/containerd`
linux·docker
蒸蒸yyyyzwd9 小时前
从面经中学到的三件事
c++·笔记