也许这是我弄错了。基本上,我的任务是使用make
自动构建,部署,启动和停止不同的服务。
我想要做的一件事是将变量作为目标先决条件,但是必须在另一个目标中更改该变量。
这是我正在尝试做的基本示例:
IMAGE_COUNT=-1
count_images:
$(eval IMAGE_COUNT=5)
_should_build: $(if $(findstring $(IMAGE_COUNT),0), build,)
build:
...some procedure to build...
start: _should_build
...some procedure to start a service...
很显然,$(IMAGE_COUNT)
检查中的_should_build
将保持为-1,但我要使前提条件检查中的$(IMAGE_COUNT)
变为5。需要注意的是,我无法将图像计数放置在count_images
目标之外。
有人知道这是否可能吗?
答案 0 :(得分:3)
也许是我错了。
这种“东西”被称为评估令。
我要做的一件事情是将变量作为目标先决条件,但是该变量必须在另一个目标中进行更改。
不是目标,而是食谱。配方在执行之前经过预处理。前提条件是在第一遍中进行了预处理。实际上,在90%的情况下更改配方中的make变量的值是一个错误。 (还要记住,所有预处理都是在将配方输入外壳之前完成的。)
有人知道这是否完全可能吗?
一切皆有可能,但并非如此。
需要注意的是,我无法将图像计数放置在count_images目标之外。
很有可能。
无论如何,关键是某些shell脚本(配方或配方的一部分)应该返回一个数字。但是,这样的返回值不能存储在make的变量中。重新思考您的设计,并找到目标之间进行交流的另一种方式。