用EditPlus和Msys2搭个C语言学习环境
十几年前学过几天C语言,用的TC2.0,那时候还不懂什么叫跨平台。本来上初中的时候,代数就没学好,天天跟着书练习一些水仙花数之类的程序,好烦,于是,放弃了。
现在发现C很万能,于是,我要重新学C语言了。
既然学,那先搭个环境吧。
我这辈子,可能是离不开EditPlus了,除非有一天我写出能像EditPlus自动完成代码那样,并且更顺我手的编辑器。
废话不多说,上正文。
一、EditPlus部分
1、1,官网下载,不多说,虽然已经5.1,但我一直在用4.3,对我来说没啥大区别
1、2,汉化,https://
我比较喜欢用这个汉化版,好像这个汉化版的链接,曾经出现在EditPlus官网,但现在找不到了。
二、Msys2部分
2、1,官网下载,安装后,只是一个类似Arch Linux的基础环境,连vim和gcc都没有。在C:\msys64搜索gcc,也没有以.exe为结尾的可执行文件。所以现在还不能和EditPlus配合搭建编译环境。
相关介绍,参照:https://blog.
2、2,设置路径:最好还是设置一下,用起来方便。加入系统的环境变量PATH后,把PATH所有内容复制,使用命令提示符让环境变量PATH直接升效。
set path=(右键粘贴刚才复制的PATH内容)
2、3,安装Vim,gcc等需要的包
开始菜单——MSYS2 64bit(我安装的是64位的)——MSYS2 MSYS,输入:
pacman -S gcc
这时再在C:\msys64搜索gcc,已经有x86_64-pc-msys-gcc-7.3.0.exe和x86_64-pc-msys-gcc.exe这样类似的四、五个可执行文件。并且,如果你的路径设置的正确的话,已经可以在命令提示符中运行它们了。
三、配置编译和运行命令:
新建个如a.c文件,并用EditPlus写一段C语言代码。EditPlus工具菜单——配置自定义工具,
更改组名,如:编译运行C语言
添加工具——程序(我的这个版本叫程序,有的版本叫应用程序),如下图:
注意,我这个组的第一条命令是MingW64的gcc编译,这文章网上一大把。第三条是运行编译后的目标程序,如a.exe。这都没什么好说的。
四、对比:
我用刚才的x86_64-pc-msys-gcc.exe(也是7.3.0-1的版本,只不过少写几个版本号)编译的目标程序是139KB,而MingW64编译的是52.7KB。
原来,MingW64的是8.1的,又找了一些文章,https://jingyan.baidu.com/article/9113f81b6399c12b3214c70e.html
都提到了一个mingw-w64-x86_64-toolchain的包。
安装上,发现多了x86_64-w64-mingw32-gcc.exe等可执行文件。用它编译,52.7KB。
我以为139KB的,也许可以在32位和64位都能运行,拿到32位Win7虚拟机里运行,结果也只不过是体积大了一点而已,还是不能运行的。
所以,结论是如果想编译32位的目标程序,需要安装pacman -S mingw-w64-i686-toolchain。另行编译。
五、pacman更新、查找、列表等命令:
pacman -Sl 用于列出所有可以安装的包
pacman -Sy 刷新软件源,之前要编辑几个文件,加入国内源
pacman -Su 更新所有软件包版本
pacman -Ss gcc 查找带有gcc字样的包
pacman -Su更新后,发现x86_64-pc-msys-gcc.exe是7.4的,x86_64-w64-mingw32-gcc.exe是8.3的,i686-w64-mingw32-gcc是7.4的,
用pacman -Su mingw-w64-i686-toolchain,更新了14个包,结果发现,还是7.4的。。。
六、右键菜单:
文章中提到的,在msys2_shell中,set MSYS2_PATH_TYPE=inherit & set CHERE_INVOKING=1,然后编辑注册表:
Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\Directory\Background\shell\在msys2中打开\command] @="C:\\msys64\\usr\\bin\\sh.exe --login -i"
七、扩展:
pacman -Sl 列出了好多,像Tcl、Tk、Python等等的包。也包括32位和64位的。所以,这个帖子也很好的解决了我在学习Ruby+Msys2时的配置疑惑。
八、遗憾:
在EditPlus里,不能一组一组的执行命令,我感觉应该不是版本的问题。每次写个小代码,都要Ctrl + 1,再Ctrl + 2,分两次编译和运行看结果。
没有达到理想化。。。希望在学习Java的时候,这个问题能得到解决。。。。