Makefile基本规则
规则介绍
Makefile由一组规则组成,规则如下:
makefile
目标: 依赖
(tab)命令
Makefile基本规则三要素:
- 目标:要生成的目标文件,通常是要产生的文件名称,目标可以是可执行文件或其它obj文件,也可是一个动作的名称
- 依赖:目标文件由哪些文件生成,一个目标通常有几个依赖文件(可以没有)
- 命令:通过执行该命令由依赖文件生成目标,make执行的动作,一个规则可以含几个命令(可以没有),有多个命令时,每个命令占一行
make命令格式
make是一个命令工具,它解释Makefile 中的指令(应该说是规则)。
make命令格式:
shell
make [ -f file ][ options ][ targets ]
[ -f file ]
:
- make默认在工作目录中寻找名为GNUmakefile、makefile、Makefile的文件作为makefile输入文件
- -f 可以指定以上名字以外的文件作为makefile输入文件
[ options ]
:
-v
: 显示make工具的版本信息-w
: 在处理makefile之前和之后显示工作路径-C dir
:读取makefile之前改变工作路径至dir目录-n
:只打印要执行的命令但不执行-s
:执行但不显示执行的命令
[ targets ]
:
- 若使用make命令时没有指定目标,则make工具默认会实现makefile文件内的第一个目标,然后退出
- 指定了make工具要实现的目标,目标可以是一个或多个(多个目标间用空格隔开)
示例
实例
下面以具体的例子来讲解:
当前目录下有main.c
add.h
add.c
,根据这个基本规则编写一个简单的Makefile文件,生成可执行文件main
。
第一个版本的Makefile:
makefile
# 默认目标
all: main
# main依赖于main.c和add.c
main: main.c add.c
gcc main.c add.c -I ./ -o main
c
#include "add.h"
#include <stdio.h>
int main(void) {
printf("%d\n", add(10, 20));
return 0;
}
c
#ifndef __SYSS_ADD_H__
#define __SYSS_ADD_H__
int add(int a, int b);
#endif //__SYSS_ADD_H__
c
#include "add.h"
int add(int a, int b) {
return a + b;
}
执行make
缺点:效率低,修改一个文件,所有的文件会全部重新编译。