【问题标题】:defining makefile variables multiple times多次定义makefile变量
【发布时间】:2018-01-30 18:36:46
【问题描述】:

我阅读了 GNU make 文档的 Using Variables 部分,但无法理解 make 变量在多次定义时如何在 make 规则中展开。

例如,请参阅以下简短的 makefile:

.PHONY: run
run: a b

TARGET := a

$(TARGET):
    echo $(TARGET)
    touch $@

TARGET := b

$(TARGET):
    echo $(TARGET)
    touch $@

在运行make 时会产生以下输出:

echo b
b
touch a
echo b
b
touch b

看来a有目标,自动变量$@确实是a。但是回显TARGET 变量,这也是目标名称,打印b...这是怎么回事? 我会很感激任何帮助,最好是链接到文档,以澄清这种行为。

其他可能相关的问题:

  1. 在调用make 时,makefile 是否只读取一次?
  2. 目标names 是否在读取makefile 时或之后扩展?
  3. 目标 rules 是否在读取 makefile 时或之后扩展?

注意:使用递归扩展变量(即将:= 更改为=)不会更改上例中的输出。

【问题讨论】:

  • 我没有文档参考来支持这一点,但我认为 1) 是的,2) 名称在 Make 读取文件时扩展,因此第一条规则的名称是 @987654333 @ 并且第二个的名称是b,3) 配方(规则中的命令)仅在执行规则时才会扩展,此时TARGETb
  • @Beta 完全正确,我想您应该将其作为答案。

标签: linux unix makefile gnu-make


【解决方案1】:

您要查找的信息可在 GNU make 手册部分 How make Reads a Makefile 中找到。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-07
    • 1970-01-01
    • 1970-01-01
    • 2013-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多