2016-08-22 3 views
0

[OK]をイムは、カーネルモジュールの開発に取得し、ガイドがすべてかなりこの行が含まれ、同じ基本的なメイクファイルを使用して:このmakeファイル行では何が起こっていますか?

make -C /lib/modules/`uname -r`/build M=$(PWD) modules 

をだから私の質問は以下のとおりです。

  1. はなぜメイクですファイルを作る?それは再帰的だと思われる
  2. Mは何ですか?マニュアルページのmake -Mフラグが見つからない
+1

あなたの引用されたmakeファイルテキストにも '-M'はありません。 –

+0

フラグではなくMとは何ですか? – TaylorE

+1

[再帰的なmakeは有害と見なされます](http://aegis.sourceforge.net/auug97.pdf)にもかかわらず、なぜmakeは再帰的に 'make'を呼び出すのが奇妙であると考えますか? 'M'はコマンドラインでオーバーライドされる変数です。 –

答えて

1

makeの再帰的な使用は、ビルドプロセスにモジュール性を導入する一般的な手法です。たとえば、特定のケースでは、関連するコンポーネントをそのアーキテクチャのuname -r出力と一致するフォルダに配置することによって新しいアーキテクチャをサポートすることができます。マスターメイクファイルをまったく変更する必要はありません。別の例では、1つのコンポーネントをモジュラー化すると、新しいプロジェクトのマスターメイクファイルに大きな変更を加えることなく、別のプロジェクトで再利用するほうがずっと簡単になります。

コードをファイル、モジュール、クラスに分けると便利です(後者はC言語以外の言語では明らかです)。ビルドプロセスを別々のモジュールに分けると便利です。プロジェクトの管理を容易にするための単なる一種の組織です。関連する機能を別々のライブラリやプラグインにグループ化して別々にビルドすることもできます。マスターメイクファイルへの書き込みアクセスを必要とすることなく、異なる個人またはチームが別々のコンポーネントで作業することができます。コンポーネントを個別にビルドして、別々にテストすることができます。

もちろん、makeを再帰的に使用しなくてもこれらのことをすべて行うことは不可能ではありませんが、組織化の一般的な方法の1つです。 makeを再帰的に使用しなくても、大規模なプロジェクトにはさまざまなコンポーネント "メイクファイル"が残っています。これらのメイクファイルは、単独ではなくマスターのmakefileにインポートまたはインクルードされます。別の呼び出しで実行されていますmake

非常に大きなプロジェクト用に1つのメイクファイルを作成して維持することは、簡単なことではありません。しかし、記事Recursive make considered harmfulに記載されているように、makeの再帰的な使用には、それ自身の問題もありません。

あなたのMは、コマンドラインで変数を上書きしているだけです。 makefileのどこかで変数Mが使用されます。このようにコマンドラインでその値を指定すると、指定した値が、その変数への他の割り当てを上書きして、makefile(s) 。

関連する問題