2017-01-09 18 views
1

私はPerlスクリプトからenv変数を設定しようとしています。これをMakefile内で使用すると動作しません。 ENVハッシュツリーをダンプすると、変数が正常に設定されたことが示されます。Perlからenv変数を設定し、Makefileで使用する

$ENV{"VIP_LIST"} = $vip_exists; 
+0

そして、perlスクリプトはどのようにmakeを呼び出しますか? – Petesh

+2

環境変数を設定して後で使用するためにperlスクリプトを使用しようとしていますか? perlスクリプトはサブシェルで実行されます。それは親のシェルにそれの価値を持っていません。 – blackpen

+0

perlスクリプトはmakeを起動していません。 perlスクリプトの実行後.. makeは再帰的に呼び出されるので、env。変数更新が表示されます –

答えて

0
VIP_LIST=$(perl my.pl) 

Makefileのコード

list_gen: $(TESTBENCH_PATH)/blocks/soc_tb/global/default 
    perl list_gen.pl; \ 
    $(MAKE) $(RECITAL_PATH)/catalog/catalog.xml 

    @ touch [email protected] 


# 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のスクリプトコードは、親シェルの変数にスクリプトの出力を保存します。

HTH あなたのPerlスクリプトを実行ゲオルク

0

は、プロンプト上の$(./ myperlscript.pl)のようにそれを行います。何をする必要が

$ENV{VIP_LIST} = $vip_exists; 

ドロップ引用符

+0

現在のシェルでperlインタープリタを実行しようとしていますか(シェルスクリプトの先頭にドットを付けます)? – blackpen

+0

はい、私です。同じプロセスでエクスポートされます。 –

+0

なぜdownvote? –

1

である私はそれから(perlのスクリプトのような)任意の外部コマンドを実行することにより、を作るの環境を更新するための任意のエレガントな方法があるとは思いません。直接の方法でさえもうまくいかないからです。

/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 

が元に来てあなたの質問、..あなたのシェル環境を変更した後にmakeを呼び出すことはできませんか?

+0

ありがとうございますが、私はそれを探していません。私はenvが必要です。(makefileから呼び出された)perlスクリプトからmakefileの中で更新される変数 –

+0

私はいくつかの(x)ファイルで意味を修正し、envを更新するperlスクリプトを実行すると考えました。変数を使用すると、更新された変数が使用されますが、今はmake(Xファイル)を読み込んで変数を更新する必要があります。あなたはもっと良い提案がありますか?ありがとう –

関連する問題