makefile 驼峰式模式匹配

发布于 2024-07-22 20:54:05 字数 213 浏览 5 评论 0原文

我想在我的 makefile 中为驼峰命名法执行模式匹配规则:

例如显式规则:

MyFileName.java:my_file_name.proto 协议 --java_out=. $<

我需要上述的模式匹配规则,这样只需一个规则即可完成从相应的 proto 文件创建驼峰形式的 java 目标的工作。

提前谢谢!

I want to do pattern matching rule for camelcase in my makefile:

e.g. Explicit rule:

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

I need Pattern matching rule for the above so that just one rule does the job of creating java target of camelcase form from corresponding proto file.

Thnx in advance !!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

星星的轨迹 2024-07-29 20:54:05

注意:我假设您使用的是 Gnu make。

您不能直接在 Make 中执行此操作。 解决方案是使用脚本(例如使用 sed 或 awk)生成包含规则的文件。 然后将该文件包含在您的 Makefile 中。 您可以定义依赖项,以便 make 在包含文件之前重新生成包含文件(如果该文件已过期)。 制造商信息页面有更多详细信息。

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

Note: I'm assuming you're using Gnu make.

You can't do that directly in Make. The solution is to generate a file containing the rules with a script (using sed or awk, for example). Then include the file in your Makefile. You can define your dependencies so that make regenerates the include file before including it if it is out of date. The Make info pages have more details.

Not all versions of Make have this feature.

一花一树开 2024-07-29 20:54: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))))

Never say never !

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))))
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文