makefile camelcase模式匹配

makefile camelcase模式匹配,makefile,Makefile,我想在我的makefile中为camelcase执行模式匹配规则: e、 g.明确规则: MyFileName.java:my_file_name.proto protoc——java_out=$ 注意:我假设您正在使用Gnu make 你不能直接用手工做那件事。解决方案是使用脚本(例如使用sed或awk)生成包含规则的文件。然后在Makefile中包含该文件。您可以定义依赖项,以便make在包含过期的包含文件之前重新生成该文件。“制作信息”页面包含更多详细信息 并非所有版本的Make都具有此功

我想在我的makefile中为camelcase执行模式匹配规则:

e、 g.明确规则:

MyFileName.java:my_file_name.proto
protoc——java_out=$ 注意:我假设您正在使用Gnu make

你不能直接用手工做那件事。解决方案是使用脚本(例如使用sed或awk)生成包含规则的文件。然后在Makefile中包含该文件。您可以定义依赖项,以便make在包含过期的包含文件之前重新生成该文件。“制作信息”页面包含更多详细信息


并非所有版本的Make都具有此功能

永远不要说永远

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

这对我不起作用。我所得到的只是以下内容:make:对“All”没有什么可做的。makefile只是一个示例。您需要用.proto文件列表替换第一行文件:=xxxx。如果-FILES为空,或者-相应的.java文件已经存在,那么您将得到消息Nothing to do do note does not do not do not do not do not do not do not do not do not do not do not do not do not do not do not do not do not do not do not