【问题标题】:split and cut string in Makefile在 Makefile 中拆分和剪切字符串
【发布时间】:2020-09-07 19:59:09
【问题描述】:

我正在制作一个 Makefile。

version := v39.0.12.8    // format rules: va.b.c.d

我想根据格式获取“version_a”,在本例中为“39”。 这个怎么做?也许通过“sed/cut/awk 但我不熟悉这些 shell 命令。

例如

version         version_a  version_b   version_c  version_d
v39.0.12.8      39         0            12        8
v87.2.9.17      87         2            9         17
v142.98.77.68   142        98           77        68

【问题讨论】:

标签: shell awk sed makefile cut


【解决方案1】:

这可以通过make 功能实现,如下所示:

$ cat Makefile
version := v39.0.12.8

version_tuple := $(subst ., ,$(version:v%=%))

version_a := $(word 1,$(version_tuple))
version_b := $(word 2,$(version_tuple))
version_c := $(word 3,$(version_tuple))
version_d := $(word 4,$(version_tuple))

all:
        echo version_tuple = $(version_tuple)
        echo version_a = $(version_a)
        echo version_b = $(version_b)
        echo version_c = $(version_c)
        echo version_d = $(version_d)

输出:

$ make -s
version_tuple = 39 0 12 8
version_a = 39
version_b = 0
version_c = 12
version_d = 8

【讨论】:

    【解决方案2】:

    使用gmtt,您可以在您的版本号上执行glob match

    include gmtt/gmtt.mk
    
    version := v39.0.12.8
    
    matchresult := $(call glob-match,$(version),v*.*.*.*)
    
    $(info [$(matchresult)])
    
    major := $(word 2,$(matchresult))
    minor := $(word 4,$(matchresult))
    bugfix := $(word 6,$(matchresult))
    buildcnt := $(word 8,$(matchresult))
    
    $(info Major = $(major))
    $(info Minor = $(minor))
    $(info Bugfix = $(bugfix))
    $(info Buildcnt = $(buildcnt))
    
    $(if $(call int-ge,$(major),39),$(info Major is 39 or higher!))
    

    【讨论】:

      猜你喜欢
      • 2018-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-21
      • 1970-01-01
      相关资源
      最近更新 更多