GNU make 依赖类型

GNU make的规则中可以使用两种不同类型的依赖:

1、常规依赖

    这些依赖文件的更新需要对应更新目标文件。

2、“order-only”依赖

    是这些依赖的更新不会导致目标被重建。

    在书写规则时,“order-only”依赖使用管道符号“|”开始,作为目标的一个依赖文件。规则的依赖列表中管道符号“|”左边的是常规依赖文件,所有出现在管道符号右边的就是“order-only”依赖。这样的规则书写格式如下:
    TARGETS : NORMAL-PREREQUISITES | ORDER-ONLY-PREREQUISITES
    规则中常规依赖文件可以是空。允许对一个目标声明多行按正确顺序依次追加的依赖。需要注意:规则依赖文件中如果一个文件被同时声明为常规依赖和“order-only”依赖,那么此文件被作为常规依赖处理(因为常规依赖所实现的动作是“order-only”依赖所实现的动作的一个超集)

 

    “order-only”依赖的使用举例:
    LIBS = libtest.a
    foo : foo.c | $(LIBS)
    $(CC) $(CFLAGS) $< -o $@ $(LIBS)
    make在执行这个规则时,如果目标文件“foo”已经存在。当“foo.c”被修改以后,目标“foo”将会被重建,但是当“libtest.a”被修改以后。将不执行规则的命令来重建    目标“foo”。
    就是说,规则中依赖文件$(LIBS)只有在目标文件不存在的情况下,才会参与规则的执行。当目标文件存在时此依赖不会参与规则的执行过程。

 

 

 

posted on 2012-08-20 13:46  RTFSC  阅读(483)  评论(0编辑  收藏  举报

导航