首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >惯用的Makefile和命令参数

惯用的Makefile和命令参数
EN

Stack Overflow用户
提问于 2019-03-21 04:32:58
回答 2查看 137关注 0票数 2

上下文

我有一个Makefile来运行docker-ized服务

代码语言:javascript
复制
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)是有效的,但有没有“正确的方法”?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-03-21 04:50:13

eval绝对不是正确的。如果有人运行make server shell怎么办?现在shell将设置该参数,因为eval会全局重置该参数。

有没有什么原因你不能直接写:

代码语言:javascript
复制
server:
         $(RUN) --service-ports

?通常,如果您需要一个基于每个目标的自定义变量,您有两个选择:

您可以使用target-specific variables

代码语言:javascript
复制
server: ARGS = --service-ports
server:
         $(RUN)

或者,您可以使用recursively-expanded variables

代码语言:javascript
复制
server_ARGS = --service-ports

RUN = docker-compose run $($@_ARGS) --rm service

server:
         $(RUN)
票数 3
EN

Stack Overflow用户

发布于 2019-03-21 04:50:33

我认为你可以简单地将你的变量分成更多的部分:

代码语言:javascript
复制
COMMAND = docker-compose run --rm $(ARGS)
CONTAINER = service

.PHONY: shell
shell:
    ${COMMAND} ${CONTAINER} /bin/sh

.PHONY: server
server:
    ${COMMAND} --service-ports ${CONTAINER}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55269713

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档