如何在makefile的目标中替换全局变量的定义?

时间:2012-07-12 06:09:17

标签: makefile

COMMON= D_FF       
all :  
        ncverilog $(COMMON).v
test1:     
        COMMON=T_FF  
    ncverilog $(COMMON).v  
test2:  
    COMMON=JK_FF_tb  
    ncverilog $(COMMON).v   
test3:   
    COMMON=JK_FF  
    ncverilog $(COMMON).v    

我只想用局部变量替换全局变量,但它不起作用。如果我调用“make test1”,它仍然只替换“COMMON=D_FF”而不是“{{1} }”。

2 个答案:

答案 0 :(得分:3)

你问题中的makefile的格式都混淆了。看起来您的makefile可以像这样重写:

COMMON = D_FF
test1 : COMMON = T_FF
test2 : COMMON = JK_FF_tb 
test3 : COMMON = JK_FF

all test1 test2 test3 :
    ncverilog $(COMMON).v

答案 1 :(得分:0)

make是一种声明性语言,其范围规则几乎与您习惯的编程语言完全不同。 COMMON不是一个“全局”,因为恰好有一种(稍微例外)的方式来设置特定于目标的变量(参见Reinier的回答)。