我有一个名为
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
看到
所以我想知道这样做的漂亮方法是什么。