首页 文章

GNU根据非模式文件制作模式规则

提问于
浏览
2

在GNU Make中,依赖于非模式文件的模式规则的语义究竟是什么?

我在Makefile中有以下代码段 . 当 foo.a 存在时,当调用 make foo.b 时,GNU Make似乎不会创建 foo.b .

.SUFFIXES:

%.b: move_a_to_b.artifact

move_a_to_b.artifact:
        mv foo.a foo.b
        touch move_a_to_b.artifact

但是,以下工作正常,并将文件从 foo.a 移动到 foo.b .

.SUFFXIES:

%.b: %.a
        mv $< $@

就像这样,使用模式规则取决于模式规则

.SUFFIXES:

%.b: %.intermediate
        mv $< $@

%.intermediate: %.a
        mv $< $@

1 回答

  • 4

    它没有't have anything to do with pattern rules depending on non-patterns. That'很好并且它具有预期的语义:对于任何以 .b 结尾的文件,如果它相对于文件 move_a_to_b.artifact 已经过时,那么将运行配方 .

    您的问题是您're not defining a pattern rule, you'正在删除模式规则 . 模式规则必须始终具有配方 . 没有配方的模式规则会删除模式规则 . 见Canceling Pattern Rules .

    你必须添加一个食谱,然后它会做一些事情:

    %.b : move_a_to_b.artifact
            @echo do something to create $@
    

相关问题