代码之家  ›  专栏  ›  技术社区  ›  SFbay007

即使已经存在与目标匹配的另一个规则,模式隐式规则也会执行吗?

  •  1
  • SFbay007  · 技术社区  · 7 年前

    基本上,如果我有一个目标已经有了一个规则,但仍然匹配另一个模式隐式规则。make如何处理这种情况?

    targ.bin :: dep
    
    dep: some-req
       some rules
    
    %.bin : some-reqs
       some rules
    

    在这种情况下,这两条规则是否都适用于targ.bin?也就是说,调用dep时会使用它的prereqs和规则,然后执行%.bin模式隐式的prereqs和规则吗?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Mike Kinghan Luchian Grigore    7 年前

    请参阅GNU Make手册 4.13 Double-Colon Rules ,

    每个双冒号规则应指定一个配方;如果没有,则将使用隐式规则(如果适用)。请参见使用隐式规则。

    targ.bin :: dep
    

    他没有食谱。因此,它只表示依赖关系 targ.bin -&燃气轮机; dep 以及隐含规则:

    %.bin : some-reqs
       some rules
    

    指定 应通过执行以下内容来更新:

    some rules
    

    以及暗示依赖性 塔格宾 -&燃气轮机; some-reqs .

    塔格宾 . 因此,您的Makefile意味着:

    dep: some-req
       some rules
    
    targ.bin : some-reqs dep
       some rules
    

    完整的配方是什么 塔格宾

    生成文件

    targ.bin :: dep
    
    dep: a
        echo '$@ -> $^'
    
    %.bin : b
        echo '$@ -> $^'
    

    其运行方式如下:

    $ touch a b
    $ make
    echo 'dep -> a'
    dep -> a
    echo 'targ.bin -> b dep'
    targ.bin -> b dep
    

    后来

    假设在您提供的示例中,双冒号规则有一个配方,这是否意味着不会应用隐式配方?

    10.1 Using Implicit Rules ,特别是:

    因此,是的,如果双冒号规则有一个配方,那么隐式规则将不会被应用。我把实验留给你做。