【发布时间】:2015-02-20 15:11:27
【问题描述】:
我不完全了解如何使用特定于目标的变量来充当目标本身,拥有自己的依赖项和配方。
有效但不使用目标特定变量的示例 Makefile:
VAR=progName
ATARGET: $(VAR)
@echo Do actions for $@ based on the completed target $(VAR)
$(VAR):
@echo Do actions on $@
制作目标
对 progName 执行操作
根据完成的目标 progName 对 ATARGET 执行操作
在尝试使用特定于目标的变量时不起作用的 Makefile(请注意在执行 make 时缺少“对 progName 执行操作”):
ATARGET:VAR=progName
ATARGET: $(VAR)
@echo Do actions for $@ based on the completed target $(VAR)
$(VAR):
@echo Do actions on $@
制作目标
根据完成的目标 progName 对 ATARGET 执行操作
所需的 Makefile 行为:
ATARGET:VAR=progName
ATARGET: $(VAR)
@echo Do actions for $@ based on the completed target $(VAR)
BTARGET:VAR=otherProgName
BTARGET: $(VAR)
@echo Do actions for $@ based on the completed target $(VAR)
$(VAR):
@echo Do actions on $@
制作目标
对 progName 执行操作
根据完成的目标 progName 对 ATARGET 执行操作
制作BTARGET
对 otherProgName 执行操作
根据完成的目标 otherProgName 对 BTARGET 执行操作
这些是用于说明问题的简单 Makefile - 实际的 makefile 有几个目标,具体取决于 VAR 的值。
PGM = $(VAR)_test.exe;
LIB = lib$(VAR).a;
LIBLINKNAME = $(VAR);
【问题讨论】:
-
您不完全理解它的原因是您尝试做的事情是不可能的。请参阅目标特定变量的手册,其中明确指出 与自动变量一样,这些值仅在目标配方的上下文中可用。另一个规则定义不是“在目标配方的上下文中”。但是,根据您的其他示例,您无论如何都不需要这样做,正如 Wintermute 所示。
标签: makefile