2017-02-08 6 views
0

私は他のmakefileを実行するmakefileを持っています。それらのメイクファイルの一つにバグがあり、-j 2以上で実行されると失敗することがあります。どのようにして再帰的にmakefileを呼び出すことができますか?私は通常、外側のmakefileを-j 9で実行します。1つのparralelジョブでmakeを再帰的に実行するには?

+0

と '$(MAKE)-j1 'として内部makeを呼び出すと、あなたは何をしますか? –

答えて

2

-j1を追加すると、makefileを実行しているコマンドラインが確実に動作します。しかし、私は別の方法で問題を解決することをお勧めします。

Q:トラブルメーカーは誰ですか?

A:ルールに間違った依存関係を持つMakefile。

正しい解決策は、メークファイルを修正することです。最も簡単な修正は、特別な.NOTPARALLELターゲットを追加するだけです。

GNU https://www.gnu.org/software/make/manual/html_node/Special-Targets.html手動ください:

.NOTPARALLELがターゲットとして言及され、その後、メイク のこの呼び出しは「-j」オプションが指定されている場合でも、逐次実行されます。 再帰的に呼び出されるmakeコマンドは、(メイクファイルにもこのターゲットが含まれていない限り)レシピを並列で実行します。 の前提条件はすべて無視されます。

だからトラブルのmakefileに

# TBD: This makefile is broken: it doesn't support -j make option. 
.NOTPARALLEL: 

を追加し、それを実行するコマンドラインを触れないでください。このようにすると、自己文書化の回避策になります。

0

このようなオプション-j1を追加するだけです。$(MAKE) -C ${PROJECT_BUILD_DIR} -j1 installが動作します。

関連する問題