对 makefile中 order-only 前提条件的理解
“order-only”依赖的使用举例:
LIBS = libtest.a
foo : foo.c | $(LIBS)
$(CC) $(CFLAGS) $< -o $@ $(LIBS)
make在执行这个规则时,如果目标文件“foo”已经存在。当“foo.c”被修改以后,目标“foo”将会被重建,但是当“libtest.a”被修改以后。将不执行规则的命令来重建目标“foo”。
还是自己做一个小例子会比较爽:
LIBS=lib.a foo: foo.c | $(LIBS) touch foo @echo "gao"
在 foo.c 文件 和 lib.a 文件都存在的情况下。
执行 make 的结果是:
显示
touch goo
gao
而 此时修改 lib.a 文件,再执行 make:
foo is up to date