首先要知道,正常的makefile文件,在执行的时候,遇到第一个目标文件,就只生成这一个
exec:exec.c
gcc -o $@ $^
mycmd:mycmd.c
gcc -o $@ $^
.PHONY:clean
clean:
rm -rf exec
上面的makefile只会生成exec,因为第一次遇到的目标文件是exec
如果要同时生成两个目标文件,就需要借助伪目标
伪目标不需要依赖方法,只需要维护依赖关系
.PHONY:all
all: exec mycmd
mycmd:mycmd.c
gcc -o $@ $^
exec:exec.c
gcc -o $@ $^
.PHONY:clean
rm -f exec mycmd
当makefile从上到下被扫描时,要生成的目标文件第一个遇到的就是all,然后他就知道了这个all依赖的是exec和mycmd,然后就分别推导式地执行下面的两个执行生成mycmd和exec。然后all的依赖条件具备了,想执行all的依赖方法,但是由于是伪目标不需要依赖方法,所以makefile至此就结束。
当 make clean
的时候,直接删除那两个可执行即可。
如想生成更多的可执行,同样的方法即可。