上下文
我有一个Makefile来运行docker-ized服务
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)是有效的,但有没有“正确的方法”?
发布于 2019-03-21 04:50:13
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)发布于 2019-03-21 04:50:33
我认为你可以简单地将你的变量分成更多的部分:
COMMAND = docker-compose run --rm $(ARGS)
CONTAINER = service
.PHONY: shell
shell:
${COMMAND} ${CONTAINER} /bin/sh
.PHONY: server
server:
${COMMAND} --service-ports ${CONTAINER}https://stackoverflow.com/questions/55269713
复制相似问题