Makefile 为什么在递归调用make时会丢失变量设置?

Makefile 为什么在递归调用make时会丢失变量设置?,makefile,Makefile,我几乎不知道足够多的makefile内容来破解其他人的makefile,有时甚至不知道那么多。我现在的雇主有一个相当复杂的make环境,我在makefile中添加了几个目标,主要是为了自我记录我需要的所有开关。也许有更好的办法…如果有,请让我知道 无论如何,第一个目标按预期工作。第二个目标与第一个目标相同,只是工作台分配的末尾有一个2。否则,就完全一样了。在执行过程中的某个时刻,BENCH变量用于创建目录。第一个目标按预期创建目录。第二个目标使用默认的工作台名称(而不是传递给它的名称)创建目录。

我几乎不知道足够多的makefile内容来破解其他人的makefile,有时甚至不知道那么多。我现在的雇主有一个相当复杂的make环境,我在makefile中添加了几个目标,主要是为了自我记录我需要的所有开关。也许有更好的办法…如果有,请让我知道

无论如何,第一个目标按预期工作。第二个目标与第一个目标相同,只是工作台分配的末尾有一个2。否则,就完全一样了。在执行过程中的某个时刻,BENCH变量用于创建目录。第一个目标按预期创建目录。第二个目标使用默认的工作台名称(而不是传递给它的名称)创建目录。不知何故,它丢失了命令行中的变量设置,即使第一个目标使用了几乎相同的语法

为什么它调用自身时会丢失变量设置?有没有我遗漏的微妙之处?这样做是否合理

comp_gate_oct04_ff:
    make clean all BENCH=GATE_OCT04_FF SIMULATOR=NC SIM_64BIT=1 CORNER=FF NETLIST=oct04 | tee all_gate_oct04_ff.log
    @tail all_gate_oct04_ff.log  | mail -s "Compile for GATE_OCT04_FF is complete" $(SMS_ADDR) $(USER)

comp_gate_oct04_ff2:
    make clean all BENCH=GATE_OCT04_FF2 SIMULATOR=NC SIM_64BIT=1 CORNER=FF NETLIST=oct04 | tee all_gate_oct04_ff2.log
    @tail all_gate_oct04_ff2.log  | mail -s "Compile for GATE_OCT04_FF2 is complete" $(SMS_ADDR) $(USER)

我看不出你为什么会犯这个错误,我也无法重现它。尝试更简单的方法:

comp_gate_oct04_ff:
    make foo BENCH=GATE_OCT04_FF

comp_gate_oct04_ff2:
    make foo BENCH=GATE_OCT04_FF2

foo:
    @echo BENCH is $(BENCH)
告诉我们这是怎么回事,我们就从那里开始

编辑: 好了,我们把问题一分为二了。现在试试这个:

comp_gate_oct04_ff:
    make clean
    make all BENCH=GATE_OCT04_FF SIMULATOR=NC SIM_64BIT=1 CORNER=FF NETLIST=oct04

comp_gate_oct04_ff2:
    make clean
    make all BENCH=GATE_OCT04_FF2 SIMULATOR=NC SIM_64BIT=1 CORNER=FF NETLIST=oct04

您使用的是哪个版本的Make?试一下make-v,看看它是怎么说的。旁注:当递归调用make时,应该使用$make而不是make:BENCH的默认值是多少?不幸的是,我不确定这里是否有足够的信息来了解发生了什么。也许正在使用override指令?这将按其应有的方式运行,并且不会再现错误…调用第一个目标打印xxx\u FF,第二个目标打印xxx\u FF2。啊!!