用作目标特定值时,VPATH无效

时间:2018-03-27 19:53:54

标签: makefile gnu-make

我需要指出我对makefile的遗漏。对于给定的makefile:

VPATH=
targ1: VPATH=src
targ1: targ2

targ2: targ2
    echo $(VPATH)

并清空src direcotry,每次调用" make targ1"我按预期得到了:

echo src
src

因为makefile目录中没有文件targ2,所以在src中需要更新targ2。

但问题是,即使我在src目录中创建targ2文件,每次调用targ2时都会更新targ2' make targ1'。在那种情况下,VPATH没有按预期工作。

  

make变量VPATH的值指定应搜索的目录列表。通常,目录应包含不在当前目录中的必备文件;但是,make使用VPATH作为规则的先决条件和目标的搜索列表。

当我在全局范围内设置VPATH时,怎么没有出现问题:

VPATH=src
targ1: VPATH=src
targ1: targ2

targ2: targ2
    echo $(VPATH)

结果是:make:没有任何事情要做' targ1'。

为什么会有这样的差异?

1 个答案:

答案 0 :(得分:0)

  

与自动变量一样,[target-specific]值仅在其中可用   目标食谱的背景......

因此,在您的第一个示例中,您为VPATH提供的值可供Make查找先决条件targ2