Makefile基础篇(三)——目标

前言:
   makefile基础语法由目标、依赖、命令构成,命令由shell指令构成,而目标则是要编译的目标或动作。

1 编译目标

  目标指要编译的目标,也可以时一个动作。下面举例说明。
  有以下main.c文件。

1
2
3
4
5
6
7
8
#include <stdio.h>

int main(void)
{
printf("Hello World!\n");

return 0;
}

  通过gcc编译main.c文件只需在终端执行指令 gcc main.c ,我们可以对该指令定义一个目标,比如。

1
2
Tgt:
gcc main.c

  终端 make 指令执行后会执行目标 Tgt ,而该目标包含的指令为 gcc main.c ,因此该指令会被执行。
  这样做的好处是当指令比较长或比较多时,用一个简短的目标代替它编辑和阅读都会方便很多,当一段指令被需要多次执行时不需要反复写指令,修改指令时也只需要修改一处即可,否则所有位置都要修改。另外,有了目标后,也方便编辑目标之间的依赖关系。

2 多个指令或无指令

  一个目标可以包含多个指令,指令会从上往下依次执行,比如。

1
2
3
4
Tgt:
@echo "Commoand 1"
@echo "Commoand 2"
@echo "Commoand 3"

   echo 前面的 @ 表明取消该条指令的回显,使得显示内容更简洁。该目标执行跟c代码毫无关系,以下是make执行结果。

1
2
3
Commoand 1
Commoand 2
Commoand 3

  目标也可以没有指令,比如这样。

1
Tgt:

3 多个目标

  在一个makefile文件内可以有多个目标定义,make指令默认执行第一个目标(从上往下看),通常讲最终目标放在最前面作为第一个目标(即默认目标),这样的好处是指令简单只需输入 make ,而不用记住目标名。

1
2
3
4
5
TgtA:
@echo "Deal TgtA"

TgtB:
@echo "Deal TgtB"

  执行make后得到输出如下。

1
Deal TgtA

  有多个目标时可以指定执行某些目标。通过指令 make TgtA 指定执行目标TgtA,通过指令 make TgtA TgtB 指定执行目标TgtA和TgtB,make多个目标时执行的顺序时从左到右。

4 clean目标

  通常makefile中会定义一个clean目标,专用于对工程编译的产物进行清理。比如。

1
2
3
4
5
Tgt:
gcc main.c

clean:
rm a.out