Makefile将filepath的一部分提取为编译器标志

时间:2016-05-28 08:52:10

标签: makefile

因为我正在处理我的makefile,我遇到了另一个问题。我正在使用此规则作为构建过程的一部分,将.mid文件转换为.s文件。

$(MIDAS): $(BLDPATH)/%.s: %.mid
$(shell mkdir -p $(dir $@))
#test $($< | sed "*")
$(MID2AGB) $(MIDFLAGS) -G$($< | sed ".*mus/vcg([0-9]{3})/.*\.mid") $< $@

所有.mid输入文件都采用相同的格式:。 mus / vcg [0-9] {3} /。 .mid,这意味着它们按照命名约定vcgXXX存储在不同的目录中X可以是0-9之间的任何数字。 (也许我的正则表达式甚至是错误的)。 当我调用$(MID2AGB)时,我想使用编译器标志-GXXX。但是,此标志的XXX必须与输入文件路径中的XXX匹配。

我的makefile代码不起作用。知道如何解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

使用Make的字符串操作工具有一种粗略但有效的方法:

# suppose the source is .mus/vcg456/Z.mid

$(MIDAS): $(BLDPATH)/%.s: %.mid
    @echo $*                                     # this gives .mus/vcg456/Z
    @echo $(subst /, ,$*)                        # this gives .mus vcg456 Z
    @echo $(word 2,$(subst /, ,$*)               # this gives vcg456
    @echo $(subst vcg,,$(word 2,$(subst /, ,$*)) # this gives 456
相关问题