Makefile 如何为同一目标文件的不同依赖项集运行不同的配方

Makefile 如何为同一目标文件的不同依赖项集运行不同的配方,makefile,gnu-make,Makefile,Gnu Make,制作手册上说每个目标只能有一个配方。但我需要运行不同的构建工具,这取决于哪些依赖项发生了变化 大概是这样的: target.txt: subtarget.txt cat $? >> $@ target.txt: header.txt date >>$@ 有什么窍门可以存档吗?我不太确定你想做什么,但也许能帮到你 target.txt:: subtarget.txt cat $? >> $@ target.txt:: hea

制作手册上说每个目标只能有一个配方。但我需要运行不同的构建工具,这取决于哪些依赖项发生了变化

大概是这样的:

target.txt: subtarget.txt
    cat $? >> $@

target.txt: header.txt
    date >>$@

有什么窍门可以存档吗?

我不太确定你想做什么,但也许能帮到你

target.txt:: subtarget.txt
        cat $? >> $@

target.txt:: header.txt
         date >>$@

这听起来像是OP的要求。当然,它是POSIX
make
的一个扩展,但它似乎得到了相当广泛的支持。@JohnBollinger这个问题被标记为
gnu make
,所以我只是假设:)这是一个合理的假设,可以肯定,但我认为,当人们使用扩展时,让他们在知情和有意的情况下这样做是很重要的。GNU
make
还没有统治世界,当你因为不小心的兼容性问题而在使用这个酷的、闪亮的新玩具时,它真的很糟糕。总的来说,更好的方法是在每个需要的目标过时时,从零开始(重新)适当地构建它的所有先决条件。如果你这样做,那么你不需要多个食谱。如果您不能以这种方式构建它,那么POSIX
make
就没有解决方案,尽管您可能可以通过使用各种特定的
make
实现提供的扩展来实现它。很好的一点是,从头开始重建将是非常优雅的。不幸的是,在我的情况下,这将是非常无效的。我有一个解决方案,在
makefile
中使用循环,在shell脚本中使用逻辑检测依赖类型并运行适当的更新。