makefile - 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
目标之外。有谁知道这是否可能?
解决方案
也许这是我弄错了。
那个“东西”被称为评估订单。
我正在尝试做的一件事是将变量作为目标先决条件,但是必须在另一个目标中更改该变量。
不是目标,而是秘诀。配方在执行前进行预处理。虽然先决条件是在第一次通过时进行预处理的。事实上,在 90% 的情况下更改配方中的 make 变量的值是错误的。(还请记住,所有预处理都是在将配方输入外壳之前完成的)。
有谁知道这是否可能?
当然,一切皆有可能,但并非如此。
需要注意的是,我不能将图像计数放在 count_images 目标之外。
很可能,你可以。
无论如何,关键是某些 shell 脚本(配方或配方的一部分)应该返回一个数字。但是,这样的返回值不能存储在 make 的变量中。重新考虑您的设计并找到另一种在目标之间进行通信的方式。
推荐阅读
- c# - Unity/C# - 仅在 VSCode 中的编译器错误,而不是 Unity 编辑器或 Visual Studio
- java - 二进制搜索功能未实现
- c - 用于验证矩阵在 C 中对称的递归函数
- flutter - 从表格中获取单元格值 - 颤动
- mysql - 在 Google Cloud Build 期间运行数据库迁移失败并出现 ENOTFOUND 错误
- c++ - Android Studio,通过 JNI 将本机 C++ 代码添加到 Android 应用的第二个 Activity
- javascript - Microsoft DeviceCode 身份验证返回“无效请求”错误
- python - Bittrex API v3:错误'invalidRequestParameter':'marketSymbol'
- javascript - 如何将数组合并到 JSON 数组中
- python - 为什么python会这样运行?