如何从嵌套的YAML导入变量以在Makefile中使用。 YAML的子集可以正常,但嵌套很重要。
我知道我可以使用python或ruby或x脚本,但到目前为止,我不必使用任何一种,并且如果可能的话,我们希望避免并保持通用。
感谢。
答案 0 :(得分:0)
我认为没有任何好方法可以做到这一点。如果你愿意,你可以在C中编写一个Make插件来调用YAML解析器并为数据提供一个接口,但除非有人已经写过,否则它可能不值得花时间。
答案 1 :(得分:0)
有一种方法可以借助yq命令行YAML处理器来完成。它可以在YAML文件中打印具有值的全部或部分路径:
yq r file.yaml -p pv "**"
我们可以在make中使用foreach函数来为每个路径定义变量:
yaml_file = file.yaml
yaml := $(shell yq r $(yaml_file) -p pv "**" | sed 's/ /|/g' | sed 's/:|/:/g')
yaml_path_value = $(subst :, ,$(yaml_element))
yaml_path = $(word 1,$(yaml_path_value))
yaml_value = $(subst |, ,$(word 2,$(yaml_path_value)))
yaml_variable = $(eval $(yaml_path) := $(yaml_value))
$(foreach yaml_element,$(yaml),$(yaml_variable))
Make在列表中使用空格作为分隔符,因此在使用|
之前,必须将YAML值中的空格替换为另一个字符(在本示例中为foreach
),然后在定义变量之前将其放回去。 / p>