共享命令但与隐式规则冲突的目标/依赖项的Makefile对

共享命令但与隐式规则冲突的目标/依赖项的Makefile对,makefile,Makefile,我有许多对具有不同扩展名的文件目标/依赖项,我无法执行隐式规则,因为该模式过于通用,并且会与其他隐式规则冲突。。。有没有办法在短时间内共享规则的主体 (例如,目标文件位于一个有序变量中,而DEP位于另一个以相同方式排序的变量中) 例如: foo.a : foo.b cmd1 $< $@ bar.a : bar.b cmd2 $< $@ foo1.a : foo.b cmd2 $< $@ bar1.a : foo.b cmd1 $< $

我有许多对具有不同扩展名的文件目标/依赖项,我无法执行隐式规则,因为该模式过于通用,并且会与其他隐式规则冲突。。。有没有办法在短时间内共享规则的主体

(例如,目标文件位于一个有序变量中,而DEP位于另一个以相同方式排序的变量中)

例如:

foo.a : foo.b
    cmd1 $< $@

bar.a : bar.b
    cmd2 $< $@

foo1.a : foo.b
    cmd2 $< $@

bar1.a : foo.b
    cmd1 $< $@

foo2.a : something.b
    cmd2 $< $@

bar2.a : something2.b
    cmd1 $< $@
foo.a:foo.b
cmd1$<$@
酒吧a:酒吧b
cmd2$<$@
foo1.a:foo.b
cmd2$<$@
酒吧1.a:foo.b
cmd1$<$@
a:什么
cmd2$<$@
a:什么事
cmd1$<$@

名称可以是随机的,实际上你可以把它缩短一点:

foo.a bar1.a foo1.a : foo.b

bar2.a : something2.b

foo.a bar1.a bar2.a :
    cmd1 $< $@

bar.a : bar.b

foo2.a : something.b

bar.a foo1.a foo2.a :
    cmd2 $< $@
foo.a bar1.a foo 1.a:foo.b
a:什么事
这句话的意思是:“foo.a bar1.a bar2.a:
cmd1$<$@
酒吧a:酒吧b
a:什么
酒吧a foo 1.a foo 2.a:
cmd2$<$@

正如您所建议的,您也可以不使用一对变量的命令来构建所有这些规则,但我不建议这样做:结果将是一个难以理解或维护的神秘makefile。

请显示一些相关代码。这太难想象了。你可以对它们进行循环,也可以使用静态模式规则(以防止“与其他隐式规则冲突”)对我来说,没有什么比这更好的了。如果你想让你的makefile变短,你需要让你的依赖关系变得可预测,这样makefile就可以自动处理它。否则,你需要花自己的时间。所以,在你的上一条规则中,$<被花费到上面给出的dep中?@hl037\u:是的,试试看。