Make 命令简单上手
Make 命令简单上手
1 什么是Make
把代码编译(Compile)成可执行文件时,make命令可以用来定制编译规则,以及执行一些其它命令。使用make命令定制编译过程叫做构建(Build)。使用Make可以完成工程的高效自动编译。make使用Makefile文件来定制编译规则
2 Makefile文件格式
target : prerequisites
<tab> commands
- tager:通常是文件,也可以为操作名,不可省略
- prerequisites:前置依赖条件,一般是其它文件,可以省略(但是和commands必须存在一个)
- commands:一行或者多行shell命令,可以省略(但是和prerequisites必须存在一个)
2.1 target
一个目标(target)就构成一条规则。目标通常是文件名,指明Make命令所要构建的对象。目标也可以是多个文件名,之间用空格分隔;目标可以是操作名。
当目标是操作名时,通常使用伪目标声明(PHONY),避免命令失效.
.PHONY: clean test
clean:
rm *.o temp
test:
bash test.sh
2.2 prerequisites
前置条件通常是一组文件名,之间用空格分隔。它指定了”目标”是否重新构建的判断标准:只要有一个前置文件不存在,或者有过更新,”目标”就需要重新构建。
2.3 commands
命令(commands)表示如何更新目标文件,由一行或多行的Shell命令组成。它是构建”目标”的具体指令,它的运行结果通常就是生成目标文件。每行命令之前必须有一个tab键。
3 Makefile语法
3.1 注释
# 井号表示注释
3.2 echoing 回声
正常情况下,make会打印每条命令,然后再执行,这就叫做回声(echoing)。
test :
# 这是测试
在命令的前面加上@,就可以关闭回声
test:
@# 这是测试
3.3 通配符&匹配模式
通配符(wildcard)用来指定一组符合条件的文件名,与 Bash 一致
- *: 可以匹配任何字符
- ?: 匹配任意单个字符
- […] : 匹配一个单字符范围
- %:对同类型文件进行匹配
%.o : %.c #所有的. o文件依赖于.c文件
3.4 变量
Makefile 允许使用等号自定义变量类似shell变量的用法,自定义变量可以实现类似C语言宏的功能。
OBJ_DIR = ./.obj/
SOURCE_DIR = ./src/
TARGET = multisum
GCC = gcc
CFLAGS = -lpthread
$(TARGET):$(OBJ)
$(GCC) -o $(TARGET) $(OBJ) $(CFLAGS)
$(OBJ):$(SOURCE_FILE)
$(GCC) -c $(SOURCE_FILE) -o $(OBJ)
参考自阮一峰的博客