具有冲突模式的Makefile目标

时间:2017-03-16 09:51:21

标签: makefile

我有这种奇怪的情况。我会解释我需要做什么

我有一堆.c文件,我需要从中获取.s文件。

我的编译顺序如下

filename.c -> filename.ll -> filename_reg.ll -> filename_reg.s

现在明显的问题是第二和第三阶段都有冲突模式,即filename.ll的模式也匹配filename_reg.ll

所以我做了在%.ll模式之前编写%_reg.ll模式的简单方法。所以它将首先匹配。

但是它找不到在它之后定义的%.ll模式。

为此做任何解决方法?

1 个答案:

答案 0 :(得分:2)

要扩展我的评论 - 您描述的内容应该有效。 Make将始终匹配具有最短词干的规则,因此.ll文件的两个模式规则的顺序无关紧要。如果我有:

%_reg.s: %_reg.ll
    @echo "$^ -> $@" && cp $^ $@

%_reg.ll: %.ll
    @echo "$^ -> $@" && cp $^ $@

%.ll: %.c
    @echo "$^ -> $@" && cp $^ $@

我跑make filename.s,我得到:

~/sandbox/tst6>  make filename_reg.s
filename.c -> filename.ll
filename.ll -> filename_reg.ll
filename_reg.ll -> filename_reg.s
rm filename.ll filename_reg.ll