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