1.默认目标
1 ifeq ($(DEBUG),"true")
2 CC = gcc -g #生成debug版本,才可以生成调试信息,对程序进行调试,
3 else
4 CC = gcc
5 endif
6 .PHONY: all clean #伪目标,让编译器无条件执行,每次都会执行
7 all:test #这里默认编译test,hello是不编译的,要编译需要指定 make hello
8 test:
9 @echo "Just for test"
10 hello:lcd.o player.o
11 $(CC) -o hello lcd.o player.o #生成hello需要lcd.o和player.o
12 playe.o:player.c
13 $(CC) -o player.o -c player.c
14 lcd.o:lcd.c
15 $(CC) -o lcd.o -c lcd.c
16 clean:
17 rm -f lcd.o hello player.o
18
~
执行结果
2.多目标
1 ifeq ($(DEBUG),"true")
2 CC = gcc -g #生成debug版本,才可以生成调试信息,对程序进行调试,
3 else
4 CC = gcc
5 endif
6 .PHONY: all clean #伪目标,让编译器无条件执行
7 all:test1 test2
8 test1 test2: #会分别执行test1和test2
9 @echo "Just for $@" #$@是目标变量
10 hello:lcd.o player.o
11 $(CC) -o hello lcd.o player.o #生成hello需要lcd.o和player.o
12 playe.o:player.c
13 $(CC) -o player.o -c player.c
14 lcd.o:lcd.c
15 $(CC) -o lcd.o -c lcd.c
16 clean:
17 rm -f lcd.o hello player.o
18
~
执行结果
3.模式匹配 %.o:%.c
1 ifeq ($(DEBUG),"true")
2 CC = gcc -g #生成debug版本,才可以生成调试信息,对程序进行调试,
3 else
4 CC = gcc
5 endif
6 .PHONY: all clean #伪目标,让编译器无条件执行
7 all:hello
8 hello:lcd.o player.o
9 $(CC) -o hello lcd.o player.o #生成hello需要lcd.o和player.o
10 %.o:%.c # %是模式匹配,会自动匹配到所有的满足该格式的文件
11 $(CC) -o $@ -c $^ #$^是代表以来文件
12 clean:
13 rm -f lcd.o hello player.o
14
执行结果
4.隐式规则
1 ifeq ($(DEBUG),"true")
2 CC = gcc -g #生成debug版本,才可以生成调试信息,对程序进行调试,
3 else
4 CC = gcc
5 endif
6 .PHONY: all clean #伪目标,让编译器无条件执行
7 all:hello
8 hello:lcd.o player.o
9 $(CC) -o hello lcd.o player.o #生成hello需要lcd.o和player.o
10 #%.o:%.c # %是模式匹配,会自动匹配到所有的满足该格式的文件
11 # $(CC) -o $@ -c $^ #$^是代表以来文件
12 clean:
13 rm -f lcd.o hello player.o
14
这两句注释掉也是可以的
执行结果
5.生成命令
命令执行:每条命令,make会开一个进程,每条命令都是并发执行的。
用";"将多个命令放在一个进程中执行,也就是顺序执行