如何以与make和dmake兼容的方式替换makefile中的文本?

如何以与make和dmake兼容的方式替换makefile中的文本?,makefile,Makefile,我有一个生成文件: ALL = ../lib/Mo.pm \ ../lib/Mo/builder.pm \ ../lib/Mo/default.pm \ ../lib/Mo/has.pm \ all: $(ALL) $(ALL): Mo.pm compress.pl Makefile perl compress.pl $(@:../lib/%=%) > $@ 它的作用是这样的: $ make -n perl compress.pl Mo.p

我有一个生成文件:

ALL = ../lib/Mo.pm \
      ../lib/Mo/builder.pm \
      ../lib/Mo/default.pm \
      ../lib/Mo/has.pm \

all: $(ALL)

$(ALL): Mo.pm compress.pl Makefile
    perl compress.pl $(@:../lib/%=%) > $@
它的作用是这样的:

$ make -n
perl compress.pl Mo.pm > ../lib/Mo.pm
perl compress.pl Mo/builder.pm > ../lib/Mo/builder.pm
perl compress.pl Mo/default.pm > ../lib/Mo/default.pm
perl compress.pl Mo/has.pm > ../lib/Mo/has.pm
但是,在Windows上使用dmake时,会发生以下情况:

d:\mo-pm\src>dmake -n
perl compress.pl ..\lib\Mo.pm > ..\lib\Mo.pm
perl compress.pl ..\lib\Mo\builder.pm > ..\lib\Mo\builder.pm
perl compress.pl ..\lib\Mo\default.pm > ..\lib\Mo\default.pm
perl compress.pl ..\lib\Mo\has.pm > ..\lib\Mo\has.pm
我一直在尝试s///和subst的各种组合,以使其在dmake中工作,并发现它希望路径具有\s,这意味着对路径的两个变体(../lib/和..\lib)进行双重替换可以工作,但我不知道如何使其在两个make变体中工作


有什么想法或其他方法可以做到这一点吗?

这不仅是因为两个版本的dir分隔符不同,而且dmake语法似乎是故意设计成与GNU make不兼容。语法中唯一真正兼容的部分是模式替换,因此这是一种方法:

 all: $(ALL)

 $(ALL) : Makefile compress.pl
 ../lib/%.pm : %.pm 
         perl compress.pl $< > $@

这个很好用,谢谢!我唯一需要注意的是压缩行前面的indendation需要是一个实际的选项卡。你介意详细解释一下这里发生了什么吗?我真的不明白那里发生了什么。(虽然我能猜到。)(赏金在三小时内就到了。)非常有用的解释,谢谢!:D第一次尝试使用模式规则,但失败了,您解释了失败的原因。:) make -rdn