我想在makefile中为camelcase做模式匹配规则:
e.g。明确规则:
MyFileName.java:my_file_name.proto protoc --java_out =。 $<
我需要上面的模式匹配规则,这样只需要一条规则就可以从相应的proto文件中创建camelcase形式的java目标。
Thnx提前!!
答案 0 :(得分:2)
注意:我假设你正在使用Gnu make。
你不能直接在Make中这样做。解决方案是使用脚本生成包含规则的文件(例如,使用sed或awk)。然后在Makefile中包含该文件。您可以定义依赖项,以便在包含文件过期之前重新生成包含文件。 “制作信息”页面包含更多详细信息。
并非所有版本的Make都具有此功能。
答案 1 :(得分:0)
永远不要说永远!
FILES:=foof_goog.proto zozo_bobo.proto
define makeCamel
$(strip \
$(subst .proto,.java, \
$(patsubst a%,A%, \
$(patsubst b%,B%, \
$(patsubst c%,C%, \
$(patsubst d%,D%, \
$(patsubst e%,E%, \
$(patsubst f%,F%, \
$(patsubst g%,G%, \
$(patsubst h%,H%, \
$(patsubst i%,I%, \
$(patsubst j%,J%, \
$(patsubst k%,K%, \
$(patsubst l%,L%, \
$(patsubst m%,M%, \
$(patsubst n%,N%, \
$(patsubst o%,O%, \
$(patsubst p%,P%, \
$(patsubst q%,Q%, \
$(patsubst r%,R%, \
$(patsubst s%,S%, \
$(patsubst t%,T%, \
$(patsubst u%,U%, \
$(patsubst v%,V%, \
$(patsubst w%,W%, \
$(patsubst x%,X%, \
$(patsubst y%,Y%, \
$(patsubst z%,Z%, \
$(subst _a,A, \
$(subst _b,B, \
$(subst _c,C, \
$(subst _d,D, \
$(subst _e,E, \
$(subst _f,F, \
$(subst _g,G, \
$(subst _h,H, \
$(subst _i,I, \
$(subst _j,J, \
$(subst _k,K, \
$(subst _l,L, \
$(subst _m,M, \
$(subst _n,N, \
$(subst _o,O, \
$(subst _p,P, \
$(subst _q,Q, \
$(subst _r,R, \
$(subst _s,S, \
$(subst _t,T, \
$(subst _u,U, \
$(subst _v,V, \
$(subst _w,W, \
$(subst _x,X, \
$(subst _y,Y, \
$(subst _z,Z,$(1)))))))))))))))))))))))))))))))))))))))))))))))))))))))
endef
all: $(call makeCamel,$(FILES))
define makeTarget
$(2):: $(1)
protoc --java_out=$(2) $(1)
endef
$(foreach x,$(FILES),$(eval $(call makeTarget,$x,$(call makeCamel,$x))))