我正在尝试抽象一个重复 9 次的 make 前缀:
BUILD_CMD := @make O=$(OUTPUT_DIR)/$* \
BR2_EXTERNAL=$(PROJECT_DIR) \
-C $(PROJECT_DIR)/buildroot
以及示例目标:
%-source: %-config ccache-dir dl-dir
$(BUILD_CMD) source
问题是$*
替换发生得太早(实际上为空),因此make bcm2836-build
调用时输出目录不正确。
我怎样才能延迟替换$*
直到目标被评估?
我试图逃跑\$\*
,但没有成功。
在 Makefile 中推迟变量替换的解决方案是使用以下
define
语句:make
然后当你调用你的目标时$*
替换%
:我不确定这是否是 buildroot 特定的语法,因为我是受到翻阅Buildroot 用户手册第 16.2 节(.mk 文件)的启发。
这是一个顶级 Makefile(不是 .mk),它可以工作,所以希望它对其他人有帮助,因为它是一个非常强大的抽象结构,可以整理 Makefile!