不知道你是否也有类似的困惑:我想要C代码快速验证一段代码的功能是否正常,但是像我这样长期以Linux命令行编译C代码为主,一般的开发模式都是,都是Window下使用编辑器编辑代码,而编译是需要切换到Linux下。
虽然这也是主流的嵌入式编译流程,但是如果有一种不用切到Linux就可以完成的IDE,我想应该会提高不少工作效率。
另外,一般我们嵌入式开发中,gcc作为非常主流的C编译器,学习好它并灵活应用好它,对我们的技术提升也是帮助非常大。
所以,最好这个IDE是使用gcc来编译C代码的,而不是微软的C编译器,因为它并不是一个主流的嵌入式编译环境。
同样的,在编译Python代码的时候,也有类似的问题。不过好在Python环境,可以使用PyCharm。但这个IDE是需要另外安装的,如果我有一个IDE环境或者说是一个编辑器工具,可以同时兼顾gcc编译C代码和运行Python代码,那是不是少了一个IDE的负担,从工具的使用上,我们都是熟能生巧,越多使用同款工具,越能更快速地掌握其高效工作的方法。
以上讲了这么多,再来说说,为何我会选择Sublime作为这个编辑器的载体。
Sublime有windows版本、Linux版本、也有MacOS版本,这些主流的平台,都可以有同样的IDE表现,这无疑减少了使用IDE的学习迁移成本。
几乎你想得到的主流编译语言,它都支持,语法高亮这种刚需,自然是必不可少。
本质它就是一个编辑器,而不是一个复杂的IDE。所以它能做到非常轻量级,作为程序员,往往都喜欢这种简单高效的工具,而不喜欢类似VSxxxx那种繁琐而笨重的IDE,这也是为何一大堆程序员会非常高频使用Notepad++这种轻量化的编辑器。
对比Notepad++,我认为在见工程上,Sublime绝对是甩它一条街,因为Sublime是直接把你工程代码的目录文件夹,拖拉进来,工程就生成。就好比下面的工程,mbedtls的代码:
一个工具能不能高效使用的一个参考维度是,能不能提供插件化定制或脚本化定制的功能。而这一点,Sublime在设计之初就很好地考虑到了,自然支持插件化和脚本化,没有任何问题。
一个工具能不能高效使用的另一个参考维度是,能不能支持自定义快捷键?这一点,无疑是加分项,每个人都有自己熟悉的操作方式,当有了自己熟悉的快捷键,想工作效率不提高都难哦!
本教程的环境:
PC Sublime: Windows10 Sublime v3.2.2 非注册版本
Cygwin:v9.3.0
gcc: v10.2.0
你可以从Sublime的官网下载指定平台的安装包,然后按照提示安装好软件即可。
安装好软件后,在桌面可以看到Sublime的图标,这个就是它了!
你可以从Cygwin的下载页面,下载指定的安装包,如下所示:
下载到setup-x86_64.exe后,双击打开,按照提示一步步安装即可,注意,所有的选择项按默认的即可。
参考下图,
在Sublime的菜单栏,选择Tools -> Build System -> New Build System,这时会跳出一个新的配置文件处于编译状态,输入下面的配置代码:注意使用下面的代码替换到其所有的内容。
{
"shell_cmd": "start cmd /k \"C:\\llc\\softwares\\sublime\\sublime-auto-gcc.bat\" ${file}"
}
然后点保存,把文件名命名为gcc.sublime-build,存放的路径就放在其提示存放的**默认位置即可;不能随意改动其位置,否则sublime就找不到了。
细心的朋友一定发现了,gcc.sublime-build里面用到了一个bat脚本,存放在:C:\llc\softwares\sublime\sublime-auto-gcc.bat;注意这个路径是我的存放路径,如果你的环境跟我不一样,到时记得改回你的路径。
这个sublime-auto-gcc.bat的内容如下:
@echo off
::echo %1
::echo hello world
::echo bat fie path: %~dp0
set file=%1
set gcc_path=C:\cygwin64\bin
set gcc_exe=gcc.exe
set tmp_out_exe=%file%.tmp.exe
cd %gcc_path%
echo Compiling ...
echo %gcc_exe% %file% -o %tmp_out_exe%
%gcc_exe% %file% -o %tmp_out_exe%
echo Running ... %tmp_out_exe%
echo ------------------------------------
echo=
::start cmd /k %file%.exe && pause && exit
%tmp_out_exe%
echo=
echo ------------------------------------
::echo Deleting ... %tmp_out_exe%
del /f/s/q/a %tmp_out_exe%
pause
exit 0
这里需要注意的就是set gcc_path=C:\cygwin64\bin这一行,记得替换成你的环境下gcc的路径。你可以搜索一下你安装完cygwin之后,gcc.exe放在哪个路径,把那个路径填进去即可。
比如我的是:
如下图所示:
在Sublime的菜单栏Pererences -> Key Bindings,之后会跳出一个自定义快捷键的配置文件,将右侧的文件修改成以下内容:
[
{
"keys": ["f10"],//这一行是自己设的快捷键,其它为复制的棕色字体部分
"command": "build", "args":
{
"select": true
}
},
]
如下图:
注意这里配置的快捷键是F10,如果你想配置成你想要的快捷键,注意不要与现有的快捷键冲突即可。
配置完之后,按下F10就可以看到脚本被调起来了。
首先使用sublime编写一段简单的C代码,如下:
#include
int main(int agrc, const char *argv[])
{
printf("Hello C world !\n");
return 0;
}
然后Ctrl+S保存为hello.c,紧接着按下F10,你就可以看到这个C代码在被gcc编译,随后自动把编译后可执行文件运行起来,输出Hello C world !
如果你按下F10之后,报错了,你可能需要确认下Tools -> Build System里面打勾的是不是gcc那一项,如果不是的化,你需要选择gcc,然后再重新F10,应该就可以了。
还有一点需要注意的是,当你按下F10的时候,一定是当前的C文件处于最前端编辑状态,不能切换到其他文件,因为这里是会把当前编辑的文件名传递给编译脚本,达到编译运行的效果的。
有了gcc的环境搭建的基础上,配置Python的运行环境就简单很多了。
本教程的环境:
PC Sublime: Windows10 Sublime v3.2.2 非注册版本
python: v3.7.8
本小节可参考教程,具体的python版本可以自行选择,安装成功之后,打开cmd,输入python -v,可以看到类似的版本信息,证明你的python环境安装OK了。
注意:安装过程中,务必选择把python添加到环境变量中去,否则可能会影响脚本的正确运行。
C:\Users\redtea>python -V
Python 3.7.8
参考下图,
在Sublime的菜单栏,选择Tools -> Build System -> New Build System,这时会跳出一个新的配置文件处于编译状态,输入下面的配置代码:注意使用下面的代码替换到其所有的内容。
{
"shell_cmd": "start cmd /k \"C:\\llc\\softwares\\sublime\\sublime-auto-python.bat\" ${file}"
}
然后点保存,把文件名命名为python.sublime-build,存放的路径就放在其提示存放的默认位置即可;不能随意改动其位置,否则sublime就找不到了。
细心的朋友一定发现了,python.sublime-build里面用到了一个bat脚本,存放在:C:\llc\softwares\sublime\sublime-auto-python.bat;注意这个路径是我的存放路径,如果你的环境跟我不一样,到时记得改回你的路径。
这个sublime-auto-python.bat的内容如下:
@echo off
::echo %1
::echo hello world
::echo bat fie path: %~dp0
set file=%1
set python_exe=python
echo Running ... %file%
echo ------------------------------------
echo=
::start cmd /k %file%.exe && pause && exit
%python_exe% %file%
echo=
echo ------------------------------------
pause
exit 0
如果gcc那一步已经配置好了,本步骤可以跳过,因为他们是共有的快捷键,配置成F10就好了。
首先使用sublime编写一段简单的Python代码,如下:
import os
import sys
def hello_world():
print('Hello python world !')
if __name__ == "__main__":
hello_world()
然后Ctrl+S保存为hello.py,紧接着按下F10,你就可以看到这个Python代码就被运行起来,输出Hello python world !
如果你按下F10之后,报错了:
你可能需要确认下Tools -> Build System里面打勾的是不是gcc那一项,如果不是的化,你需要选择python,这里需要注意大小写,我们建立的build是小写的python,然后再重新F10,应该就可以了。
还有一点需要注意的是,当你按下F10的时候,一定是当前的python文件处于最前端编辑状态,不能切换到其他文件,因为这里是会把当前编辑的文件名传递给运行脚本,达到运行的效果的。
核心流程原理就是:
新建一个build system流程,
而这个流程仅仅是把当前编辑的文件名取到,
然后传递给cmd开启的一个sublime-auto-xxx.bat脚本,
这个脚本就负责对传入的文件(C文件或python文件)做更多的处理:
— C文件的话,就调用gcc.exe先把它编译成exe,然后把exe运行起来;
— python文件的话,就调用python.exe把python文件运行起来。
同时,这里会通过Key Bindings绑定了一个快捷键,使得可以按一键就完成了所有编译运行流程,高效便捷。
掌握了上面的核心原理之后,你想怎么玩就怎么玩。
比如你想编译运行一个Java文件?
比如你想单独地运行一个BAT脚本?
这些都将变得so easy !
更重要的是,由于在build system里面我建立了一个BAT脚本做跳板(就是那个sublime-auto-xxx.bat脚本),那么我理论上我是可以通过它来执行任何自动化运行的事情的!
比如我就还建立了一个rsync远程同步的功能,一键实现本地目录与远程目录完全同步,这也是非常好用的。
更多的功能,真的就取决于你的想象力!
有了这个教程,你是不是可以把windows下编辑代码-linux下命令行编译的操作流程摒弃了?
有了这个教程,你是不是应该把你的PyCharm关闭一段时间呢?
这么高效的工作方法,你都学会了吗?
欢迎交流讨论,期望你的宝贵建议。