Linux系统中编译C文件是用的gcc编译器,编译流程分为四个步骤:
- 预处理,生成预编译文件:
gcc -E m.c -o m.i
- 编译生成汇编代码:
gcc -S m.i -o m.s
- 汇编,生成目标文件:(这步以后生成的文件我们无法阅读)
gcc -c m.s -o m.o
- 链接,生成可执行文件:
gcc m.o
如果想一步到位,用如下命令即可:
gcc m.c
编译器默认生成目标文件是a.out,如果想更改文件名称,需要使用-o参数:
gcc m.c -o x
附一张简单截图大家可以看一下。
Makefile的使用
上边做了一个简单的铺垫,下边我们来说一下makefile;编写makefile是自动化编译的必备技能,通过编写Makefile,我们可以简化很多操作。
我们写一个简单的程序(保存为moon.c):
#include <stdio.h>
int main(){
printf("I am MonooseOS.\r\n");
return 0;
}
我们在同级目录下新建makefile文件:
m:moon.c
gcc moon.c -o x
第二行的前边是敲键盘上的tab键产生的
我们使用make命令一步到位,生成可执行文件x;截图如下所示;
我们解释一下我们上边做了什么?我们先看一下makefile的规则:
target... : prerequisites ...
command
...
-------------------------------------------------------------------------------
target也就是一个目标文件,可以是Object File,也可以是执行文件。还可以是一个标签(Label),对于标签这种特性,在后续的“伪目标”章节中会有叙述。
prerequisites就是,要生成那个target所需要的文件或是目标。
command也就是make需要执行的命令。(任意的Shell命令)
下一篇博客说明多文件编译。