我需要指出我对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'。
为什么会有这样的差异?
答案 0 :(得分:0)
与自动变量一样,[target-specific]值仅在其中可用 目标食谱的背景......
因此,在您的第一个示例中,您为VPATH
提供的值不可供Make查找先决条件targ2
。