2.编译运行 C++ 程序首先 Sublime 自身可以直接编译运行程序 , 方法是按快捷键 Ctrl+B 或者点击菜单栏 Tools->Build 。另外 , 也可以在 Tools->Build System 选择编译系统 。还可以按快捷键 Ctrl+Shift+B 或者点菜单栏 Tools->Build With 选择用什么编译 。运行结束后会在控制台中显示结果和运行时间 。
![Re:从零开始教你使用 Sublime Text](http://pic.ikafan.com/imgp/L3Byb3h5L2h0dHBzL3BpYy5pbWcuc2tpLzE2NjgzMTA5NDYucG5n.jpg)
文章插图
![Re:从零开始教你使用 Sublime Text](http://pic.ikafan.com/imgp/L3Byb3h5L2h0dHBzL3BpYy5pbWcuc2tpLzE2NjgzMTA5NDMucG5n.jpg)
文章插图
但是自带的编译有一个问题 , 就是无法输入 。如果你写一个 A+B,你会发现无法在下方的控制台中输入任何字符 。
解决方法有两种,一种是自己新建一个编译系统,一种是安装 CppFastOlympicCoding 插件 。第二种方法可以查看 3-6.CppFastOlympicCoding 。这里提一下第一种方法 。
首先点击菜单栏 Tools->Build System->New Build System,然后在打开的界面中就可以自己写一个编译系统 。具体的格式为:
{ "命令行类型": "命令", "file_regex": "一个正则表达式,用于显示编译错误信息", "working_dir": "执行命令的目录", "selector": "适用范围", "encoding": "编码", "variants"://其他变体 [ { "name": "名称", "命令行类型": "命令" }, //... ]}其中 variants 并不是必要的 。
具体如何使用?举个例子,这是我在 windows 下使用的编译系统:
{ "cmd": ["cmd","/c","g++","-Wall","-std=c++14","-O2","${file}","-o","${file_path}/${file_base_name}","&&","start","cmd","/c","${file_path}/${file_base_name} & echo.&pause"], "file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$", "working_dir": "${file_path}", "selector": "source.c,source.c++", "encoding": "cp936"}windows 下的命令行为 cmd,所以第一行为 "cmd": , 后面的命令可以是一个字符串,也可以是字符数组 。其中 ${file} 为当前文件的地址,${file_path} 为目录 , ${file_base_name} 为文件去掉后缀的名称 。举例来说,如果我的编译对象是 C:\Users\[数据删除]\Desktop\a.cpp,那么 ${file} 对应的就是 'C:\Users\[数据删除]\Desktop\a.cpp' , ${file_path} 就是 C:\Users\[数据删除]\Desktop,${file_base_name} 就是 a 。所以例子第一行的意义就是用 g++编译当前文件并在 cmd 中运行可执行文件,并在运行结束后执行 echo.$pause 命令 。其效果相当于 DevC++ 中的编译运行 。需要注意这里不能写成 "cmd /c g++ -Wall -std=c++14 -O2 ${file} -o ${file_path}/${file_base_name} && start cmd /c ${file_path}/${file_base_name} & echo.&pause" , 因为会出现两个 & 之间的优先级错误 。
例子的第二行用于显示编译错误,效果如下:
![Re:从零开始教你使用 Sublime Text](http://pic.ikafan.com/imgp/L3Byb3h5L2h0dHBzL3BpYy5pbWcuc2tpLzE2NjgzMTI3MzIucG5n.jpg)
文章插图
主要效果是显示中间的红框,如果去掉这句话则只会在控制台中显示错误信息 。
关于为什么正则表达式是 ^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$?其实是用来匹配错误信息的 。
前面两个 .. 匹配了 C: , 然后 [^:]* 往后一直匹配到第一个冒号前,所以在上图中 (..[^:]*) 匹配了 D:\0-mine\az.cpp 。然后 :([0-9]+):?([0-9]+)?:? 匹配了行号和列号,即图中的 :12:28:,之后一个空格一直匹配到末尾,即为具体的错误信息 error: expected ';' before 'printf' 。
第三行 working_dir 表示要执行命令的位置,"working_dir": "${file_path}" 相当于在当前文件目录中执行该命令 。
第四行 selector 表示这个编译系统的适用范围,格式为 source.后缀,如我要给 C++ 程序使用则为 source.c++ 。当没有填写时则默认范围为所有文件 。
推荐阅读
- 应不应该让小学生挣钱,你怎么看(当代小学生已经开始搞钱了)
- 小学生如何赚零花钱(学生一周20块攒钱大法)
- 绝区零莱卡恩技能属性怎么样
- 我的世界怎么召唤凋零风暴
- Number,String类型 第一百零八篇:最常用的基本数据类型
- 家养一只小鸭子,一只怎样才能养活(从小摊上买了一只小鸭子怎么养)
- 传奇祖玛阁怎么从6层下到5层(传奇祖玛阁爆什么)
- 小米11青春版什么时候发布_小米11青春版上市时间什么时候
- 怎么让孩子不沉迷于游戏(怎么让孩子从沉迷的游戏中走出来)
- 从0搭建vue3组件库: Input组件