从Perl设置env变量并在Makefile中使用

时间:2017-01-09 08:46:13

标签: bash perl unix makefile

我正在尝试从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;

3 个答案:

答案 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;

删除引号