首页 > 解决方案 > 如何从 Makefile 中的文本文件中提取值?

问题描述

这是我的 Makefile 中的代码片段:

%/foo: %/bar.yaml
    $(BINARY) generate -g go \
        --package-name {COOL_VALUE}
# COOL_VALUE should be the value for a unique `x-cool-value` key from `bar.yaml`.

例如,这里是bar.yaml

abc:
  xyz: Hi StackOverflow!
  x-cool-value: v1

我想提取v1价值。

例如,

make foo1/foo2/foo
> ./binary generate -g go \
   --package-name v1
# since foo1/foo2/foo/bar.yaml had a `v1` value for `abc.x-cool-value` key.

标签: makefile

解决方案


你不能使用 makefile 语法做这样的事情(至少它不值得)。弄清楚如何使用 shell 命令执行此操作,然后将该 shell 命令放入您的 makefile 配方中。

例如:

$ sed -n 's/^ *x-cool-value: *//p' foo1/foo2/foo/bar.yaml
v1

所以,在你的makefile中:

%/foo: %/bar.yaml
        $(BINARY) generate -g go \
            --package-name $$(sed -n 's/^ *x-cool-value: *//p' $<)

或者你可以尝试找一些命令行工具来解析 YAML 并让你查询;可能有一个。


推荐阅读