变量在makefile中定义,但Make忽略它。为什么?

时间:2015-08-18 04:37:51

标签: makefile

来自docs

  

目标特定变量还有一个特殊功能:当您定义特定于目标的变量时,变量值对此目标的所有先决条件及其所有先决条件等都有效(除非这些先决条件覆盖了该变量)变量具有自己的特定于目标的变量值。)

所以,给定一个makefile:

$(shell rm -rf x D)
$(shell mkdir D)
$(shell touch D/x)

VPATH = D

all: x ;

x ::
    @echo 'foo is: $(foo)'

.SILENT : D/x

all : foo = bar

跑步,我明白了:

foo is:

我想,我在上面定义了:foo = bar

或者,是吗?

1 个答案:

答案 0 :(得分:1)

事实上,您与VPATHDouble-Colon RulesTarget-specific Variable ValuesSpecial Built-in Target Names混合使用。

您的Makefile可以解释为:

  • all是第一个目标
  • all有一个先决条件:x
  • 由于VPATHDall还有间接先决条件:D/x
  • D/x目标是无声的
  • all所有这些先决条件都有一个目标特定变量foo等于bar

对于特定目标用户,似乎没有考虑间接先决条件D/x

有趣的测试: x : foo = bar的末尾添加Makefilemake进程将被卡住......

<强>变通方法

  1. 删除.SILENT行(我在经过一些测试后发现了这一点,它也解决了上述问题......)
  2. D/x : foo = bar的末尾添加Makefile,以明确添加foo目标的D/x变量