首页 > 解决方案 > Makefile 动态变量作为先决条件

问题描述

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

标签: makefilegnu-make

解决方案


也许这是我弄错了。

那个“东西”被称为评估订单。

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

不是目标,而是秘诀。配方在执行前进行预处理。虽然先决条件是在第一次通过时进行预处理的。事实上,在 90% 的情况下更改配方中的 make 变量的值是错误的。(还请记住,所有预处理都是在将配方输入外壳之前完成的)。

有谁知道这是否可能?

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

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

很可能,你可以。

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


推荐阅读