对 makefile中 orderonly 前提条件的理解

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

 

原文地址:https://www.cnblogs.com/gaojian/p/2690899.html