rog : $(OBJS) $(CC) $(OBJS) -o myprog
foo.o : foo.c foo.h bar.h $(CC) $(CFLAGS) -c foo.c -o foo.o
bar.o : bar.c bar.h $(CC) $(CFLAGS) -c bar.c -o bar.o
=== makefile 结束 ===
还有一些设定好的内部变量,它们根据每一个规则内容定义。三个
比较有用的变量是 $*,$ ,$@, $< 和 $^ (这些变量不需要括号括住)。 $@ 扩展成当前规则的目的文件名, $< 扩展成依靠列表中的第
一个依靠文件,而 $^ 扩展成整个依靠的列表(除掉了里面所有重 复的文件名)。$ 比目标文件(target)新的dependent file.而$ 的值只有
在使用外显示(explicit)的规则时才会被设定.$*是内存dependent file的文件名,不含扩展名. 利用这些变量,我们可以把上面的
makefile 写成:
=== makefile 开始 === OBJS = foo.o bar.o
CC = gcc CFLAGS = -Wall -O -g
myprog : $(OBJS)
$(CC) $^ -o $@
foo.o : foo.c foo.h bar.h
$(CC) $(CFLAGS) -c $< -o $@
bar.o : bar.c bar.h
$(CC) $(CFLAGS) -c $< -o $@ === makefile 结束 ===
你可以用变量做许多其它的事情,特别是当你把它们 |