一 .gcc
编译指令:
gcc t.c -o t
生产t可执行文件
此编译过程是分为四个阶段进行的:
1.预处理(也称预编译,Preprocessing)
(1).作用:展开#后的所有头文件。
(2).格式: gcc -E t.c -o t.i
或 gcc -E t.c
可以输出t.i文件中存放着t.c经预处理之后的代码。
gcc的-E选项,可以让编译器在预处理后停止,并输出预处理结果。
2.编译(Compilation)
(1).作用:语法检查,将C语言变为汇编语言。
预处理之后,可直接对生成的t.i文件编译,生成汇编代码:
(2).格式:gcc -S t.i -o t.s
gcc的-S选项,表示在程序编译期间,在生成汇编代码后,停止,-o输出汇编代码文件。
3.汇编 (Assembly)
(1).作用:将汇编文件(文本文件)变为机器能识别的二进制文件。
对于生成的汇编代码文件t.s,将其编译为目标文件:
(2).格式: gcc -c t.s -o t.o
4 .连接(Linking)
(1).作用:将程序的目标文件与所需的所有附加的目标文件连接起来,最终生成可执行文件。
其中附加的目标文件包括静态连接库和动态连接库。
对于生成的t.o,将其与C标准输入输出库进行连接,最终生成程序t
(2). 格式 :gcc t.o -o t
之后在命令行窗口中,执行 ./t
得到输出结果。
二. make和make file
1. make命令运行时,须要一个 Makefile 文件,以告诉make命令须要怎么样的去编译和链接程序。
2. 一个Makefile文件包含五个方面的内容:
(1). 具体规则
(2). 隐含规则
(3).定义变量
(4). 指令
(5). 注释
3.Makefile的规则
(1). 作用: 告诉make程序要做的事以及做这件事所依赖的条件。
(2).格式:target: dependency
(Tab字符)command
target(目标): 通常是要产生的文件的名称
dependency(依赖): 指用来输入从而产生目标的文件
command(命令): 是make执行的动作,一个规则可以有多条命令,每个命令占一行。命令行的第一个字符是Tab。
(3).示例 :
Target = hello
Object = hello.o print.o
$(Target) : $(Object)
gcc $(Object) -o $(Target)
.PHONY:clean
clean:
rm *.o hello
hello的生成规则包含了规则的三个基本要素:目标、依赖、命令。clean规则没有依赖,不属于编译的内容,
只是完成一个指定的动作。隐含规则能够告诉make使用传统的标准方法完成任务。
例如,生成一个目标文件的方法是使用C编译器编译C语言源程序,这个步骤所用到的命令基本都是相同的。
使用隐含规则就无须详细指定这些命令,而make能按照文件名的后缀的变化,决定所采用的规则。
在写完makefile之后用 make工具
(4).make工具的基本用法:
make [-C dir] [-f file] [target ...]
-C dir: 执行时进入dir目录,默认是当前目录
-f file: 使用file作为Makefile
target: 要完成的目标,目标在Makefile中定义,默认是定义的第1个目标