2013-02-20 18 views
5

内から作るの呼び出し、私は完全に新しいシェルから呼び出された作品のMakefile、すなわちしている:私はのMakefileからこのMakefileを呼び出す場合は、それが何らかの複雑にメイク

make -C /dir/ 

を失敗しました依存関係の問題。明らかに、make[1]:などの印刷によって明らかに入れ子にされた呼び出しの知識を持っていると私はmakeが何らかの形で子プロセスと変数を共有していると思われます。

をメイクファイル内からクリーン makeと呼ぶことはありますか?私のビルドがきれいなシェルから動作するならば、スクリプト内の恐ろしさに対処することなく別のMakefileから呼び出すことができるはずです! :)

ありがとう!

+0

これは簡単ではありません。 makefile_1が*特定の* makefile_2、または*他のメイクファイルから呼び出されたときに失敗するということを意味しますか? – Beta

+0

Hmmmm、odd。それぞれの場合に 'make -p'の出力を比較してください。 (当然のことながら、私は常に '-Rr'と' --warn'-YMMVで_make_を実行します。) – bobbogo

答えて

8

make実際に再帰的に呼び出されると、その環境の一部が共有されます。

sub-make: 
     $(MAKE) -C /dir/ MAKEFLAGS= 

と、それは場合に役立ちます参照してください。https://www.gnu.org/software/make/manual/html_node/Options_002fRecursion.html#Options_002fRecursionで示唆したように、あなたはあなたの再帰呼び出しそのように書きたいと思うかもしれません。あなたもそれは呼び出し先メイク破った発信者のメイクにいくつかの環境変数だったexportunexportディレクティブ(https://www.gnu.org/software/make/manual/html_node/Variables_002fRecursion.html#Variables_002fRecursion

1

を使用することにより、サブ作るに輸出されている変数を制御することができます(CFLAGSなど...)

私の解決策は、きれいなシェルと呼び出し時の環境を区別することでした。私は手動で問題変数をリストに追加し、いくつかのsave_env/restore_envスクリプトを作成しました。

ありがとうございます!