本文转自:http://ynoooo.javaeye.com/blog/133474
用vim编写源代码,用gcc编译连结程序几乎已成为LINUX下程序设计的标准开发模式了,(当然emacs也是非常出色和流行的),本文教你如何在Windows下做到同样的事情。
gcc和vim都有支持不同平台的版本,win32也当然不例外。此外,配合不同的库像WINAPI、GTK+等可开发出GUI程序。
安装GCC
gcc的官方主页(http://gcc.gnu.org)上好像有for win32的版本,但MinGW、CYGWin、Dev-C++、DJGPP等都集成了GCC win32版,以下以MinGW(Minimalist GNU For Windows)为例:到Sourceforge(http://sourceforge.net/project/showfiles.php? group_id=2435)下载一个MinGW-2.0.0-3.exe,然后安装,它包括了
最后把安装路径下的bin目录加至$PATH (和安装jdk时,调整path时一样的) (系统属性-->高级-->环境变量-->系统变量 中添加) 可以在命令行下打gcc -v来看看是否能正常运行。
安装VIM
VIM针对Microsoft操作系统的版本很多,包括DOS16、Win32 DOS(9x)、Win32 Console(NT/2K/XP)、Win16 GUI、Win32 GUI等,真不愧是editor中的老大哥。
官方网址: http://www.vim.org/ 或 vim.sourceforge.net (以VIM 6.1 for Win32 GUI(NT/2K/XP)为例。)
实战一下
以一个经典得不能再经典的例子Hello World!来说明如何用vim和gcc来生成win32程序。(gcc的 命令和linux下是一样的。)
|
用GCC编译连结运行:
|
gVim(Vi IMproved) Vim是Linux上的著名的文本编辑器,他是早年的Vi编辑器的加强版。这个gVim是windows版的,并且有了标准的windows风格的图形界 面,所以叫g(graphical)Vim。这是一个国际版本,会根据安装的平台自动选择相应语言包,支持中文及其各种编码,连界面也是中文的,请放心使 用。这个极具Unix特色和风格(simple is the best)的编辑器相信会给您带来不同的感受。
一. 常用编译命令选项
假设源程序文件名为test.c。
1. 无选项编译链接
用法:#gcc test.c
作用:将test.c预处理、汇编、编译并链接形成可执行文件。这里未指定输出文件,默认输出为a.out。编译成功后可以看到生成了一个a.out的文件。在命令行输入./a.out 执行程序。./表示在当前目录,a.out为可执行程序文件名。
2. 选项 -o
用法:#gcc test.c -o test
作用:将test.c预处理、汇编、编译并链接形成可执行文件test。-o选项用来指定输出文件的文件名。输入./test执行程序。
3. 选项 -E
用法:#gcc -E test.c -o test.i
作用:将test.c预处理输出test.i文件。
4. 选项 -S
用法:#gcc -S test.i
作用:将预处理输出文件test.i汇编成test.s文件。
5. 选项 -c
用法:#gcc -c test.s
作用:将汇编输出文件test.s编译输出test.o文件。
6. 无选项链接
用法:#gcc test.o -o test
作用:将编译输出文件test.o链接成最终可执行文件test。输入./test执行程序。
7. 选项-O
用法:#gcc -O1 test.c -o test
作用:使用编译优化级别1编译程序。级别为1~3,级别越大优化效果越好,但编译时间越长。输入./test执行程序。
8.编译使用C++ std库的程序
用法:#gcc test.cpp -o test -lstdc++
作用:将test.cpp编译链接成test可执行文件。-lstdc++指定链接std c++库。
二. 多源文件的编译方法
如果有多个源文件,基本上有两种编译方法:
[假设有两个源文件为test.c和testfun.c]
1. 多个文件一起编译
用法:#gcc testfun.c test.c -o test
作用:将testfun.c和test.c分别编译后链接成test可执行文件。
2. 分别编译各个源文件,之后对编译后输出的目标文件链接。
用法:
#gcc -c testfun.c //将testfun.c编译成testfun.o
#gcc -c test.c //将test.c编译成test.o
#gcc -o testfun.o test.o -o test //将testfun.o和test.o链接成test
以上两种方法相比较,第一中方法编译时需要所有文件重新编译,而第二种方法可以只重新编译修改的文件,未修改的文件不用重新编译。