雅乐网

计算机技术博客

工具教程 » Sublime Text » sublime text 3配置c/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 安装后复制出来的:

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

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

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

scrn20151003205109

在cmd中使用gcc

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

scrn20151003210112

gcc的一般格式是

但是我们输入命令

执行后却提示

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

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

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

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

scrn20151003210705

配置环境变量

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

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

sublime text 3的c环境搭建 4

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

sublime text 3的c环境搭建 5

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

sublime text 3的c环境搭建 6

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

cmd编译运行c语言

总结一下流程:

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

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

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

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

下面是几种常用的命令:

编译c语言

编译c++语言

调试c++

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

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

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

2015-10-03 21_22_45-Z__t.cpp - Sublime Text (UNREGISTERED)

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

scrn20151003212409

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

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

Ctrl+Shift+B 选择执行哪个

不足之处:

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

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

解决办法

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

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

默认的编译配置文件位置

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

scrn20151003213410

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

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

2015-10-03 21_22_45-Z__t.cpp - Sublime Text (UNREGISTERED)

编译配置文件详解

这个文件内容如下:

这个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}

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

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

下面的

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

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

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

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

再来看最后面的代码

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

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

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

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

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

编写自己的编译配置文件

c语言

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

scrn20150221161646

然后输入以下代码

和默认相比,就是修改了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,保存在此目录。

scrn20150221162528

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

2015-07-20 21_29_56-

选中后就可以使用了。

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

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

再谈sublime配置c/c++环境 自动针对c调用gcc 针对cpp调用g++ 2

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

再谈sublime配置c/c++环境 自动针对c调用gcc 针对cpp调用g++ 3

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

这时候按Ctrl+Shift+B

2015-10-03 21_42_36-Z__c.c - Sublime Text (UNREGISTERED)

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

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

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

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

scrn20170318143809

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

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

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

scrn20170318144026

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

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

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

scrn20170318152811

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

makefile示例

下面是一个简单的示例:

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

scrn20161127212031

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

main.cpp

func.h

func.cpp

makefile

注意: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文件的目标。例如不能有这样的规则:

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

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

scrn20161127212047

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

scrn20170318152811

Run对应了编译并运行。

scrn20170318155636

中文编码乱码的问题

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

但是加入这个选项后,如果要编译的不是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文件,可以双击错误信息自动跳转到相应行。

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

版权声明:

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

上一篇:

下一篇:

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

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

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

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

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

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

  6. 啊啊

    赞一个

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

  8. MrWhaT

    蛮详细的,顶一下

  9. [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]
    为啥报错下面还有这么多代码,环境配置对了的

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

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

  12. Jtome45

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

  13. 孤狼

    不错不错

  14. fan

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

    • yalewoo 作者

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

    • yalewoo 作者

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

  15. 好文一定要顶,支持一下

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

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

  18. kratos

    这个博客好详细,棒棒哒

  19. CPP

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

  20. kongdd

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

  21. 博主,请问我按你的配置了 但是知行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]

  22. TT

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

    • yalewoo 作者

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

  23. AJW

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

    • AJW

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

  24. 胡橙

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

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

    • yalewoo 作者

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

    • yalewoo 作者

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

  26. M3r0dach

    非常好的一篇教程

  27. lart

    6666 .极好的。

  28. 匿名

    写得太棒了

  29. 帕特菛琪

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

  30. Little_Fall

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

  31. 匿名

    楼主您好,很感谢您的教程,很详细。但是我在按照教程写的时候,出现了可以正常编译,但是执行时提示“[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\””
    }
    ]
    }

    • yalewoo 作者

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

      • 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]

        • yalewoo 作者

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

          • Sue

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

        • yalewoo 作者

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

          • Sue

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

    • yalewoo 作者

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

  32. joker

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

    • yalewoo 作者

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

      • joker

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

  33. 小咸鱼

    楼主问一下

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

    • yalewoo 作者

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

  34. Wilson

    很完善,赞一个!!

  35. 匿名

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

  36. 匿名

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

  37. 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’

    请问应该该怎么解决?

    • yalewoo 作者

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

      • DnKi

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

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

        • yalewoo 作者

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

  38. DnKi

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

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

    • yalewoo 作者

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

    • DnKi

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

  39. yeke

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

  40. vector chen

    良心文章,赞

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

  42. 乐鸡

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

  43. 陈腱

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

    • yalewoo 作者

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

  44. 温柔一刀

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

    • yalewoo 作者

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

      • 温柔一刀

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

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

    • 匿名

      Make.sublime-build 文件修改以下行:
      “working_dir”: “${folder:${project_path:${file_path}}}”,
      改成 “working_dir”: “${file_path}”,
      就可以了

  46. 田旭

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

  47. photor

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

  48. 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]
    求解

  49. x麒

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

  50. 匿名

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

  51. 刘畅

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

  52. stella

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

我要评论

验证码*: 8 + 9 =