2011-12-22 7 views
2

可能性の重複:
arithmetic in a MakefileのMakefile:更新変数

私は非常に多くのMakefileを使用して初心者です。私はこの多かれ少なかれのような変数、更新したいと思います:つまり

LEVEL=0 

train: 
    while (eval_score > previous_eval_score) 
    make iterate 

iterate: 
    do stuff 
    write files to /path/to/$(LEVEL)/asdf.txt 
    $(LEVEL)++ 

を、すべての反復は、へ/ 1 /そして/パス、最初に/パス//0に、ディレクトリにいくつかのファイルを書き込み、等のようなものである。

明らかに、関数内で変数を更新または再割り当てすることはできません。私はしばらく検索しましたが、満足のいく回答は見つかりませんでした。たぶん私は持っているが、私はすべてを理解していない。私はbashで計算するようなものも試しましたが、最終的にはまだ変数を更新する必要があります。おそらく、私は代わりにファイルを更新するような何かを試みるべきです。

お時間をいただきありがとうございます。

+0

純粋なシェルはここで十分ではないでしょうなぜあなたは説明していただけますか? 'while(eval_score> previous_eval_score);ものをする。ファイルを書き込む。済んでいるのは簡単で表情豊かなようです。 – thiton

+0

こんにちはthiton、あなたの返信ありがとう。また、メイクファイルにはいくつかのスクリプトを呼び出すいくつかの関数が含まれています。そのうちのいくつかは階層的で、私の意見ではうまくいきます。私はそれがもっとエレガントで管理しやすいので、makeを好むでしょう。しかし、あなたはおそらく私もシェルスクリプトを使用することができます。私が解決したい主な問題は、反復が完了するたびに$(LEVEL)変数に1を加えることです。私はそれが重要な変更を加えることなくやり遂げることができるかどうかを知りたいだけです。よろしく、ギデオン – Gideon

答えて

0

あなたのMakefileの主な問題は、各make iterateが環境変数を更新することができるサブメイクを生成することですが、親makeには影響を与えず、次の繰り返しには影響しません。さらに、ルール内から変数を更新することはできませんが、それは二次的な問題です。

あなたが提案同じようmake反復を行い、シェルを経由してレベルをインクリメントすることができます

train: 
    LEVEL=0; while need_more_iterations; do \ 
     $(MAKE) LEVEL=$$LEVEL iterate; \ 
     LEVEL=`echo $$LEVEL + 1 | bc`; \ 
    done 
+0

お返事ありがとう、私はそれを実装しようとします。ベスト、ギデオン – Gideon