all文件并不存在,make总是会假设它需要被生成,因此会检查它的依靠文件exec1和exec2是否需要更新,当把它的依靠文件更新后,就会执行它的规则里的命令行,但是在规则里没有哪个命令作用于名为all的实际文件,所以该规则并不真正改变all的状态。
注意下面的语句用法,这些语句可以添加到makefile文件后:
myprog.tar : makefile $(SOURCES) $(HEADERS)
tar -cvf $@ S^
clean :
rm *.o
当make命令不带参数执行时,最后两个目标myprog.tar和clean的命令不会执行,因为这些文件没有依赖文件。将这两个目标作为参数传递给make命令,可以调用与目标关联的命令。例如:执行make myprog.tar命令会执行tar -cvf myprog.tar makefile foo.c bar.c foo.h bar.h语句,而执行make clean命令会执行clean *.o语句。
下面给出一个较完整的makefile文件:
---------------------------------------------------------
#Updated makefile that uses some built-in macros and
#@-preceded commands
define CC
gcc
endef
OPTIONS=-03
OBJECTS=main.o input.o compute.o
SOURCES=main.c input.c compute.c
HEADERS=main.h input.h compute.h
complete : power
@echo “Build complete”
power : $(OBJECTS)
$(CC) $(OPTIONS) -o $@ $^ -lm
@echo “The executable is in the ‘power’ file”
main.o : main.h input.h compute.h
compute.o : compute.h
input.o : input.h