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。

相关推荐
我不是代码教父12 分钟前
[原创](Modern C++)现代C++的关键性概念: 流格式化
c++·字符串格式化·流格式化·cout格式化
利刃大大29 分钟前
【回溯+剪枝】找出所有子集的异或总和再求和 && 全排列Ⅱ
c++·算法·深度优先·剪枝
子燕若水1 小时前
mac 手工安装OpenSSL 3.4.0
c++
*TQK*1 小时前
ZZNUOJ(C/C++)基础练习1041——1050(详解版)
c语言·c++·编程知识点
ElseWhereR1 小时前
C++ 写一个简单的加减法计算器
开发语言·c++·算法
*TQK*2 小时前
ZZNUOJ(C/C++)基础练习1031——1040(详解版)
c语言·c++·编程知识点
※DX3906※2 小时前
cpp实战项目—string类的模拟实现
开发语言·c++
深度Linux2 小时前
Linux网络编程中的零拷贝:提升性能的秘密武器
linux·linux内核·零拷贝技术
萌の鱼3 小时前
leetcode 2080. 区间内查询数字的频率
数据结构·c++·算法·leetcode
xianwu5434 小时前
反向代理模块jmh
开发语言·网络·数据库·c++·mysql