簡體   English   中英

從 Perl 設置環境變量並在 Makefile 中使用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM