[英]Setting env variable from Perl and using in Makefile
我正在嘗試從 Perl 腳本設置 env 變量,但在 Makefile 中使用它不起作用。 轉儲 ENV 哈希樹時顯示變量已成功設置。
生成文件代碼
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;
我認為沒有任何優雅的方法可以通過運行任何外部命令(如 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 嗎?
VIP_LIST=$(perl my.pl)
將腳本的輸出保存在父 shell 的變量中。
HTH喬治
當你執行你的 Perl 腳本時,像 $(./myperlscript.pl) 在提示符下那樣做。 你需要做的是
$ENV{VIP_LIST} = $vip_exists;
去掉引號
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.