admin 管理员组

文章数量: 887016

转自:http://www.yalewoo/sublime_text_3_gcc.html

仅供学习相关知识

sublime text 3配置c/c++编译环境 

yalewoo 最后修改于 2019-05-05 发表于 2015-02-21 100,750 views 116 

Sublime Text sublime text, gcc, c++, gdb, mingw, g++, cmd

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/ ,但是从官网安装很麻烦,在线安装经常龟速容易失败。

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

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

http://pan.baidu/s/1gd5YzVP

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

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

在cmd中使用gcc

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

gcc的一般格式是

 

1

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

但是我们输入命令

 

1

gcc test.c -o test

执行后却提示

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

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

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

 

1

2

3

4

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

 

Z:\work>test.exe

hello world

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

配置环境变量

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

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

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

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

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

cmd编译运行c语言

总结一下流程:

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

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

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

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

下面是几种常用的命令:

编译c语言

 

1

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

编译c++语言

 

1

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

调试c++

 

1

2

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

gdb 可执行文件名

 

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

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

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

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

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

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

Ctrl+Shift+B 选择执行哪个

不足之处:

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

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

解决办法

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

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

默认的编译配置文件位置

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

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

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

编译配置文件详解

这个文件内容如下:

 

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}

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

 

1

"working_dir": "${file_path}",

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

下面的

 

1

"shell_cmd": "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 。我们把转义字符双引号也用双引号表示,这样执行的命令就变成了

 

1

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

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

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

再来看最后面的代码

 

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。

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

 

1

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

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

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

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

编写自己的编译配置文件

c语言

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

然后输入以下代码

 

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,保存在此目录。

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

选中后就可以使用了。

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

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

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

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

这时候按Ctrl+Shift+B

第三个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标准进行编译,不需要的话可以去掉,配置文件如下:

 

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++程序。

 

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)

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

侧边栏中可以看到打开的文件夹,确保文件夹中包含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文件,可以升级或尝试删除这些行

 

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文件,就会有对应的命令

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

makefile示例

下面是一个简单的示例:

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

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

main.cpp

 

1

2

3

4

5

6

7

8

#include "func.h"

 

int main()

{

output();

 

return 0;

}

func.h

 

1

void output();

func.cpp

 

1

2

3

4

5

#include <cstdio>

void output()

{

printf("hello world\n");

}

makefile

 

1

2

3

4

5

6

7

8

main : main.cpp func.h func.cpp

 

clean:

del main.exe *.o

 

run:

mingw32-make && start cmd /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文件的目标。例如不能有这样的规则:

 

1

main : main.o func.o

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

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

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

Run对应了编译并运行。

中文编码乱码的问题

感谢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语言的配置文件如下:

 

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文件,可以双击错误信息自动跳转到相应行。

点赞 119

分享

如果文章对你有帮助,欢迎点赞或打赏(金额不限)。你的打赏将全部用于支付网站服务器费用和提高网站文章质量,谢谢支持。

版权声明:

本文由 yalewoo 原创,商业转载请联系作者获得授权。 
非商业转载请注明作者 yalewoo 或 雅乐网 ,并附带本文链接:
http://www.yalewoo/sublime_text_3_gcc.html

上一篇:

c语言加油站3——字符串

下一篇:

sublime text配置编译gtk程序

与 sublime text, gcc, c++, gdb, mingw, g++, cmd 相关的文章

  • Sublime Text 3 使用 SublimeGDB 图形化调试c/c++程序
  • C++笔记2——标准输入输出库
  • C++笔记3——引用
  • C++笔记1——main函数和命令行参数
  • 二叉树的图形化显示
  • Sublime Text 3 教程 (3)——跳转、查找和替换
  • sublime text 3如何配置自己的build-system,在命令行中运行python
  • sublime text3 配置c++开发环境SublimeLinter

文章《sublime text 3配置c/c++编译环境》共有116条评论:

  1. stella

    感谢作者那么详细的教程!方便的话,可以加您微信以后请教一些问题吗?我的微信号是lsr790574961

    2018年4月21日 上午11:13 回复

  2. 刘畅

    博主,您好 !
    我想问问,makefile 编译多个文件的时候,怎么样可以采用 -std=c++11 呢,单个文件是加在 “cmd”里面,那么 makefile 的呢,该加在哪里呢 ?

    2018年4月7日 下午3:12 回复

  3. 匿名

    这是我找到最详细的配置教程了 非常感谢作者

    2018年4月4日 上午11:30 回复

  4. x麒

    太棒了!!这个教程能让我们了解编译配置文件里代码的具体内涵,帮助我们知其然更知其所以然,感谢博主啊!中间有个问题搞了好久,我在cmd使用g++可以运行,在sublime里使用自己的编译配置文件运行却总是报错,后来才发现是由于文件夹名字中包含了&这个字符,唉一个意想不到的错误折腾了好久TAT

    2018年3月27日 下午5:06 回复

  5. AX

    cc1plus.exe: error: unrecognized command line option “-std=c++11”
    [Finished in 11.7s with exit code 1]
    [shell_cmd: g++ -Wall -std=c++11 “D:\test\3.cpp” -o “3” && start cmd /c “”D:\test/3″ & pause”]
    [dir: D:\test]
    [path: C:\MinGW\bin;C:\MinGW\bin]
    求解

    2018年3月11日 下午8:42 回复

  6. photor

    感谢作者写得如此详细!受教了!非常有用!!!

    2018年3月9日 下午12:30 回复

  7. 田旭

    博主大赞 因为学校竞赛啥的都是规定用Dev-C++,之前一直用的Dev-c++,觉得Dev功能不是很强大,就准备换sublime了,但是看了很多关于sublime文件配置的文章都没解决,直到看了你这一篇,谢了!!
    不知道可不可以加个QQ 一起讨论编程问题?
    QQ:2655541751

    2018年1月2日 下午1:00 回复

    • yalewoo 作者

      欢迎加群讨论哈108332605

      2018年3月9日 下午4:09 回复

  8. 博主你好,请问为什么在cmd里运行makefile是编译成功的,但是在sublime text3里却一直显示错误“mingw32-make: *** No targets specified and no makefile found. Stop.”?(sublime-buld和您写的一样)

    2018年1月1日 上午11:12 回复

  9. 温柔一刀

    谢谢楼主的详细攻略~~~另外问下,你研究生要毕业了吧?学的什么专业呢?

    2017年12月23日 下午9:58 回复

    • yalewoo 作者

      哈哈 明年6月份毕业 实验室方向是社交网络分析~

      2017年12月23日 下午10:51 回复

      • 温柔一刀

        高大上哦,好像是大数据分析这种类型,以后工资高哦。 社交网络分析(Social Network Analysis) 是指基于信息学、数学、社会学、管理学、心理学等多学科的融合理论和方法,为理解人类各种社交关系的形成、行为特点分析以及信息传播的规律提供的一种可计算的分析方法。

        2017年12月24日 下午1:30 回复

        • yalewoo 作者

          没啦 就是程序猿 

          2017年12月24日 下午3:47 回复

  10. 陈腱

    博主你好 ,我在测试你那个makefile时 执行make-clean 时 提示/usr/bin/sh: del: command not found,我看了下我这儿执行make -run时没有生成 .o文件, 在cmd下它不会自动执行生产的.exe 只能我自己手动执行

    2017年12月19日 下午4:53 回复

    • yalewoo 作者

      你好 应该是你安装mingw或者git之类的软件的时候选择了加入环境变量,这样你环境变量里有sh.exe文件,你再执行make的时候, 就会用这个sh的环境, 而不会用cmd中的命令。可以把del换成rm,或者环境变量中去掉sh.exe这个文件

      2017年12月20日 下午2:55 回复

  11. 乐鸡

    灰常好,灰常棒,相当不错,very good

    2017年12月15日 下午2:16 回复

    • yalewoo 作者

      谢谢支持 

      2017年12月20日 下午3:14 回复

  12. 我不说话

    感谢博主,文章写的详细又好懂!爱死你了。。。

    2017年12月2日 上午3:02 回复

    • yalewoo 作者

      谢谢! 

      2017年12月2日 下午4:15 回复

  13. vector chen

    良心文章,赞

    2017年10月7日 下午3:04 回复

    • yalewoo 作者

      谢谢支持

      2017年12月2日 下午4:13 回复

  14. yeke

    感谢楼主,很详细!搜了N个方法,还是你这个靠谱,自己的电脑上已经配置成功了。
    不过今天刚在单位的电脑上配置完成,按Ctrl+Shift+B运行时,发现弹出的cmd窗口里面空白无任何显示,等了一会后出现
    “系统无法执行指定的程序。
    请按任意键继续. . .”
    这个提示,请问是什么问题呢?
    Ctrl+B在SublimeText上是好的,提示“[Finished in 0.4s]”,就是弹出cmd时出问题了。

    2017年8月28日 上午10:24 回复

  15. DnKi

    版本确实低了,3059已升级到3126版本,没有再出现这个错误;但是依旧无法编译。
    主要错误是这样的:
    : recipe for target ‘main’ failed
    makefile:7: recipe for target ‘run’ failed
    mingw32-make: *** [run] Error 2

    是不是要考虑依赖关系和头文件路径什么的?我的源文件里只有 和自己写的.h文件(用的是””包含的)。
    我在cmd中gcc编译多文件没有问题,而且不用考虑文件顺序。
    求解答啊楼主。

    2017年8月8日 下午9:49 回复

    • yalewoo 作者

      这个应该是makefile的问题,你在cmd中到相关目录 运行mingw32-make命令,这样可以的话 sublime里就也可以

      2017年8月9日 上午10:21 回复

    • DnKi

      同样的mingw32-make配置和makefile文件, C++可用,C不行。。。

      2017年8月9日 上午10:48 回复

  16. DnKi

    楼主你好。关于makefile这一部分,完全按照叫你的教程,写的C。但是有错误弹窗
    Error loading syntax file “Packages/Makefile/Make Output.sublime-syntax”: Unable to open Packages/Makefile/Make Output.sublime-syntax.

    然后提示__init__() got an unexpected keyword argument ‘keyfiles’

    请问应该该怎么解决?

    2017年8月4日 上午10:21 回复

    • yalewoo 作者

      你好 可以检查下”C:\Program Files\Sublime Text 3\Packages\Makefile.sublime-package” 这个文件 解压后有没有 “Make Output.sublime-syntax” 文件
      或者尝试去掉 build文件中 “syntax”: “Packages/Makefile/Make Output.sublime-syntax”, 这一行

      2017年8月5日 下午12:37 回复

      • DnKi

        多谢回复!
        “Make Output.sublime-syntax”这个文件一直没有。
        把“syntax”: “Packages/Makefile/Make Output.sublime-syntax”删除掉后也还是报错__init__() got an unexpected keyword argument ‘keyfiles’。

        我想问一下keyfiles也是makefile语法的一部分吗?因为出现最多的就是这个错误,按照提示似乎是并没有keyfiles这个关键字。我也不是很懂。

        2017年8月7日 下午3:35 回复

        • yalewoo 作者

          keyfiles这个是sublime build文件里面的一个关键字,这个是为了更好的选择build系统,和makefile没有关系的。build文件里这一行 “keyfiles”: [“Makefile”, “makefile”],我猜大概意思是就是说遇到目录下有名字为Makefile或者makefile的文件,就会显示makefile的build系统可以选择。之前我没有注意版本的问题,这个关键字是sublime 3066版本才加入的,你的版本低的话可以尝试删除这一行或者升级下

          2017年8月8日 下午5:11 回复

  17. 匿名

    楼主还在吗,我想知道一下Ubuntu下C语言的编译配置文件修改的代码是怎么样的?

    2017年7月21日 下午10:32 回复

    • yalewoo 作者

      抱歉哈 Ubuntu下没研究过 原理应该差不过 把windows下面的start cmd换成linux下面类似的 可以参考下这个 http://blog.csdn/xiongyangg/article/details/54578109

      2017年7月23日 下午5:33 回复

  18. 匿名

    楼主问一下
    现在只能是在编译的时候出现编译提示信息(即warning和error)
    而在编译运行的时候没有编译提示信息(即warning和error)
    怎么配置让它能够在编译运行时如果有error或warning时出现提示信息呢而不是只有文件路径

    2017年7月14日 下午7:09 回复

    • yalewoo 作者

      我试了下没有这个问题啊

      2017年7月23日 下午5:33 回复

  19. Wilson

    很完善,赞一个!!

    2017年7月11日 下午5:08 回复

    • yalewoo 作者

      谢谢 

      2017年7月15日 上午10:31 回复

  20. 小咸鱼

    楼主问一下

    利用Varians配置完后怎么保存呢(以什么名称保存在哪个目录下)?
    还有怎么调用呢?
    是不是用cmd运行后就可以用scanf给对应变量赋值了?
    小白在这里谢谢楼主啦 

    2017年6月29日 下午11:17 回复

    • yalewoo 作者

      抱歉啦 最近入职有点忙啦 才看到评论 保存到用户文件夹的Packages\User里面,通过sublime的菜单 Preference –> Browse Packages.. 可以打开这个路径,我电脑上的路径是C:\Users\yalewoo\AppData\Roaming\Sublime Text 3,文件名保存为 c.sublime-build 就可以了
      然后用Ctrl+b选择你配置的命令就可以了

      2017年7月15日 上午10:31 回复

  21. joker

    很感谢你的教程,我有一个问题就是没有在他的Packages中找到c.sublime-package这样的C语言的配置文件,只有c++和c#的sublime-package,因为c++是可以直接编译运行的,而c文件就要先单独编译,在编译运行,不然会报错找不到exe文件,而c++就没有问题,所以希望能够找到这个文件看看是什么问题

    2017年6月24日 上午12:06 回复

    • yalewoo 作者

      我记得默认情况下c文件也是用c++的那个配置文件编译的,c++那个文件里的 selector是包括source.c和source.c++

      2017年6月24日 上午9:42 回复

      • joker

        那我这个问题要如何解决呢,就是c++的时候可以编译运行,但是c的时候只能单独编译,直接编译运行就会报错,无法找到对应的exe文件

        2017年6月24日 上午11:43 回复

        • 匿名

          感谢你的提示,我已经解决这个问题了

          2017年6月25日 下午2:09 回复

  22. 匿名

    楼主您好,很感谢您的教程,很详细。但是我在按照教程写的时候,出现了可以正常编译,但是执行时提示“[WinError 2] 系统找不到指定的文件”,花了很长时间都没有解决,请问这是什么原因呢?下面是我的配置文件的代码:
    {
    “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\””
    }
    ]
    }

    2017年5月19日 下午4:50 回复

    • yalewoo 作者

      编译后生成可执行文件了吗,我试了下这个配置文件,在我这里是正常的。你可以把完整的错误信息贴一下看看

      2017年5月19日 下午5:09 回复

      • Sue

        编译之后:[Finished in 0.1s]
        运行时:
        [WinError 2] 系统找不到指定的文件。
        [shell_cmd: gcc -Wall “D:\Sublime\test.c” -o “test” && start cmd /c “”D:\Sublime/test” & pause”]
        [dir: D:\Sublime]
        [path: C:\Program Files\Java\jdk1.8.0_121\bin;C:\Program Files\Java\jdk1.8.0_121\jre\bin;C:\ProgramData\Oracle\Java\javapath;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\Lenovo\Bluetooth Software\;C:\Program Files\Lenovo\Bluetooth Software\syswow64;C:\Windows\system32\config\systemprofile\.dnx\bin;C:\Program Files\Microsoft DNX\Dnvm\;C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit\;C:\Program Files\Microsoft SQL Server\130\Tools\Binn\;C:\Program Files (x86)\nodejs\;C:\Users\Persister\AppData\Local\Programs\Python\Python35\Scripts\;C:\Users\Persister\AppData\Local\Programs\Python\Python35\;C:\Sublime Text;C:\MinGW\bin;C:\Users\Persister\AppData\Local\Programs\Python\Python35\Scripts\;C:\Users\Persister\AppData\Local\Programs\Python\Python35\;C:\Users\Persister\AppData\Roaming\npm;C:\Program Files\Java\jdk1.8.0_121;C:\Users\Persister\AppData\Local\Programs\Python\Python35;C:\MinGW\bin;]
        [Finished]

        2017年5月20日 上午11:34 回复

        • yalewoo 作者

          你试一下在命令行中能不能运行shell_cmd后面那一段命令:gcc -Wall “D:\Sublime\test.c” -o “test” && start cmd /c “”D:\Sublime/test” & pause”

          2017年5月20日 下午12:39 回复

          • Sue

            不行,输入那条命令后会输出一下内容:
            gcc: error: “D:\Sublime\test.c”: Invalid argument
            gcc: fatal error: no input files
            compilation terminated.
            “pause”,不是内部或外部命令,也不是可运行的程序。

            2017年5月20日 下午2:24

        • yalewoo 作者

          你试下从sublime的错误那里复制命令,从这里评论复制的话引号会变成中文的会错误。
          另外会不会是操作系统的问题,你用的什么版本呢

          2017年5月20日 下午3:01 回复

          • Sue

            恩,从sublime复制过去是没有问题的,可以运行。我用的是win7旗舰版。

            2017年5月20日 下午3:19

    • yalewoo 作者

      命令行里可以应该是没问题的啊。。。我也不知道了 会不会是sublime版本的问题。。

      2017年5月20日 下午3:42 回复

      • Sue

         sublime是最新的版本呀,3126,这个问题困扰我好久了

        2017年5月20日 下午3:47 回复

  23. Little_Fall

    谢谢谢谢,今年大一,去年学c看着您的教程装了,很好用但还有一些遗留问题。
    今年学完java回来用c,重装的时候又找到了这篇教程,没想到还在持续更新修改。
    很敬佩作者的实力和态度,再次感谢!

    2017年5月9日 下午6:30 回复

  24. 帕特菛琪

    写的太棒了!其他博客都是直接让你复制粘贴。这篇讲的清清楚楚,解答我很多问题

    2017年4月12日 上午1:52 回复

    • yalewoo 作者

       谢谢支持

      2017年4月12日 下午4:06 回复

  25. 匿名

    写得太棒了

    2017年4月9日 下午6:01 回复

  26. lart

    6666 .极好的。

    2017年3月16日 下午10:37 回复

  27. M3r0dach

    非常好的一篇教程

    2017年2月24日 上午12:03 回复

    • yalewoo 作者

      谢谢夸奖 

      2017年2月24日 下午2:21 回复

  28. 杨文书

    请问楼主makefile能不能贴出代码?

    2016年11月27日 下午7:18 回复

    • yalewoo 作者

      就是普通的makefile文件,可以搜一下makefile的教程。另外必须在sublime中打开文件夹才能使用make编译命令,如果只打开文件是不能使用的。我修改了一下文章使用makefile的部分加了一个示例,可以看一下 

      2016年11月27日 下午9:28 回复

    • yalewoo 作者

      非常抱歉,之前文章中犯了一个严重的错误。windows下面make命令并不是直接可以使用的,MinGW中的make工具名称为mingw32-make,需要修改一下配置才可以使用。windows下面也不是和linux完全相同的,比如不支持cc和rm命令。我修改了文章中的这一部分,可以参考一下。

      2017年3月18日 下午4:12 回复

  29. 胡橙

    请教一个问题,C++程序中有一个变量声明了,但是没使用,sublime出现警告信息阻止运行下去。 但其实这个多余的变量并不影响程序,许多其它的软件都是忽略的。 怎样才能取消这种阻止的行为?

    2016年10月10日 下午10:37 回复

    • yalewoo 作者

      出现警告也不会阻止啊 也可以运行的 如果不想要警告就去掉-Wall选项

      2016年10月11日 下午9:07 回复

  30. AJW

    楼主,想问一下为什么我不加c++11的时候是可以运行的,但是加了c++11之后就不行了呢?

    2016年9月18日 上午11:05 回复

    • AJW

      错误信息一大串,大概都是类似这种
      d:c++mingwincludesys/stat.h:195:17: error: ‘_dev_t’ does not name a type
      struct __stat64 __struct_stat_defined( __off64_t, __time64
      感觉是编译器的问题,但是安装感觉也没有问题啊

      2016年9月18日 上午11:20 回复

      • yalewoo 作者

        试一下把 -std=c++11 换成 -std=gnu++11

        2016年9月18日 下午2:51 回复

      • yalewoo 作者

        stackoverflow上看到的 我也不知道行不行。。

        2016年9月18日 下午2:51 回复

        • AJW

          嗯嗯,可以的,我也看到了!多谢!但是看文档说是这两个作用是一样的,不知道为什么c++11就不行。。

          2016年9月18日 下午6:28 回复

  31. TT

    我的运行提示no build system这是为什么呢?

    2016年9月15日 下午6:13 回复

    • yalewoo 作者

      文件后缀要.c或.cpp,确保右下角的文件类型要选c或者c++,新建文件默认是Plain Text是不能编译的。build文件名称要c.sublime-build或者c++.sublime-build别写错了

      2016年9月16日 下午4:31 回复

  32. 恋空的喵喵

    博主,请问我按你的配置了 但是知行c++程序时显示这个:D:developerSublime Text Build 3114 x64Datamyprogramc++test.cpp: In function ‘int main()’:
    D:developerSublime Text Build 3114 x64Datamyprogramc++test.cpp:14:10: warning: statement has no effect [-Wunused-value]
    [Finished in 3.9s]

    2016年9月11日 上午10:09 回复

    • yalewoo 作者

      这是c代码的错误

      2016年9月12日 下午5:53 回复

    • yalewoo 作者

      这是你的源代码错误啦

      2017年3月18日 下午4:13 回复

  33. kongdd

    您好为什么我的·sublime在运行c语言文件的时候通过scanf输入的时候,只要输入完,回车之后就会卡,运行程序是在生成的exe文件里

    2016年5月1日 下午5:54 回复

    • yalewoo 作者

      是在新的cmd窗口中运行的吗?这样的话和sublime就没关系了,应该是你代码的问题。

      2016年5月7日 下午1:29 回复

  34. CPP

    你好,怎么让它自动补全呢,现在的插件,只能提示当前文件的,工程内其它文件内容就无法提示了

    2016年4月17日 下午2:26 回复

    • yalewoo 作者

      要用插件吧 试试SublimeClang

      2016年4月21日 下午9:20 回复

  35. kratos

    这个博客好详细,棒棒哒

    2016年3月11日 下午4:50 回复

    • yalewoo 作者

      谢谢夸奖 

      2016年5月7日 下午1:29 回复

  36. 盛昌杰

    写的这么详细,太感人惹~~~

    2016年2月11日 下午10:52 回复

    • yalewoo 作者

      2016年5月7日 下午1:30 回复

  37. Foken

    不错的文章,十分感谢作者。◕‿◕。

    2016年2月5日 下午6:17 回复

    • yalewoo 作者

       谢谢

      2016年5月7日 下午1:30 回复

  38. fan

    请问您为什么我修改环境变量重启后还是运行不了c++程序,还是显示“[WinError 2] 系统找不到指定的文件。”,。。。

    2016年1月29日 上午11:39 回复

    • yalewoo 作者

      完整的错误信息是什么0.0 可能是你的源文件名字有空格,之前这篇文章里的build文件有个bug,文件名没用引号括起来,导致文件名有空格的时候会看做两个文件从而提示找不到文件。把文件名前面加上引号 ” 就好了,现在已经加上了。

      2016年1月29日 下午12:03 回复

    • yalewoo 作者

      完整的错误信息里应该会显示path 你看看里面有没有mingw/bin

      2016年1月29日 下午12:07 回复

  39. 孤狼

    不错不错

    2016年1月18日 下午8:44 回复

    • yalewoo 作者

      谢谢[嘻嘻]

      2016年1月18日 下午9:55 回复

  40. Jtome45

    楼主我想问一下,为什么我按下Ctrl+B编译之后没有任何提示或者反应,但是Ctrl|+Shift+B就会编译并且运行?

    2016年1月9日 下午5:40 回复

    • yalewoo 作者

      可能你的版本不是3083 。在新版本3083中,Ctrl+Shift+B是选择用哪个方式编译,在旧版本中Ctrl+Shift+B是运行配置文件中Run对应的操作,可以升级一下试试

      2016年1月9日 下午10:17 回复

    • Cpp

      可能是快捷键冲突了

      2016年4月17日 下午2:52 回复

  41. 夏侯瑾轩

    多谢啦,很有用,转载啦,带你链接了

    2015年12月31日 下午10:25 回复

  42. 笃行

    修改环境变量后,不需要重启 windows,重启 SublimeText 即可~

    2015年12月26日 下午5:04 回复

    • yalewoo 作者

      以前的版本不需要,但3083版本我试的时候是需要的 http://i4.tietuku/460ff45be129ba95.png

      2015年12月30日 上午10:57 回复

  43. [Finished in 0.3s with exit code 1]
    [shell_cmd: g++ “D:studyctest.cpp” -o “D:studyc/test” && “D:studyc/test”]
    [dir: D:studyc]
    [path: C:Windowssystem32;C:Windows;C:WindowsSystem32Wbem;C:WindowsSystem32WindowsPowerShellv1.0;C:Program FilesIntelWiFibin;C:Program FilesCommon FilesIntelWirelessCommon;C:Userslenghonglin.dnxbin;C:Program FilesMicrosoft DNXDnvm;C:Program FilesMicrosoft SQL Server120ToolsBinn;D:MinGWbin]
    为啥报错下面还有这么多代码,环境配置对了的

    2015年12月26日 上午10:22 回复

    • 笃行

      这些不是报错,是打印执行命令、路径和环境变量

      2015年12月26日 下午5:06 回复

  44. MrWhaT

    蛮详细的,顶一下

    2015年12月8日 下午2:15 回复

    • yalewoo 作者

      谢谢啦[嘻嘻]

      2015年12月8日 下午6:27 回复

  45. 万金通

    配置之后出现问题 能否加qq请教一下 qq:937947662

    2015年12月7日 下午5:33 回复

    • yalewoo 作者

      不好意思马上要考研了没时间你多百度百度吧[闭嘴]

      2015年12月8日 下午6:27 回复

  46. 啊啊

    赞一个

    2015年11月28日 下午8:57 回复

  47. 马玉洁

    lz,能否看一下你的makefile文件

    2015年11月9日 下午9:33 回复

    • yalewoo 作者

      可以参考
      跟我一起写Makefile – Ubuntu中文
      http://wiki.ubuntu/index.php?title=%E8%B7%9F%E6%88%91%E4%B8%80%E8%B5%B7%E5%86%99Makefile&variant=zh-cn

      2015年11月10日 下午6:38 回复

      • 马玉洁

        window下也一样吗?

        2015年11月12日 上午10:47 回复

        • yalewoo 作者

          嗯嗯

          2015年11月12日 下午12:59 回复

        • yalewoo 作者

          非常抱歉,之前文章中犯了一个严重的错误。windows下面make命令并不是直接可以使用的,MinGW中的make工具名称为mingw32-make,需要修改一下配置才可以使用。windows下面也不是和linux完全相同的,比如不支持cc和rm命令。我修改了文章中的这一部分,可以参考一下。

          2017年3月18日 下午4:17 回复

  48. 丶Emphasia

    这样配置一次以后可以放U盘在新机器上直接用吗?

    2015年11月7日 下午6:58 回复

    • yalewoo 作者

      使用Sublime Text的便携版本就可以啦 全部放U盘里

      2015年11月7日 下午7:20 回复

  49. 黄杰

    lz能不能加下QQ,一些问题希望能得到您的帮助,1172464741

    2015年11月7日 下午2:15 回复

    • yalewoo 作者

      申请啦

      2015年11月7日 下午4:45 回复

  50. 默颜

    折腾了半天,就你这个细节最详细,很快就解决了,大赞[赞][赞]

    2015年10月26日 上午9:25 回复

    • yalewoo 作者

      谢谢支持[太开心]

      2015年10月26日 下午6:47 回复

  51. Cytrs

    学习下

    2015年10月20日 下午12:18 回复

  52. 侯鑫

    可以问下为什么语法有错误的时候sublime不提示呢?
    没有问题的时候是能正常编译运行的。。

    2015年8月23日 下午1:38 回复

    • yalewoo 作者

       会有提示的呀。编译运行后,sublime下面会有提示信息的。
      成功的时候是[Finished in 0.7s]这样的,错误信息也会显示

      2015年8月23日 下午7:44 回复

      • 侯鑫

        我自己没弄好。。直接把我同学的复制过来用了~

        2015年8月28日 下午9:01 回复

我要评论

本文标签: 自带 配置文件 命令 作用 格式