将文档发送到manage Target-specific Variable Values
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"
我有什么方法可以用简单的方法设置本地环境(特定于目标的变量)吗?
答案 0 :(得分:2)
您对第一个问题的直接回答是肯定的,您必须为每个特定于目标的变量使用单独的目标行并逐个设置它们。
你的第二个问题的答案是肯定的:一个是由uzsolt描述的。这也是我推荐的方法。 uzsolt解决方案与特定于目标的变量解决方案之间的一个区别是,特定于目标的变量为inherited by prerequisites。你似乎不需要这种行为,但如果你这样做,那么这个解决方案对你不起作用。
如果您需要特定于目标的变量,或者每个变量赋值的一行仍然太痛苦(例如,您拥有非常多的这些并且您确实希望每个组有一行),那么可能有更多选项理解起来很复杂,但以后更容易使用。
例如,如果您知道没有任何变量值包含空格,那么您可以创建一个用户定义的宏,该宏使用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)
注意:第一个参数是目标,每个赋值必须是单个“单词”(没有嵌入空格),并且赋值之间没有逗号。
答案 1 :(得分:1)
我会这样做:
CPU | cache | lookup (µs) | array (µs) | speedup (x)
Xeon E5-1650 v3 @ 3.50GHz | 15360 KB | 60011 ± 3667 | 29313 ± 2137 | 0.49
Xeon E5-2697 v3 @ 2.60GHz | 35840 KB | 66571 ± 7477 | 33197 ± 3619 | 0.50
Celeron G1610T @ 2.30GHz | 2048 KB | 172090 ± 629 | 162328 ± 326 | 0.94
Core i3-3220T @ 2.80GHz | 3072 KB | 111025 ± 5507 | 114415 ± 2528 | 1.03
Core i5-7200U @ 2.50GHz | 3072 KB | 92447 ± 1494 | 95249 ± 1134 | 1.03
Xeon X3430 @ 2.40GHz | 8192 KB | 111303 ± 936 | 127647 ± 1503 | 1.15
Core i7 920 @ 2.67GHz | 8192 KB | 123161 ± 35113 | 156068 ± 45355 | 1.27
Xeon X5650 @ 2.67GHz | 12288 KB | 106015 ± 5364 | 140335 ± 6739 | 1.32
Core i7 870 @ 2.93GHz | 8192 KB | 77986 ± 429 | 106040 ± 1043 | 1.36
Core i7-6700 @ 3.40GHz | 8192 KB | 47854 ± 573 | 66893 ± 1367 | 1.40
Core i3-4150 @ 3.50GHz | 3072 KB | 76162 ± 983 | 113265 ± 239 | 1.49
Xeon X5650 @ 2.67GHz | 12288 KB | 101384 ± 796 | 152720 ± 2440 | 1.51
Core i7-3770T @ 2.50GHz | 8192 KB | 69551 ± 1961 | 128929 ± 2631 | 1.85
查看命令(我使用的是FreeBSD,GNU make命令是dev_deploy_env= devenv
dev_deploy_image= abc
dev_deploy_tag= 1.0.4-dev
prod_deploy_env= prod
prod_deploy_image= abc
prod_deploy_tag= 1.0.3-prod
dev_deploy prod_deploy:
@echo docker run -t --rm -e env=${${@}_env} \
${${@}_image}:${${@}_tag} \
sh -c "test.sh"
.PHONY: dev_deploy prod_deploy
):
gmake
当然你应该删除$ gmake prod_deploy
docker run -t --rm -e env=prod abc:1.0.3-prod sh -c test.sh
$ gmake dev_deploy
docker run -t --rm -e env=devenv abc:1.0.4-dev sh -c test.sh
来运行命令。