转自:http://www.yalewoo.com/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.org/ ,但是从官网安装很麻烦,在线安装经常龟速容易失败。
雅乐网推荐的方法是借助codeblocks,选择带有mingw的版本安装,安装后把mingw文件夹复制出来就可以了。
这里提供了解压版的MinGW,是使用 codeblocks-13.12mingw-setup 安装后复制出来的:
http://pan.baidu.com/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.com/sublime_text_3_gcc.html
上一篇:
下一篇:
与 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条评论:
-
stella
感谢作者那么详细的教程!方便的话,可以加您微信以后请教一些问题吗?我的微信号是lsr790574961
-
刘畅
博主,您好 !
我想问问,makefile 编译多个文件的时候,怎么样可以采用 -std=c++11 呢,单个文件是加在 “cmd”里面,那么 makefile 的呢,该加在哪里呢 ? -
匿名
这是我找到最详细的配置教程了 非常感谢作者
-
x麒
太棒了!!这个教程能让我们了解编译配置文件里代码的具体内涵,帮助我们知其然更知其所以然,感谢博主啊!中间有个问题搞了好久,我在cmd使用g++可以运行,在sublime里使用自己的编译配置文件运行却总是报错,后来才发现是由于文件夹名字中包含了&这个字符,唉一个意想不到的错误折腾了好久TAT
-
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]
求解 -
photor
感谢作者写得如此详细!受教了!非常有用!!!
-
田旭
博主大赞 因为学校竞赛啥的都是规定用Dev-C++,之前一直用的Dev-c++,觉得Dev功能不是很强大,就准备换sublime了,但是看了很多关于sublime文件配置的文章都没解决,直到看了你这一篇,谢了!!
不知道可不可以加个QQ 一起讨论编程问题?
QQ:2655541751-
yalewoo 作者
欢迎加群讨论哈108332605
-
-
风
博主你好,请问为什么在cmd里运行makefile是编译成功的,但是在sublime text3里却一直显示错误“mingw32-make: *** No targets specified and no makefile found. Stop.”?(sublime-buld和您写的一样)
-
温柔一刀
谢谢楼主的详细攻略~~~另外问下,你研究生要毕业了吧?学的什么专业呢?
-
yalewoo 作者
哈哈 明年6月份毕业 实验室方向是社交网络分析~
-
温柔一刀
高大上哦,好像是大数据分析这种类型,以后工资高哦。 社交网络分析(Social Network Analysis) 是指基于信息学、数学、社会学、管理学、心理学等多学科的融合理论和方法,为理解人类各种社交关系的形成、行为特点分析以及信息传播的规律提供的一种可计算的分析方法。
-
yalewoo 作者
没啦 就是程序猿
-
-
-
-
陈腱
博主你好 ,我在测试你那个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这个文件
-
-
乐鸡
灰常好,灰常棒,相当不错,very good
-
yalewoo 作者
谢谢支持
-
-
感谢博主,文章写的详细又好懂!爱死你了。。。
-
yalewoo 作者
谢谢!
-
-
vector chen
良心文章,赞
-
yalewoo 作者
谢谢支持
-
-
yeke
感谢楼主,很详细!搜了N个方法,还是你这个靠谱,自己的电脑上已经配置成功了。
不过今天刚在单位的电脑上配置完成,按Ctrl+Shift+B运行时,发现弹出的cmd窗口里面空白无任何显示,等了一会后出现
“系统无法执行指定的程序。
请按任意键继续. . .”
这个提示,请问是什么问题呢?
Ctrl+B在SublimeText上是好的,提示“[Finished in 0.4s]”,就是弹出cmd时出问题了。 -
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不行。。。
-
-
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版本才加入的,你的版本低的话可以尝试删除这一行或者升级下
-
-
-
-
匿名
楼主还在吗,我想知道一下Ubuntu下C语言的编译配置文件修改的代码是怎么样的?
-
yalewoo 作者
抱歉哈 Ubuntu下没研究过 原理应该差不过 把windows下面的start cmd换成linux下面类似的 可以参考下这个 http://blog.csdn.net/xiongyangg/article/details/54578109
-
-
匿名
楼主问一下
现在只能是在编译的时候出现编译提示信息(即warning和error)
而在编译运行的时候没有编译提示信息(即warning和error)
怎么配置让它能够在编译运行时如果有error或warning时出现提示信息呢而不是只有文件路径-
yalewoo 作者
我试了下没有这个问题啊
-
-
Wilson
很完善,赞一个!!
-
yalewoo 作者
谢谢
-
-
小咸鱼
楼主问一下
利用Varians配置完后怎么保存呢(以什么名称保存在哪个目录下)?
还有怎么调用呢?
是不是用cmd运行后就可以用scanf给对应变量赋值了?
小白在这里谢谢楼主啦-
yalewoo 作者
抱歉啦 最近入职有点忙啦 才看到评论 保存到用户文件夹的Packages\User里面,通过sublime的菜单 Preference –> Browse Packages.. 可以打开这个路径,我电脑上的路径是C:\Users\yalewoo\AppData\Roaming\Sublime Text 3,文件名保存为 c.sublime-build 就可以了
然后用Ctrl+b选择你配置的命令就可以了
-
-
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文件
-
匿名
感谢你的提示,我已经解决这个问题了
-
-
-
-
匿名
楼主您好,很感谢您的教程,很详细。但是我在按照教程写的时候,出现了可以正常编译,但是执行时提示“[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版本的问题。。
-
Sue
sublime是最新的版本呀,3126,这个问题困扰我好久了
-
-
-
Little_Fall
谢谢谢谢,今年大一,去年学c看着您的教程装了,很好用但还有一些遗留问题。
今年学完java回来用c,重装的时候又找到了这篇教程,没想到还在持续更新修改。
很敬佩作者的实力和态度,再次感谢! -
帕特菛琪
写的太棒了!其他博客都是直接让你复制粘贴。这篇讲的清清楚楚,解答我很多问题
-
yalewoo 作者
谢谢支持
-
-
匿名
写得太棒了
-
lart
6666 .极好的。
-
M3r0dach
非常好的一篇教程
-
yalewoo 作者
谢谢夸奖
-
-
请问楼主makefile能不能贴出代码?
-
胡橙
请教一个问题,C++程序中有一个变量声明了,但是没使用,sublime出现警告信息阻止运行下去。 但其实这个多余的变量并不影响程序,许多其它的软件都是忽略的。 怎样才能取消这种阻止的行为?
-
yalewoo 作者
出现警告也不会阻止啊 也可以运行的 如果不想要警告就去掉-Wall选项
-
-
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
感觉是编译器的问题,但是安装感觉也没有问题啊
-
-
TT
我的运行提示no build system这是为什么呢?
-
yalewoo 作者
文件后缀要.c或.cpp,确保右下角的文件类型要选c或者c++,新建文件默认是Plain Text是不能编译的。build文件名称要c.sublime-build或者c++.sublime-build别写错了
-
-
博主,请问我按你的配置了 但是知行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] -
kongdd
您好为什么我的·sublime在运行c语言文件的时候通过scanf输入的时候,只要输入完,回车之后就会卡,运行程序是在生成的exe文件里
-
yalewoo 作者
是在新的cmd窗口中运行的吗?这样的话和sublime就没关系了,应该是你代码的问题。
-
-
CPP
你好,怎么让它自动补全呢,现在的插件,只能提示当前文件的,工程内其它文件内容就无法提示了
-
yalewoo 作者
要用插件吧 试试SublimeClang
-
-
kratos
这个博客好详细,棒棒哒
-
yalewoo 作者
谢谢夸奖
-
-
写的这么详细,太感人惹~~~
-
不错的文章,十分感谢作者。◕‿◕。
-
yalewoo 作者
谢谢
-
-
fan
请问您为什么我修改环境变量重启后还是运行不了c++程序,还是显示“[WinError 2] 系统找不到指定的文件。”,。。。
-
孤狼
不错不错
-
yalewoo 作者
谢谢[嘻嘻]
-
-
Jtome45
楼主我想问一下,为什么我按下Ctrl+B编译之后没有任何提示或者反应,但是Ctrl|+Shift+B就会编译并且运行?
-
yalewoo 作者
可能你的版本不是3083 。在新版本3083中,Ctrl+Shift+B是选择用哪个方式编译,在旧版本中Ctrl+Shift+B是运行配置文件中Run对应的操作,可以升级一下试试
-
Cpp
可能是快捷键冲突了
-
-
多谢啦,很有用,转载啦,带你链接了
-
修改环境变量后,不需要重启 windows,重启 SublimeText 即可~
-
yalewoo 作者
以前的版本不需要,但3083版本我试的时候是需要的 http://i4.tietuku.com/460ff45be129ba95.png
-
-
冷
[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]
为啥报错下面还有这么多代码,环境配置对了的-
这些不是报错,是打印执行命令、路径和环境变量
-
-
MrWhaT
蛮详细的,顶一下
-
yalewoo 作者
谢谢啦[嘻嘻]
-
-
配置之后出现问题 能否加qq请教一下 qq:937947662
-
yalewoo 作者
不好意思马上要考研了没时间你多百度百度吧[闭嘴]
-
-
啊啊
赞一个
-
lz,能否看一下你的makefile文件
-
yalewoo 作者
可以参考
跟我一起写Makefile – Ubuntu中文
http://wiki.ubuntu.org.cn/index.php?title=%E8%B7%9F%E6%88%91%E4%B8%80%E8%B5%B7%E5%86%99Makefile&variant=zh-cn
-
-
这样配置一次以后可以放U盘在新机器上直接用吗?
-
yalewoo 作者
使用Sublime Text的便携版本就可以啦 全部放U盘里
-
-
lz能不能加下QQ,一些问题希望能得到您的帮助,1172464741
-
yalewoo 作者
申请啦
-
-
折腾了半天,就你这个细节最详细,很快就解决了,大赞[赞][赞]
-
yalewoo 作者
谢谢支持[太开心]
-
-
学习下
-
可以问下为什么语法有错误的时候sublime不提示呢?
没有问题的时候是能正常编译运行的。。-
yalewoo 作者
会有提示的呀。编译运行后,sublime下面会有提示信息的。
成功的时候是[Finished in 0.7s]这样的,错误信息也会显示-
我自己没弄好。。直接把我同学的复制过来用了~
-
-