上下文
我有一个 Makefile 来运行 docker
化的服务
RUN = docker-compose run $(ARGS) --rm serivce
.PHONY: shell
shell:
${RUN} /bin/sh
.PHONY: server
server:
$(eval ARGS=--service-ports) ${RUN}
问题
server
任务需要设置额外的参数(--service-ports
)来启动容器。
仅将参数硬编码到 RUN
中是行不通的,因为 shell
也会发布端口并且会失败(让 server
运行)。
问题
根据上下文指定参数 ARGS
的惯用方法是什么?
$(eval ARGS=--service-ports)
有效,但有“正确的方法”吗?
最佳答案
eval
绝对不正确。如果有人运行 make server shell
怎么办?现在,shell
将设置该参数,因为 eval
会全局重置它。
有什么原因你不能只写:
server:
$(RUN) --service-ports
?一般来说,如果您需要根据每个目标自定义变量,您有两个选择:
您可以使用target-specific variables :
server: ARGS = --service-ports
server:
$(RUN)
或者您可以使用recursively-expanded variables :
server_ARGS = --service-ports
RUN = docker-compose run $($@_ARGS) --rm service
server:
$(RUN)
关于docker - 惯用的 Makefile 和命令参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55269713/