makefile camelcase模式匹配

时间:2009-06-03 18:13:52

标签: makefile

我想在makefile中为camelcase做模式匹配规则:

e.g。明确规则:

MyFileName.java:my_file_name.proto     protoc --java_out =。 $<

我需要上面的模式匹配规则,这样只需要一条规则就可以从相应的proto文件中创建camelcase形式的java目标。

Thnx提前!!

2 个答案:

答案 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))))