【发布时间】:2018-09-06 08:43:56
【问题描述】:
我需要指出我对 makefile 的遗漏。对于给定的makefile:
VPATH=
targ1: VPATH=src
targ1: targ2
targ2: targ2
echo $(VPATH)
和空的 src 目录,每次调用“make targ1”我都会得到预期的结果:
echo src
src
由于makefile目录中没有文件targ2,src目录中targ2需要更新。
但问题是,即使我在 src 目录中创建 targ2 文件,每次调用“make targ1”时都会更新 targ2。在这种情况下,VPATH 无法按预期工作。
make 变量 VPATH 的值指定了 make 应该搜索的目录列表。大多数情况下,这些目录应该包含不在当前目录中的必备文件;但是,make 使用 VPATH 作为规则的先决条件和目标的搜索列表。
在全局范围内设置 VPATH 时不会出现问题:
VPATH=src
targ1: VPATH=src
targ1: targ2
targ2: targ2
echo $(VPATH)
结果是:make:Nothing to be done for 'targ1'。
为什么会有这样的区别?
【问题讨论】: