2008年6月23日星期一

makefile的一个规则依赖的问题

今天我在尝试调整依赖规则时,发现makefile的一个实现和我想像的不一样,以下是一个缩减过的makefile:

all : liba.a

liba.a : $(OBJS)
ar -q $@ lt;

OBJS = a.o

.c.o :
gcc -o $@ -c lt;


注:其中a.c只是一个最简单的hello world程序。

编译时会直接链接a.o,结果找不到该文件。让人感觉liba.a依赖于$(OBJS)没有检查后面的依赖对象就直接执行命令了。

如果我们将OBJS移动到liba.a依赖规则之前,则没有任何问题。也就是说,虽然make中采用=赋值的变量是无序的(即和定义的顺序无关),但是依赖规则中使用的变量看来是有序的。变量必须先于使用依赖规则的变量定义。

我尚不知这是gmake的特性还是本版本gmake的bug,抑或是make的约定。但是需要确认的一点是,有必要保障变量先于规则定义。

没有评论:

发表评论