【问题标题】:Makefile dynamic variables as prerequisitesMakefile 动态变量作为先决条件
【发布时间】:2019-07-17 06:11:10
【问题描述】:

也许这是我弄错了。基本上我的任务是使用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... 

显然_should_build 检查中的$(IMAGE_COUNT) 将保持为-1,但我希望在先决条件检查期间让$(IMAGE_COUNT) 变为5。需要注意的是,我不能将图像计数放在count_images 目标之外。 有谁知道这是否可能?

【问题讨论】:

  • 可以使用文件吗?因为我认为单个变量不可能,请参阅here

标签: makefile gnu-make


【解决方案1】:

也许是我弄错了。

那个“东西”被称为评估顺序。

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

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

有人知道这是否可能吗?

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

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

很可能,你可以。

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

【讨论】:

    猜你喜欢
    • 2012-06-05
    • 2013-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-23
    • 2011-06-11
    相关资源
    最近更新 更多