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。

相关推荐
ULTRA??5 分钟前
C加加中的结构化绑定(解包,折叠展开)
开发语言·c++
vip45110 分钟前
Linux 经典面试八股文
linux
大霞上仙12 分钟前
Ubuntu系统电脑没有WiFi适配器
linux·运维·电脑
凌云行者40 分钟前
OpenGL入门005——使用Shader类管理着色器
c++·cmake·opengl
凌云行者44 分钟前
OpenGL入门006——着色器在纹理混合中的应用
c++·cmake·opengl
~yY…s<#>1 小时前
【刷题17】最小栈、栈的压入弹出、逆波兰表达式
c语言·数据结构·c++·算法·leetcode
孤客网络科技工作室1 小时前
VMware 虚拟机使用教程及 Kali Linux 安装指南
linux·虚拟机·kali linux
可均可可2 小时前
C++之OpenCV入门到提高004:Mat 对象的使用
c++·opencv·mat·imread·imwrite
颇有几分姿色2 小时前
深入理解 Linux 内存管理:free 命令详解
linux·运维·服务器
白子寰2 小时前
【C++打怪之路Lv14】- “多态“篇
开发语言·c++