按照文档管理特定于目标的变量值 https://www.gnu.org/software/make/manual/html_node/Target_002dspecific.html
prog : CFLAGS = -g
prog : prog.o foo.o bar.o
我可以设置一个特定于目标的变量。
现在我的问题是,如何设置多个特定于目标的变量。我必须一一设置吗?
dev_deploy: env = dev
dev_deploy: image = abc
dev_deploy: tag = 1.0.4-dev
dev_deploy:
docker run -t --rm -e env=$(env) \
$(image):$(tag) \
sh -c "test.sh"
prod_deploy: env = prod
prod_deploy: image = abc
prod_deploy: tag = 1.0.3-prod
prod_deploy:
docker run -t --rm -e env=$(env) \
$(image):$(tag) \
sh -c "test.sh"
有什么方法可以用简单的方式设置本地环境(特定于目标的变量)?
第一个问题的直接答案是肯定的,您必须为每个特定于目标的变量使用单独的目标行并逐一设置它们。
你的第二个问题的答案是肯定的:乌兹索尔特描述了一个。这也是我推荐的方法。 uzsolt 的解决方案与特定于目标的变量解决方案之间的一个区别是,特定于目标的变量是遗传按先决条件 https://www.gnu.org/software/make/manual/html_node/Target_002dspecific.html。您似乎不需要这里的行为,但如果您这样做,那么这个解决方案将不适合您。
如果您需要特定于目标的变量,或者每个变量分配一行仍然太痛苦(例如,您有大量这些变量,并且您确实希望每组一行),则可能有一些选项更难以理解但以后使用起来更简单。
例如,如果您知道所有变量值都不包含空格,那么您可以创建一个用户定义的宏,使用 eval 设置特定于目标的变量,如下所示:
assign-vars = $(foreach A,$2,$(eval $1: $A))
$(call assign-vars, dev_deploy, env=devenv image=abc tag=1.0.4-dev)
$(call assign-vars, prod_deploy, env=prod image=abc tag=1.0.3-prod)
注意:第一个参数是目标,每个赋值必须是单个“单词”(无嵌入空格),并且赋值之间没有逗号。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)