sublime配置c语言环境变量,sublime text 3配置c/c++编译环境

sublime text 3提供了构建功能,它的构建系统(Build systems)可以运行一段外部命令,还可以捕获输出并显示。

要在sublime text 3中实现c或c++代码的编译和运行,在本质上说也是调用外部的命令,windows中也可以理解为执行一段cmd命令。

目前c/c++编译器最流行的就是gcc和g++,本文将从MinGW开始,介绍gcc和g++的基本命令格式,然后详细介绍sublime中自带的编译配置文件,分析每一行的作用。然后给出win7 64bit下 Sublime Text 3 build 3083版本中编译c语言、c++的build配置文件。

另外,文章最后还介绍了sublime中使用make的内容,以及讨论关于中文编码的问题。

如果你只想快速配置好编译环境,而对实现细节并不关心(不建议),你可以只阅读 安装MinGW、配置环境变量 和 编写自己的编译配置文件这几节。

关于gcc和g++

安装编译器是后面所有工作的基础,如果没有编译器,后面的一切都无从谈起。在windows下使用gcc和g++,是通过安装MinGW实现的。

安装MinGW

MinGW是Minimalist GNU on Windows的首字母缩写,安装后就可以使用很多的GNU工具。GNU(GNU’s Not Unix)是linux中的一个著名的项目,包含了gcc\g++\gdb等工具。也就是说,安装MinGw后,我们就可以使用gcc和g++命令了。

MinGW的官网是 http://www.mingw.org/ ,但是从官网安装很麻烦,在线安装经常龟速容易失败。

雅乐网推荐的方法是借助codeblocks,选择带有mingw的版本安装,安装后把mingw文件夹复制出来就可以了。

这里提供了解压版的MinGW,是使用 codeblocks-13.12mingw-setup 安装后复制出来的:

解压后,可以在 MinGW/bin 目录下找到我们需要的gcc.exe和g++.exe 。

我这里把MinGW文件夹放到c盘根目录

c2a138391a7c63120d37616d4e16575a.gif

在cmd中使用gcc

假设我们有一个test.c文件在Z盘的work目录下。首先我们要在cmd中进入此目录。方法可以是在work目录空白处按住Shift点击鼠标右键,选择“在此处打开命令窗口”;也可以使用cd命令进入。

c2a138391a7c63120d37616d4e16575a.gif

gcc的一般格式是

gcc 源文件名 -o 可执行文件名

1

gcc源文件名-o可执行文件名

但是我们输入命令

gcc test.c -o test

1

gcctest.c-otest

执行后却提示

‘gcc’ 不是内部或外部命令,也不是可运行的程序或批处理文件。

这是因为命令执行时,会在当前目录下查找名为gcc的可执行文件,如果查不到就在系统环境变量path记录的路径里寻找gcc可执行文件。但是目前这两个地方都没有。我们的gcc文件所在的目录是c盘下的MinGW/bin。

这时可以使用绝对路径来调用gcc可执行文件

Z:\work>c:/MinGW/bin/gcc test.c -o test

Z:\work>test.exe

hello world

1

2

3

4

Z:\work>c:/MinGW/bin/gcctest.c-otest

Z:\work>test.exe

helloworld

这样就成功编译生成了可执行文件test.exe,然后就可以在cmd里运行了。

c2a138391a7c63120d37616d4e16575a.gif

配置环境变量

为了方便,一般我们会把gcc所在的路径加入系统的环境变量,这样就可以直接使用gcc命令而不用绝对路径。

右键计算机->属性->高级系统设置->环境变量

c2a138391a7c63120d37616d4e16575a.gif

在path的值中,可以发现有一些目录,他们之间用英文的分号分隔。我们双击path,把我们gcc的路径  C:\MinGW\bin  添加进去。   要注意前后的英文分号。

c2a138391a7c63120d37616d4e16575a.gif

确定以后 就可以在任意目录下直接使用gcc命令了。可以在任意目录打开cmd窗口,输入gcc查看环境变量是否设置成功。如果仍然提示不是内部或外部命令,说明环境变量设置失败。

c2a138391a7c63120d37616d4e16575a.gif

注意:在sublime text 3 build 3083中,环境变量的修改不会立即在sublime中生效,需要重启windows。

cmd编译运行c语言

总结一下流程:

首先我们要在cmd中进入.c文件所在的目录作为工作目录

然后执行gcc source.c -o dest来生成可执行文件

最后输入生成的可执行文件名来运行生成的程序。

建议大家加入-Wall选项,打开常用的警告。

下面是几种常用的命令:

编译c语言

gcc -Wall 源文件名 -o 可执行文件名

1

gcc-Wall源文件名-o可执行文件名

编译c++语言

g++ -Wall 源文件名 -o 可执行文件名

1

g++-Wall源文件名-o可执行文件名

调试c++

g++ -g 源文件名 -o 可执行文件名

gdb 可执行文件名

1

2

g++-g源文件名-o可执行文件名

gdb可执行文件名

Sublime Text 3默认c/c++编译配置文件详解

把g++加入环境变量后,sublime中默认的编译系统就可以正常使用了。

我们在Sublime Text 3中打开一个cpp文件,按Ctrl+B

c2a138391a7c63120d37616d4e16575a.gif

这是sublime自带的默认c++编译命令。第一个是编译,第二个是运行。这时候是可以正常使用的。(环境变量配置后需重启windows)

c2a138391a7c63120d37616d4e16575a.gif

Sublime Text 3 3080版本之后修改了编译系统,具体设置是

Ctrl+B 执行改格式上次的编译命令。如果第一次执行则提示选择执行哪个

Ctrl+Shift+B 选择执行哪个

不足之处:

1. 程序输出捕获到Sublime窗口中,这样导致不能运行时输入信息。执行含有scanf语句的代码会卡住。

2. 默认情况下c和c++没有进行区分,全部当做c++格式来处理了。

解决办法

第一个是设置在新的cmd窗口执行程序,这样就可以输入信息。

第二个是针对c语言单独写一个build配置文件。

默认的编译配置文件位置

在Sublime的安装目录的Packages文件夹中,有个文件叫C++.sublime-package

c2a138391a7c63120d37616d4e16575a.gif

这个实际上是zip的压缩包,里面包含了c++的默认系统设置,修改后缀名为zip后解压,可以在里面找到C++ Single File.sublime-build文件。

这个文件名就是上面要编译时可以选择的名字

c2a138391a7c63120d37616d4e16575a.gif

编译配置文件详解

这个文件内容如下:

{

"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}\""

}

]

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

{

"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}\""

}

]

}

这个JSON格式的配置文件就是sublime中build文件的真面目了。花括号里面是一个个的键值对,它们之间用逗号隔开。键和值中间是一个冒号。为了方便下面把键称为名称。

名称和值都要用双引号括起来,因此值里面用到双引号的话,就要用转义 \” (反斜杠+双引号)表示。

这里面用到的名称的含义如下:

名称

含义

working_dir

运行cmd是会先切换到working_dir指定的工作目录

cmd

包括命令及其参数。如果不指定绝对路径,外部程序会在你系统的:const:PATH 环境变量中搜索。

shell_cmd

相当于shell:true的cmd ,cmd可以通过shell运行。

file_regex

该选项用Perl的正则表达式来捕获构建系统的错误输出到sublime的窗口。

selector

在选定 Tools | Build System | Automatic 时根据这个自动选择编译系统。

variants

用来替代主构建系统的备选。也就是一个配置文件可以对应多个执行命令

name

只在variants下面有,设置命令的名称,例如Run。

上面的配置文件中还有一些类似 ${file} 这种符号,这是sublime提供的变量,一些常用的变量如下:

变量

含义

$file_path

当前文件所在目录路径, e.g., C:\Files.

$file

当前文件的详细路径, e.g., C:\Files\Chapter1.txt.

$file_name

文件全名(含扩展名), e.g., Chapter1.txt.

$file_extension

当前文件扩展名, e.g., txt.

$file_base_name

当前文件名(不包括扩展名), e.g., Document.

变量的使用可以直接使用,也可以使用花括号括起来,例如 ${project_name}

我们详细看一下这个文件。

"working_dir": "${file_path}",

1

"working_dir":"${file_path}",

这一行说明工作目录,也就是执行命令时所在的目录,被设置为文件所在的目录。

下面的

"shell_cmd": "g++ \"${file}\" -o \"${file_path}/${file_base_name}\"",

1

"shell_cmd":"g++ \"${file}\" -o \"${file_path}/${file_base_name}\"",

这就是编译时执行的命令了,它的值的部分是

g++ \"${file}\" -o \"${file_path}/${file_base_name}\"

1

g++\"${file}\"-o\"${file_path}/${file_base_name}\"

执行时,${file}会被替换为编辑的文件名,${file_path}/${file_base_name} 就会被替换为不包含扩展名的完整路径名。它们前后有\”双引号是为了支持带空格的文件名。

假设我们编辑的文件路径为 Z:/cpp/t.cpp ,那么执行时的工作目录就是 Z:/cpp 。${file} 就是 Z:/cpp/t.cpp ,${file_path} 就是 Z:/cpp ,${file_base_name} 就是 t 。我们把转义字符双引号也用双引号表示,这样执行的命令就变成了

g++ "Z:/cpp/t.cpp" -o "Z:/cpp/t"

1

g++"Z:/cpp/t.cpp"-o"Z:/cpp/t"

这正好是编译文件的命令,文件路径前后的双引号保证它支持带空格的路径。编译后生成的可执行文件和源代码文件在一个目录下,名字相同(扩展名不同)。

如果有编译错误,错误信息就会被”file_regex”中的正则表达式匹配并显示。

再来看最后面的代码

"variants":

[

{

"name": "Run",

"shell_cmd": "g++ \"${file}\" -o \"${file_path}/${file_base_name}\" && \"${file_path}/${file_base_name}\""

}

]

1

2

3

4

5

6

7

"variants":

[

{

"name":"Run",

"shell_cmd":"g++ \"${file}\" -o \"${file_path}/${file_base_name}\" && \"${file_path}/${file_base_name}\""

}

]

variants的值是一个数组,可以放很多个对象,每个对象表示一个命令。里面name表示了这个命令的名称为Run,也就是运行。编译时选择C++ Single File-Run就会执行这里面的shell_cmd。

运行部分的命令前半部分和编译一样,后面用 && 连接了另一个命令,&&表示编译成功才执行后面的部分。后面为

\"${file_path}/${file_base_name}\"

1

\"${file_path}/${file_base_name}\"

也就是直接运行可执行文件了。这样是在sublime中捕获运行结果的。

看懂这个默认配置文件后,照葫芦画瓢,我们很容易的就可以写出符合自己需要的配置文件。

但是不建议直接修改这个文件,建议大家把用户配置放到用户文件夹下,来代替默认的编译配置。

编写自己的编译配置文件

c语言

选择tool –> Build System –> New Build System

c2a138391a7c63120d37616d4e16575a.gif

然后输入以下代码

{

"working_dir": "$file_path",

"cmd": "gcc -Wall \"$file_name\" -o \"$file_base_name\"",

"file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",

"selector": "source.c",

"variants":

[

{

"name": "Run",

"shell_cmd": "gcc -Wall \"$file\" -o \"$file_base_name\" && start cmd /c \"\"${file_path}/${file_base_name}\" & pause\""

}

]

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

{

"working_dir":"$file_path",

"cmd":"gcc -Wall \"$file_name\" -o \"$file_base_name\"",

"file_regex":"^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",

"selector":"source.c",

"variants":

[

{

"name":"Run",

"shell_cmd":"gcc -Wall \"$file\" -o \"$file_base_name\" && start cmd /c \"\"${file_path}/${file_base_name}\" & pause\""

}

]

}

和默认相比,就是修改了selector部分为只选择.c文件。Run中的shell_cmd后面部分加上了start cmd /c,start作用是新开一个cmd窗口,cmd表示要执行一个命令行,/c执行完后退出新开的窗口,后面的& pause保证运行结束后窗口不会立即退出。这样Run就会在新的cmd窗口中运行了。

按Ctrl+s保存,会自动打开user目录(Sublime Text 3\Packages\User),我们修改 文件名为 c.sublime-build,保存在此目录。

c2a138391a7c63120d37616d4e16575a.gif

这时候,可以在Tools -> Build System下看到刚才新建的c了

c2a138391a7c63120d37616d4e16575a.gif

选中后就可以使用了。

Build System中除了选择具体的编译系统,还可以选择第一个:Automatic 自动选择,会根据打开的文件后缀自动选择。由于默认情况下.c文件sublime识别为c++类型,所以使用自动选择的时候还需要修改一点:

先用sublime打开.c文件的时候 默认是c++格式 。(注:最新的3013版本已经默认是c格式,则不必修改)

c2a138391a7c63120d37616d4e16575a.gif

点击红色箭头处的c++  选择Open all with current extension as .. 然后选择C

c2a138391a7c63120d37616d4e16575a.gif

这样以后打开.c文件就默认是c类型

这时候按Ctrl+Shift+B

c2a138391a7c63120d37616d4e16575a.gif

第三个c就是对应执行配置文件中的第三行  gcc -Wall $file_name -o $file_base_name  作用是编译。

第四个c-Run对应后面的命令  gcc -Wall $file -o $file_base_name && start cmd /c \”${file_path}/${file_base_name} & pause\” ,作用是是在新的cmd窗口运行。这样就可以对scanf等函数进行输入了。

c++

gcc虽然可以编译c++代码,但是不能进行c++的连接函数库操作。所以针对c++代码一般使用g++来编译。

方法和上面的c语言的配置一样,只要把配置文件中的gcc改为g++ ,source.c改为source.c++ ,保存文件名c.sublime-build改为c++.sublime-build就可以了。

这里增加了-std=c++11 选项,是按照C++11标准进行编译,不需要的话可以去掉,配置文件如下:

{

"encoding": "utf-8",

"working_dir": "$file_path",

"shell_cmd": "g++ -Wall -std=c++11 \"$file_name\" -o \"$file_base_name\"",

"file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",

"selector": "source.c++",

"variants":

[

{

"name": "Run",

"shell_cmd": "g++ -Wall -std=c++11 \"$file\" -o \"$file_base_name\" && start cmd /c \"\"${file_path}/${file_base_name}\" & pause\""

}

]

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

{

"encoding":"utf-8",

"working_dir":"$file_path",

"shell_cmd":"g++ -Wall -std=c++11 \"$file_name\" -o \"$file_base_name\"",

"file_regex":"^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",

"selector":"source.c++",

"variants":

[

{

"name":"Run",

"shell_cmd":"g++ -Wall -std=c++11 \"$file\" -o \"$file_base_name\" && start cmd /c \"\"${file_path}/${file_base_name}\" & pause\""

}

]

}

实际上,我们可以利用Varians ,来配置多个不同的编译命令。

下面的配置文件有编译 ,编译并在sublime中运行,编译并cmd运行 和 gdb调试 四个命令。

注:gdb调试是打开命令行的方式,这里不支持带空格的源代码文件名和路径,gdb的使用可以参考:gdb调试新手入门(一) | 雅乐网 。 要想通过sublimeGDB插件实现图形化调试,可以参考Sublime Text 3 使用 SublimeGDB 图形化调试c/c++程序。

c2a138391a7c63120d37616d4e16575a.gif

{

"encoding": "utf-8",

"working_dir": "$file_path",

"shell_cmd": "g++ -Wall -std=c++11 \"$file_name\" -o \"$file_base_name\"",

"file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",

"selector": "source.c++",

"variants":

[

{

"name": "Run in sublime",

"shell_cmd": "g++ -Wall -std=c++11 \"$file_name\" -o \"$file_base_name\" && cmd /c \"${file_path}/${file_base_name}\""

},

{

"name": "CMD Run",

"shell_cmd": "g++ -Wall -std=c++11 \"$file\" -o \"$file_base_name\" && start cmd /c \"\"${file_path}/${file_base_name}\" & pause\""

},

{

"name": "gdb Debug",

"shell_cmd": "g++ -g -std=c++11 \"$file\" -o \"$file_base_name\" && start cmd /c gdb ${file_path}/${file_base_name} & pause"

}

]

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

{

"encoding":"utf-8",

"working_dir":"$file_path",

"shell_cmd":"g++ -Wall -std=c++11 \"$file_name\" -o \"$file_base_name\"",

"file_regex":"^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",

"selector":"source.c++",

"variants":

[

{

"name":"Run in sublime",

"shell_cmd":"g++ -Wall -std=c++11 \"$file_name\" -o \"$file_base_name\" && cmd /c \"${file_path}/${file_base_name}\""

},

{

"name":"CMD Run",

"shell_cmd":"g++ -Wall -std=c++11 \"$file\" -o \"$file_base_name\" && start cmd /c \"\"${file_path}/${file_base_name}\" & pause\""

},

{

"name":"gdb Debug",

"shell_cmd":"g++ -g -std=c++11 \"$file\" -o \"$file_base_name\" && start cmd /c gdb ${file_path}/${file_base_name} & pause"

}

]

}

使用makefile编译多个文件(Windows环境)

sublime可以使用makefile来编译多个文件,以便支持稍大一点的工程项目。(windows下面和linux下面并不相同,本文介绍适用于windows)

这个功能只打开单个文件是没有的,只有打开整个文件夹

c2a138391a7c63120d37616d4e16575a.gif

侧边栏中可以看到打开的文件夹,确保文件夹中包含makefile文件。此时按下Ctrl+Shift+B ,会有make的选项。

这里make选项执行的是make,但是windows中是没有make这个命令的。MinGW\bin里面的名字是mingw32-make.exe 。解决办法是修改这个文件名改为make.exe ,或者自己新建一个makefile的build文件。

makefile的默认编译配置文件在”C:\Program Files\Sublime Text 3\Packages\Makefile.sublime-package”,解压后的Make.sublime-build文件中。

我们新建一个编译系统,tool –> Build System –> New Build System,内容为

注:该文件在sublime 3126版本测试通过,低版本可能不支持keyfile关键字,或者没有Packages/Makefile/Make Output.sublime-syntax文件,可以升级或尝试删除这些行

{

"shell_cmd": "mingw32-make",

"file_regex": "^(..[^:\n]*):([0-9]+):?([0-9]+)?:? (.*)$",

"working_dir": "${folder:${project_path:${file_path}}}",

"selector": "source.makefile",

"syntax": "Packages/Makefile/Make Output.sublime-syntax",

"keyfiles": ["Makefile", "makefile"],

"variants":

[

{

"name": "Clean",

"shell_cmd": "mingw32-make clean"

},

{

"name": "Run",

"shell_cmd": "mingw32-make run"

},

]

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

{

"shell_cmd":"mingw32-make",

"file_regex":"^(..[^:\n]*):([0-9]+):?([0-9]+)?:? (.*)$",

"working_dir":"${folder:${project_path:${file_path}}}",

"selector":"source.makefile",

"syntax":"Packages/Makefile/Make Output.sublime-syntax",

"keyfiles":["Makefile","makefile"],

"variants":

[

{

"name":"Clean",

"shell_cmd":"mingw32-make clean"

},

{

"name":"Run",

"shell_cmd":"mingw32-make run"

},

]

}

保存为mingw32-make.sublime-build,保存位置和上面c++配置文件位置相同就可以了。

然后打开文件夹后,如果里面有Makefile或makefile文件,就会有对应的命令

c2a138391a7c63120d37616d4e16575a.gif

由于windows下面常用命令和linux不同,makefile也要做对应的修改:

makefile示例

下面是一个简单的示例:

现在有一个test文件夹,里面有4个文件

c2a138391a7c63120d37616d4e16575a.gif

其中main.cpp用到了func.cpp中的函数。具体代码如下:

main.cpp

#include "func.h"

int main()

{

output();

return 0;

}

1

2

3

4

5

6

7

8

#include "func.h"

intmain()

{

output();

return0;

}

func.h

void output();

1

voidoutput();

func.cpp

#include

void output()

{

printf("hello world\n");

}

1

2

3

4

5

#include

voidoutput()

{

printf("hello world\n");

}

makefile

main : main.cpp func.h func.cpp

clean:

del main.exe *.o

run:

mingw32-make && start cmd /c "main.exe & pause"

1

2

3

4

5

6

7

8

main:main.cppfunc.hfunc.cpp

clean:

delmain.exe*.o

run:

mingw32-make&&startcmd/c"main.exe & pause"

注意:makefile里面的clean和run,和我们自己的配置文件里的”variants”下面的命令mingw32-make clean和mingw32-make run对应的。

clean下面使用命令为del而不是linux下面的rm

注意:如果你的windows环境变量中有sh.exe文件(cmd中可以执行sh命令),执行make的时候会用这个sh的环境来执行,会导致del命令失效,为了确保makefile可以使用,需要从环境变量中去掉包含sh.exe的目录

另外,由于windows下没有cc命令,这里不能出现全部依赖.o文件的目标。例如不能有这样的规则:

main : main.o func.o

1

main:main.ofunc.o

使用这样的规则时,会调用cc,但是windows下面cc没法使用,就会报错。

在sublime text 3中打开该文件夹(注意必须打开文件夹,只打开文件没有make选项)

c2a138391a7c63120d37616d4e16575a.gif

之后使用Ctrl+shift+B 选择对应的mingw32-make命令即可。

c2a138391a7c63120d37616d4e16575a.gif

Run对应了编译并运行。

c2a138391a7c63120d37616d4e16575a.gif

中文编码乱码的问题

感谢RGB0x000000同学指出关于中文编码的问题。由于Sublime Text 3中文件默认编码格式是utf-8 ,而windows中的命令行默认编码格式是GBK 。所以代码中出现中文时运行会乱码。

解决思路也很简单,就是让他们编码一致就可以了。

1. 修改cmd编码为utf-8

使用chcp命令可以查看当前字符集,默认是936 ,可以使用chcp 65001修改字符集为utf-8

然而似乎只对当前打开的窗口有效,一个麻烦的办法是每次代码里运行system来切换字符集(噗)

2. 修改源代码格式为GBK

Sublime原生并不支持GBK编码,但如果安装了ConvertToUTF8插件,就可以正确显示ANSI或者GBK编码的文件。因此,装插件后打开GBK编码的源代码文件,也不会乱码。

一个更巧妙地办法是使用编译器的选项 -fexec-charset 来设置代码中字符串的编码,这样源文件可以使用utf-8编码,只是编译的时候用指定的编码来编译源代码中的字符串。

在编译命令gcc中加入选项 -fexec-charset=GBK 来说明将代码中的字符串按照GBK编码,从而和CMD窗口一致,也不会乱码。

修改后的c语言的配置文件如下:

{

"working_dir": "$file_path",

"cmd": "gcc -Wall -fexec-charset=GBK \"$file_name\" -o \"$file_base_name\"",

"file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",

"selector": "source.c",

"variants":

[

{

"name": "Run",

"shell_cmd": "gcc -Wall -fexec-charset=GBK \"$file\" -o \"$file_base_name\" && start cmd /c \"\"${file_path}/${file_base_name}\" & pause\""

}

]

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

{

"working_dir":"$file_path",

"cmd":"gcc -Wall -fexec-charset=GBK \"$file_name\" -o \"$file_base_name\"",

"file_regex":"^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",

"selector":"source.c",

"variants":

[

{

"name":"Run",

"shell_cmd":"gcc -Wall -fexec-charset=GBK \"$file\" -o \"$file_base_name\" && start cmd /c \"\"${file_path}/${file_base_name}\" & pause\""

}

]

}

但是加入这个选项后,如果要编译的不是utf-8 ,而是GBK ,必须还要加入-finput-charset=GBK 选项来制定源代码的编码格式,否则会提示错误

error: converting to execution character set: Illegal byte sequence。

而加入这个选项后编译utf-8又会乱码。。。所以,目前博主还没找到源文件是utf-8编码和gbk编码两种情况下中文都不会乱码的方法。。。

文章更新历史

2017.3.8 update

增加编译配置文件的详细讲解

修正了makefile的错误,windows下make命令并不是直接可以使用,而是需要配置的。

2016.11.27 update

增加使用makefile的一个示例

2016.1.31 update

修改C++编译命令行选项为C++11模式(-std=c++11)。

2016.1.31 update

大规模重写,调整文章结构

2016.1.1 update

把文件名用引号包起来以支持源文件带空格的文件名。

2015.12.30 update

增加关于控制台输出中文乱码的章节。

2015.10.3 update

大规模重写,调整文章结构

2015.7.20 update

针对sublime text 3最新版本 build 3083修改部分内容。

2015.3.15 update

修改build文件,可以双击错误信息自动跳转到相应行。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 安装Sublime Text编辑器,下载地址:https://www.sublimetext.com/3 2. 安装Package Control插件,下载地址:https://packagecontrol.io/installation 打开Sublime Text编辑器,按下Ctrl + `键(菜单栏 -> View -> Show Console),输入以下代码,按下回车键即可安装Package Control插件: ``` import urllib.request,os,hashlib; h = '5f4cc3b6bdb69a5f8b25b3cd6ca3d761' + 'e3d0afc7d436eba6bea834f03e7fa115'; pf = 'Package Control.sublime-package'; ipp = sublime.installed_packages_path(); urllib.request.install_opener( urllib.request.build_opener( urllib.request.ProxyHandler()) ); by = urllib.request.urlopen( 'http://packagecontrol.io/' + pf.replace(' ', '%20')).read(); dh = hashlib.sha256(by).hexdigest(); print('Error validating download (got %s instead of %s), please try manual install' % (dh, h)) if dh != h else open(os.path.join( ipp, pf), 'wb' ).write(by) ``` 3. 安装C语言插件,打开Sublime Text编辑器,按下Ctrl + Shift + P键(菜单栏 -> Tools -> Command Palette),输入install package,选择Package Control: Install Package,输入C++,选择C++11,安装即可。 4. 配置编译环境,打开Sublime Text编辑器,按下Ctrl + Shift + B键(菜单栏 -> Tools -> Build System -> New Build System),输入以下代码: ``` { "cmd": ["gcc", "$file_name", "-o", "${file_base_name}.exe", "&&", "start", "cmd", "/k", "${file_base_name}.exe"], "selector": "source.c", "shell": true, "working_dir": "${file_path}" } ``` 保存为C++.sublime-build。 5. 新建C语言文件,按下Ctrl + N键,输入以下代码: ``` #include <stdio.h> int main() { printf("Hello, world!\n"); return 0; } ``` 6. 编译运行,按下Ctrl + B键即可编译运行C语言程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值