我尝试了几种失败的方法。
我有一些目标,这些目标具有相同结构的先决条件。因此,我试图提出一个自定义函数,以简化编写这些先决条件的过程。
先决条件:“ overlay”文件夹下的所有文件+文件:Dockerfile
示例文件夹结构:
a/
+ Dockerfile
+ overlay/
+ file1
+ file2
在Makefile中建议的重用样式:
a_image: $(call GetDockerFiles,$@)
# or whatever else that is recommended
Makefile中生成的目标/先决条件行:
a_image: a/Dockerfile a/overlay a/overlay/file1 a/overlay/file2
如何使用可重用机制来实现这一目标?
答案 0 :(得分:1)
让我们分阶段进行吧。
这是您要为a_image
构造的规则:
a_image: a/Dockerfile a/overlay a/overlay/file1 a/overlay/file2
...
首先,您要动态构建overlay/
的内容列表:
a_image: a/Dockerfile a/overlay $(wildcard a/overlay/*)
...
第二,您希望此方法适用于b_image
,c_image
和其他方法,因此显而易见的方法是模式规则:
%_image: $*/Dockerfile $*/overlay $(wildcard $*/overlay/*)
@echo THIS WILL NOT WORK
这将不起作用,因为先决条件列表中通常不提供诸如$*
之类的自动变量,也不会等待您选择目标,然后再扩展wildcard
调用。不正常。但是,如果您使用Secondary Expansion可以正常工作,则只需小心转义$
符号:
.SECONDEXPANSION:
%_image: $$*/Dockerfile $$*/overlay $$(wildcard $$*/overlay/*)
@echo Prereqs: $^