如何将 yaml 文件中的值赋给 makefile 中的变量

问题描述 投票:0回答:0

我有一个名为

conf.yaml

的配置文件
run:
  mode: test
  model_version: v1.0.0

在 Makefile 中我使用 yq 来解析 conf 文件并赋值

这里是makefile

define extract_from_yaml
    $(shell docker run -v ${PWD}:/workdir --rm -it mikefarah/yq ."${1}" conf.yaml)
endef

define extract_from_yaml2
    $(strip $(shell docker run -v ${PWD}:/workdir --rm -it mikefarah/yq ."${1}" conf.yaml))
endef

MODEL_VERSION := $(call extract_from_yaml,run.model_version)
MODEL_PATH := src/sad/models/${MODEL_VERSION}/dir

MODEL_VERSION2 := $(strip $(call extract_from_yaml,run.model_version))
MODEL_PATH2 := src/sad/models/${MODEL_VERSION2}/dir


MODEL_VERSION3 := $(call extract_from_yaml,run.model_version)
MODEL_PATH3 := src/sad/models/${MODEL_VERSION3}/dir

mytest:
    ${MODEL_VERSION}

mytest2:
    ${MODEL_PATH}

mytest3:
    ${MODEL_PATH2}

mytest4:
    ${MODEL_PATH3}

如果我这样做

make mytest
输出是预期的并且将是
v1.0.0
但是如果我这样做
make mytest2
输出是
"src/sad/models/    v1.0.0/dir"
我不明白那些空白是从哪里来的。所以 mytest3 似乎是我使用
$(strip)
.

删除空白的解决方案

令人难以置信的是,如果我在函数内部移动

$(strip)
,那些空格仍然存在。你可以通过运行
make mytest4

看到

所以我想知道这样做的漂亮方法是什么。

bash makefile yq
© www.soinside.com 2019 - 2024. All rights reserved.