我想在makefile中为camelcase执行模式匹配规则:
例如,显式规则:
MyFileName.java: java协议-- my_file_name.proto _out=。$<
我需要上面的模式匹配规则,这样只有一个规则可以从相应的proto文件创建camelcase表单的java目标。
太好了!
发布于 2009-06-03 18:20:01
注意:我假设你使用的是Gnu make。
你不能直接在Make中做这件事。解决方案是使用脚本(例如,使用sed或awk )生成一个包含规则的文件。然后将该文件包含在Makefile中。您可以定义依赖项,以便make在包含过期的包含文件之前重新生成包含文件。Make info页面有更多详细信息。
并非所有版本的Make都具有此功能。
发布于 2009-06-03 19:20:05
永不言败!
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))))https://stackoverflow.com/questions/946307
复制相似问题