我正在尝试从Perl脚本设置env变量,并在Makefile中使用它不起作用。转储ENV哈希树显示变量成功设置。
Makefile代码
list_gen: $(TESTBENCH_PATH)/blocks/soc_tb/global/default
perl list_gen.pl; \
$(MAKE) $(RECITAL_PATH)/catalog/catalog.xml
@ touch $@
# Generates catalog.xml from .xmls of VIPs
$(RECITAL_PATH)/catalog/catalog.xml: $(VIP_XMLs)
@echo "# generating catalog.xml " ; \
echo "vip list is $(VIP_LIST)" ; \
rpfCatalog --add $(VIP_XMLs); \
for vip in $(VIP_LIST); \
do \
rpfCatalog --add $$TESTBENCH_PATH/common_blocks/$$vip/global/default.xml; \
done
Perl脚本代码
$ENV{"VIP_LIST"} = $vip_exists;
答案 0 :(得分:1)
我认为通过运行任何外部命令(如perl脚本)来更新 make 的环境没有任何优雅的方法。因为即使是直接的方式也行不通。
/home/user> cat makefile
NUM=100
first:
NUM=200
echo $(NUM)
second:
NUM=200; echo $(NUM)
third:
NUM=200; \
echo $(NUM);
/home/user> make first
NUM=200
echo 100
100
/home/user> make second
NUM=200; echo 100
100
/home/user> make third
NUM=200; \
echo 100;
100
如果您只是在寻找perl脚本来修改它的父级环境,那么这样的工作(以非常有限的方式):
/home/user> cat change_env.pl
#!/usr/bin/perl -w
print "NUM=100\n";
/home/user> NUM=1
/home/user> echo $NUM
1
/home/user> eval $(./change_env.pl)
/home/user> echo $NUM
100
原来你的问题,...你不能在对shell环境进行更改后调用make吗?
答案 1 :(得分:0)
VIP_LIST=$(perl my.pl)
将脚本的输出保存在父shell的变量中。
HTH 乔治
答案 2 :(得分:0)
当您执行Perl脚本时,请在提示符下执行$(./ myperlscript.pl)。你需要做的是
$ENV{VIP_LIST} = $vip_exists;
删除引号