2012-05-10 8 views
1
私は、次のMakefileがしたい

仮想Makefileの目標

a: b 

b: c 
    touch b 

c: 
    # time consuming task that only needs to run once 

bがすでに存在する場合、依存関係のチェーンを停止する方法はありますか?私はマニュアルをきれいにしてbを取り除き、cの再実行をトリガーするのは大丈夫です。 bが存在する場合、cをトリガーすることなく、何度もaを実行できるようにしたい。

私はcのようなタスクが多いので、別々のタスクごとにファイルに触れないようにしたいので、ファイルシステムに不要なファイルが詰まっていないようにしてください。

+0

どのバージョンを実行していますか? – Beta

+0

GNU Make 3.81です。 –

+0

あなたは、 'c'の実行が' b'が存在するかどうかに依存するとします。 「私は 'c'のようなタスクがたくさんあるので、別々のタスクごとにファイルに触れないようにしたい。ファイルシステムに不要なファイルが詰まっていないようにしたい。これは矛盾のように見えます。 – Beta

答えて

3

としてあなたのMakefileを書くことができます。

a: b 

b c: 
    # time consuming task that only needs to run once 
    touch b 

make cは無条件に自分のタスクを呼び出します。

make bは、ファイルbが存在しない場合にのみタスクを実行します。

make a

はBに依存するため、bが存在しない場合、タスクにのみ、作るの

+0

たとえば、 'a'を5回実行すると、' b'が一度しか実行されません。 –

+0

私はあなたがその質問を明確にすべきだと思います。 "make a"を5回呼び出すと、上記のスクリプトで "時間がかかる"タスクが1回だけ実行されます。 – mirk

+0

私はもう少し状況を明確にしようとしました。 –

関連する問題