文章目录
缘起
在windows有很多集成开发环境(vs系列,code::blocks等等)可以用,为什么要使用gcc在dos下面编译一个c程序呢?因为博主最近要看一下uC/OS-II方面的东西,然后教材使用的是:任哲的《嵌入式实时操作系统μCOS-II原理及应用》,在这本书里面介绍将c语言程序一步步编译运行的时候使用的是Borland C++3.1精简版,这个编译器在Turbo C的时代是非常受欢迎的,但是在2009年的时候Borland公司都已经被Micro Focus收购了。所以我就想直接用gcc,不用Borland C++了。
正文
安装gcc
首先安装gcc编译器,这个网上都有教程,如果之前有用过类似code::blocks的集成开发环境的话,gcc编译器都安装好了。博主之前是安装过code::blocks的,所以第一步省了。给个图
MinGW这个目录就是gcc移植到windows的结果。因为gcc只是个编译器嘛,如果要在windows这个平台下使用的话肯定是要加点东西的。MinGW本身也存在多个分支,可以在Windows、Linux中编译能在Windows中执行的二进制代码。
记得先给这个bin目录加个PATH环境变量
使用gcc来编译c语言程序
使用gcc可以直接编译一个c语言程序,也可以一步步来编译。如下:
直接编译生成.exe文件
在桌面上创建一个main.c文件
# include <stdio.h>
int main (void)
{
printf("hello world!!!");
return 0;
}
打开cmd,进入main.c所在目录
C:\Users\Administrator\Desktop>
- 生成main.exe:gcc -o main.exe main.c
- 执行main.exe:main
C:\Users\Administrator\Desktop>gcc main.o -o main
C:\Users\Administrator\Desktop>main
hello world!!!
生成的文件如下图:
在cmd里面使用gcc编译器编译c文件流程
进入main.c文件所在目录
- 预编译处理,生成main.i文件:gcc -E main.c -o main.i
- 编译处理,生成main.s文件:gcc -S main.i -o main.s
- 汇编处理,生成main.o文件:gcc -c main.i -o main.o
- 链接处理,生成main.exe文件:gcc main.o -o main
- 执行main.exe:main
C:\Users\Administrator\Desktop>gcc -E main.c -o main.i
C:\Users\Administrator\Desktop>gcc -S main.i -o main.s
C:\Users\Administrator\Desktop>gcc -c main.i -o main.o
C:\Users\Administrator\Desktop>gcc main.o -o main
C:\Users\Administrator\Desktop>main
hello world!!!
生成的文件如下图所示:
利用gcc编译多个c语言源文件
第一步建立文件
在桌面建立一个文件夹(main),然后在该文件夹里面建立6个文件,分别为pa.c、pa.h、pb.c、pb.h、pc.c、pc.h、test.c。基本思路是在test.c文件里面引用pa.c、pb.c、pc.c文件里的内容。各个文件的代码如下所示:
// pa.h
# ifndef PA_H
# define PA_H
void A_print();
# endif
// pa.c
# include <stdio.h>
# include "pa.h"
void A_print()
{
printf("AAAAAAAAA\n");
}
// pb.h
# ifndef PB_H
# define PB_H
void B_print();
# endif
// pb.c
# include <stdio.h>
# include "pb.h"
void B_print()
{
printf("BBBBBBBB\n");
}
// pc.h
# ifndef PC_H
# define PC_H
void C_print();
# endif
// pc.c
# include <stdio.h>
# include "pc.h"
void C_print()
{
printf("CCCCCCCC\n");
}
// test.c
# include "pa.h"
# include "pb.h"
# include "pc.h"
int main (void)
{
int i = 0;
for(i; i < 10; i++)
{
A_print();
B_print();
C_print();
}
return 0;
}
编译文件
利用上面说过的gcc命令将pa.c、pb.c、pc.c、test.c三个文件编译形成.o文件。形成之后的main目录如下图所示
链接 & 运行
下面将pa.o、pb.o、pc.o、test.o文件链接生成test.exe
C:\Users\Administrator\Desktop\main>gcc pa.o pb.o pc.o test.o -o test
然后运行,结果和意料之中的一样。
gcc基本参数
- -o:指定输出文件名
- -E:只进行预处理,不编译
- -S:只编译,不汇编
- -c:只编译、汇编,不链接
- -g:包含调试信息
- -I:指定include包含的搜索目录
- -o:输出成指定文件名
参考文献
https://zhidao.baidu.com/question/380094783.html
Microsoft Visual C++ 和 Borland C++ Builder 之比较:
gcc编译C语言程序的执行过程
GCC 编译详解