Sublime Text 3在Windows下配置C++环境

       之前用codeblocks写c++,感觉c++语法很麻烦而且codeblocks界面和字体又不好看,所以一直不喜欢用c++写代码。最近感觉很有必要转一下c++,就在网上找更好看的编辑器,无奈vim和emacs上手都很慢,就找到了sublime text,感觉界面字体真的很棒棒啊,就愉快地决定以后用它写c++了。

       sublime text给用户留下了很大的配置空间,c/c++的代码在windows下编译运行需要调用的外部命令,可以理解为执行一段cmd命令,这个是通过build配置文件实现的。编辑器自带了一个叫c++ single file的build文件,但是它是不支持标准输入的,所以我们需要自己写一个配置文件。网上关于这个有很多的博客,但很多都是只给出了一段代码让粘上,我一开始试了很多都会报错,没办法只好学习一下自己写一个喽。由于我太辣鸡,之前很少研究配置文件、脚本、cmd命令这些东西,所以这个过程摸索了很久才真正搞清楚。这里想写一篇真正详细的配置方案。

       下面的内容是我在windows下配置的,linux的配置文件应该是类似的,iOS我就没有试过了。

一、安装MinGW和添加环境变量

       为什么要安装这个呢?MinGW是Minimalist GNU on Windows的缩写,里面包含了c++的编译器,但这不是重点,重点是它可以让我们在windows下用linux的命令编译运行c++程序,也就是说这个不装应该也是完全可以的,只要有c++编译器就可以了,但是你就必须用windows的命令了,我稍微看了一眼命令完全不熟悉,所以也就没有再去研究这个。下面的讨论都是在安装了MinGW基础上的做法。

       我之前电脑上之前装了codeblocks,所以就直接从它的目录里面复制了出来。据说直接在官网上下载MinGW会出很多问题,这里不去讨论那些问题。建议大家也直接下一个codeblocks,用它自带的MinGW,这样会省很多时间。

       我把MinGW放在了C盘的根目录,然后需要把C:\MinGW\bin加入到环境变量Path中,这一部分就结束了。之前配过Java环境变量的话应该懂的,不懂的话可以百度一下。

       完成以后在cmd任意目录下输入gcc,应该如下图:

Sublime Text 3在Windows下配置C++环境_第1张图片

       如果提示不是内部或外部命令,说明配置失败。

       之后,重启sublime text 就可以生效了,如果在sublime中未生效,据说可以尝试重启windows。


二、编写Build配置文件

       在这之前需要大家了解linux下的c++编译和运行命令,这里说几个我之前不很清楚的地方。

       首先,g++和gcc都是可以编译c++的编译器,两者的关系大家百度一下吧,结论就是用g++就好。

       然后,-std=c++11或者-std=c++0x是添加g++的编译选项,都是指2011年发布的一套c++标准,命令中可以没有,也可能引发一些玄学错误。

       然后,-Wall也是一个选项,加上可以显示警告。

       没有接触过linux编译运行c++的可以先补习一下再继续。

       之后就到了最关键的地方,需要新建一个Build System,选择Tools-->Build System-->New Build System,就会打开一个sublime-build文件。

       下面是我最后使用的一段代码:

{
	"cmd":"g++ -std=c++11 $file_name -o $file_base_name",
	"file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",
	"working_dir": "${file_path}",
	"selector": "source.c, source.c++",
	"shell": true,
	"encoding":"cp936",
	"variants":[
		{
			"name":"g++ Compile",
			"cmd":"g++ -std=c++11 $file_name -o $file_base_name"
		},
		{
			"name":"g++ Run",
			"cmd":"start cmd /k $file_base_name"
		}
	]
}

       如果上面的步骤都没问题的话,粘上应该是可以直接用的。

       下面详细地解释一下配置文件。一个比较官方的说明:http://sublimetext.info/docs/en/reference/build_systems.html。

       这个配置文件是用JSON写的,关于JSON的语法非常简单,大家搜一下教程吧。

       解释一下各名称的含义。用一下从我之前看的一篇博客上的表格吧。

Sublime Text 3在Windows下配置C++环境_第2张图片

Sublime Text 3在Windows下配置C++环境_第3张图片

       之前在其他博客上找的代码问题都出在了cmd上,其中使用变量的习惯都不一样,而且我对JSON也不了解,所以在这摸索了很长时间。

       1.首先,$file吧,也可以写成${file},运行的时候应该是直接用变量所代表的字符串来替代。

       2.我见到有的地方这样写${file_path}/${file_base_name},去掉大括号也是没有问题的,中间的/是转义字符,替代以后这个就可以成为C:\Files\chapter1这样的形式。

       3.我试过一个博客上写的这样一句

"cmd": ["g++", "${file}", "-std=c++11", "-o", "${file_path}/${file_base_name}"] 是可以的,换成我后来写的

"cmd":"g++ -std=c++11 $file_name -o $file_base_name" 也没有问题,但是

"cmd":"g++ -std=c++11 $file -o $file_path/$file_base_name"就不对,这个问题让我困惑了好久。

       原因是这样,在JSON中,方括号代表数组,我之前一直以为会被当成一个完整的字符串,但实际上这个数组中的每一项都作为一个单独的参数给cmd处理,而没有方括号的写法是把引号里面$开头的变量替换掉,然后整个作为一条命令传给cmd。拿编译hello.cpp来举例吧,第三种会把"g++ -std=c++11 C:\my files\hello.cpp -o C:\my files\hello"传给cmd,路径中出现了空格,cmd把"C:\my"当成了一个参数,所以找不到指定文件,而第一种是把"C:\my files\hello.cpp"整个作为一个参数。前面表格中提到了working_dir会先把cmd转到文件所在的目录下,所以省去路径就可以,第二种写法也是可以的。

       4.然后是运行的cmd怎么写,一般是"start cmd /k hello",hello后面有没有.exe都可以,start cmd 是在原来的cmd基础上重新打开一个新的cmd,目录还是在当前目录,在新的cmd上执行hello这个可执行文件。后面的/k有的人也写/c,区别是/k的话执行完程序cmd不会关闭,不然效果就是hello出来一闪,窗口就关了。有的博客还在后面加了“echo. & pause",百度到的解释:

Sublime Text 3在Windows下配置C++环境_第4张图片

 

       5.如果想编译并运行的话,用&&连接两条命令就好了,像这样"g++ -std=c++11 $file_name -o $file_base_name && start cmd /k $file_base_name"。中间的&&也有些人写成&,区别是&&后面的命令必须在顺利执行完前面的命令的基础上才会执行,而&后面的命令即使前面的命令没有顺利执行也会执行。

       6.最后,解释一下variants,这个是备选指令,按照我的代码Ctrl+Shift+B就可以看到g++,g++ Compile,g++ Run,三个选项,name就是选项的名字,cmd当然是这个选项下执行什么了,通过这个域,你可以把编译和运行分开。

       7.其他几个域,都没什么,直接照搬就可以,前面讲的cmd可以按照自己的个性进行设置。

       文件写好以后,Ctrl+S保存就可以使用了,最好保存在弹出窗口原来给出的那个目录下,不然有可能出现玄学错误。


你可能感兴趣的:(环境配置)