0

我正在尝试在我的 Makefile 中执行此操作:

VAL=

TARGET1:
    VAL= ... #compute value of VAL
    #run some command that uses the value of VAL
TARGET2:
    $(MAKE) TARGET1
    #run other command that uses the value of VAL

但事实证明 VAL 的值在 TARGET 时被重置!在 TARGET2 中完成。因此,当我尝试在 TARGET2 中运行其他命令时,VAL 的计算值不可用。有什么方法可以保持在 TARGET1 中计算的值?谢谢。

4

1 回答 1

0

你有一个基本的误解。VAL在配方中设置的变量TARGET1根本不是一个 make 变量:它是一个 shell 变量。您可以判断,因为如果您将赋值的语法更改为仍然是有效的 make 变量赋值但不是有效的 shell 变量赋值的其他内容,例如:

TARGET1:
        VAL := foo

它会给你一个语法错误。基本上在 make 中,任何配方行(目标后以 TAB 字符开头的行)根本不会被 make 解释:它们被传递给 make 调用的 shell。当然,在那个 shell 中发生的任何事情都不会对 make 变量的值等产生任何影响。

你没有给我们太多细节。您没有说命令是使用环境中的变量还是通过命令行使用变量。你没有说你使用的是什么版本的make。如果它是 GNU make,你有很多选择。最简单的一种是始终设置值;如果它需要 shell 语法,你可以使用 shell 函数:

VAL := $(shell #compute value of VAL)

TARGET1:
        #run some command that uses $(VAL)
TARGET2:
        #run another command that uses $(vAL)

在我们为您提供更多可能性之前,我们需要了解要求:如果您必须设置值,TARGET1我们需要知道原因,然后才能提供可能的解决方案。

于 2013-07-18T21:02:17.410 回答