在GNU Make中从YAML导入变量

时间:2016-02-10 21:40:25

标签: makefile yaml

如何从嵌套的YAML导入变量以在Makefile中使用。 YAML的子集可以正常,但嵌套很重要。

我知道我可以使用python或ruby或x脚本,但到目前为止,我不必使用任何一种,并且如果可能的话,我们希望避免并保持通用。

感谢。

2 个答案:

答案 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>