因为我正在处理我的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代码不起作用。知道如何解决这个问题吗?
答案 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