【问题标题】:VPATH is not working when used as target specific values用作目标特定值时,VPATH 不起作用
【发布时间】: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'。

为什么会有这样的区别?

【问题讨论】:

    标签: makefile gnu-make


    【解决方案1】:

    与自动变量一样,[目标特定] 值仅在 目标配方的上下文...

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

    【讨论】:

    • 确实如此,但是否意味着makefile在调用开始时搜索所有文件?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多