2016-11-28 2 views
1

メイクファイルと複数のターゲットがあります。私はまずディレクトリをきれいにしてから、ディレクトリを構築してからtasks1..4のコンパイルを実行したい。コンパイル後にディレクトリを構築することがあり、コンパイルが不可能になることがあります。以下のような一般的なルックスでメイクファイルで優先度を指定する方法

のMakefile:tasks1..4が実行を開始する前に

release: clean 
release: build 
release: task1 task2 
release: task3 task4 

クリーンとビルドが終了しなければなりません。言い換えれば、メイクファイルのタスクで優先度を指定する方法。今すぐメイクファイルから4行すべてが一瞬で始まるようです。

答えて

4

私はあなたが-jを使用していると仮定しています。並列ビルドが有効になっていない場合makeは、ルールを一緒に開始することはありません。前提条件がリストされている順序で一度に1つずつ実行されます。

注文を指定する唯一の方法は、前提条件です。だから、これは次のようになります。

release: task1 task2 task3 task4 
task1 task2 task3 task4: build 
build: clean 

しかし、この最後のステップは非常に悪い考えです:あなたはそれ以外の場合は必ず実行されますが、一般的にきれいに依存するようにビルドターゲットを望んでいません。あなたの手できれいに実行するために人々を頼む、おそらくこのようなリリース目標に対処するための最も一般的な方法は、メイク再帰であることができ、次のいずれか

release: 
     $(MAKE) clean 
     $(MAKE) build 
     $(MAKE) task1 task2 task3 task4 
+0

おかげで、これは私が必要とするものです –

関連する問題