Makefile:如何使一个目标中计算的宏值可用于另一个目标?

时间:2013-07-18 20:50:55

标签: macros makefile target

我正在尝试在我的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的值会重置!在TARGET2完成。因此,当我尝试在TARGET2中运行另一个命令时,VAL的计算值不可用。有没有办法保持在TARGET1中计算的值?感谢。

1 个答案:

答案 0 :(得分:0)

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

TARGET1:
        VAL := foo

它会给你一个语法错误。基本上在make中,任何配方行(以TAB字符开头的目标之后的行)都不会被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中设置值,我们需要知道原因,然后才能提供可能的解决方案。