在Makefile中对同一个目标进行多次定义
每个依赖都会被检查执行
最后的recipe会覆盖前面的recipe
即只有最后一个目标的recipe被执行
#
#
all: $(warning 1 prerequisite)p1
$(warning 1 recipe)
all: $(warning 2 prerequisite)p2
$(warning 2 recipe)
all:
echo excute recipe
p1:
echo p1 recipe
p2:
echo p2 recipe
# Cancel implicit rules on Makefile
Makefile: ;
.PHONY: all p1 p2
$ make --debug=all
GNU Make 3.82
Built for x86_64-redhat-linux-gnu
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Reading makefiles...
Reading makefile `Makefile'...
Makefile:4: 1 prerequisite
Makefile:7: 2 prerequisite
Makefile:8: warning: overriding recipe for target `all'
Makefile:5: warning: ignoring old recipe for target `all'
Makefile:11: warning: overriding recipe for target `all'
Makefile:8: warning: ignoring old recipe for target `all'
Updating makefiles....
Considering target file `Makefile'.
Finished prerequisites of target file `Makefile'.
No need to remake target `Makefile'.
Updating goal targets....
Considering target file `all'.
File `all' does not exist.
Considering target file `p2'.
File `p2' does not exist.
Finished prerequisites of target file `p2'.
Must remake target `p2'.
Invoking recipe from Makefile:17 to update target `p2'.
echo p2 recipe
Putting child 0x220fa60 (p2) PID 32343 on the chain.
Live child 0x220fa60 (p2) PID 32343
p2 recipe
Reaping winning child 0x220fa60 PID 32343
Removing child 0x220fa60 PID 32343 from chain.
Successfully remade target file `p2'.
Considering target file `p1'.
File `p1' does not exist.
Finished prerequisites of target file `p1'.
Must remake target `p1'.
Invoking recipe from Makefile:14 to update target `p1'.
echo p1 recipe
Putting child 0x220fc40 (p1) PID 32344 on the chain.
Live child 0x220fc40 (p1) PID 32344
p1 recipe
Reaping winning child 0x220fc40 PID 32344
Removing child 0x220fc40 PID 32344 from chain.
Successfully remade target file `p1'.
Finished prerequisites of target file `all'.
Must remake target `all'.
Invoking recipe from Makefile:11 to update target `all'.
echo excute recipe
Putting child 0x220fda0 (all) PID 32345 on the chain.
Live child 0x220fda0 (all) PID 32345
excute recipe
Reaping winning child 0x220fda0 PID 32345
Removing child 0x220fda0 PID 32345 from chain.
Successfully remade target file `all'.