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

时间:2011-10-07 03:10:44

标签: makefile

我几乎不知道足够的makefile东西来破解其他人的makefile,有时甚至没那么多。我现在的雇主有一个相当复杂的制作环境,我在makefile中添加了几个目标,主要是自我记录我需要的所有开关。 (可能有更好的方法来做到这一点......如果有,请告诉我!!)

无论如何,第一个目标按预期工作。第二个目标与第一个目标相同,只是BENCH赋值在结尾处有一个“2”。否则,它的确切调用。在执行期间的某个时刻,BENCH变量用于创建目录。 第一个目标按预期创建目录。第二个目标使用默认的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)

1 个答案:

答案 0 :(得分:0)

我不明白为什么你会收到这个错误,我无法重现它。尝试更简单的事情:

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