linux下make工具使用系列1

一、概述

linux可以使用make来编译,make是一个命令工具,一个解释Makefile中命令的工具,各个厂商的make各不相同,也有不同的语法,但都在“文件依赖性”上做文章。详细了解参考《GNU Make使用手册》。
make可以根据文件更新的时间戳来判断需要重新编译哪些文件以及编译的先后顺序。

代码变为可执行文件分为两步:
1、编译,转为中间文件,编译时,编译器需要的是语法的正确和函数/变量声明的正确,只有这样才能编译通过,编译出一个中间目标文件;
2、链接,把中间文件合并成执行文件。链接时,主要是链接函数和全局变量。

二、规则样式

基本的样式如下:

目标:依赖
<tab>命令

hello:hello.c
gcc -o hello hello.c

其中的hello表示目标文件,hello.c表示目标文件欲生成所需要依赖的文件。gcc -o hello hello.c表示从hello.c生成hello可执行文件的命令。

目标也可以是一个标签,如“clean”,其后可没有依赖文件,称为“伪目标”,make不会自动执行该规则 的命令,要执行这种规则的命令,需要在make命令后明显的指出标签来,如make clean才会执行clean对应的规则。

make会一层一层的寻找依赖关系,如果最终的依赖文件不存在,那么make会退出。

其中如果依赖文件有一个比目标文件时间戳新,那么命令就会执行。

三、变量定义

makefile中的变量是一个字符串,可以类比于C中的宏;
延时变量:当真正使用这个变量时才确定其值,使用“=”“?=”或者define定义为延时变量;
立即变量:定义时已经确定其值,使用“:=”赋值;
如果赋值采用”+=”,则如果其右边变量为立即变量,则为立即变量,否则是延时变量。

四、符号含义

1、$@:规则的目标文件名;
2、$^:规则的所有依赖文件;
3、$<:规则的第一个依赖文件;
4、%:通配符,和一个字符串中任意个数字符相匹配;
利用以上的符号替代之前的hello规则
原规则:

hello:hello.c
    gcc -o hello hello.c

利用符号替换,形式:

hello:hello.c
    gcc -o $@ $^

你可能感兴趣的:(arm,makefile)