Makefile动态变量作为前提条件

时间:2019-07-17 06:11:10

标签: makefile gnu-make

也许这是我弄错了。基本上,我的任务是使用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目标之外。 有人知道这是否可能吗?

1 个答案:

答案 0 :(得分:3)

  

也许是我错了。

这种“东西”被称为评估令。

  

我要做的一件事情是将变量作为目标先决条件,但是该变量必须在另一个目标中进行更改。

不是目标,而是食谱。配方在执行之前经过预处理。前提条件是在第一遍中进行了预处理。实际上,在90%的情况下更改配方中的make变量的值是一个错误。 (还要记住,所有预处理都是在将配方输入外壳之前完成的。)

  

有人知道这是否完全可能吗?

一切皆有可能,但并非如此。

  

需要注意的是,我无法将图像计数放置在count_images目标之外。

很有可能。

无论如何,关键是某些shell脚本(配方或配方的一部分)应该返回一个数字。但是,这样的返回值不能存储在make的变量中。重新思考您的设计,并找到目标之间进行交流的另一种方式。