私が取り組んでいる小さなプロジェクトのためにGNUMakeを学ぼうとしています。これまでのところ、「基本的な」チュートリアルでさえかなり大雑把に見え、makefile の構文をまだ理解していません。
まったくの初心者が GNUMake に慣れるための優れたリソースを持っている人はいますか?
決定的なガイドはhttp://www.gnu.org/software/make/manual/make.html
です。詳細な説明があるオライリーな本「Managing Projects with GNU Make」があります。以前のエディションを使用することもできます。それらは GnuMake を具体的にカバーしていませんが、はるかに薄いです。
Make は開発者の間では汚い秘密です。誰もそれを理解していません。他の誰かから make スクリプトを借りて、それを変更するだけです。ゼロから作成されたスクリプトは 1 つだけだと思います (おそらくツールの作成者によって)。
単純な例以上のことを行う必要がある場合、ほとんどの人は Ant のような最新のビルド システムに切り替えるか、Perl/Python/etc で独自のビルド システムを作成します。
makeの最も一般的に使用される機能は、いくつかの単純な概念、ターゲット、依存関係、および変数に分解できます。
ターゲットは構築したいものですが、ターゲットの下にあるコマンドはコンパイラコマンドまたはスクリプトにすることができます。通常、各ターゲットはコード内のモジュールを参照しますが、プロジェクトに合わせてこれらを細かくすることができます。
依存関係は、プロジェクト内のファイルまたはその他のターゲットです。これの最良の例は、一連のオブジェクトファイルからバイナリを構築しているCプロジェクトの場合です。バイナリをビルドする前に各オブジェクトファイルが存在する必要があるため、makeはすべての依存関係が完了するまでターゲットをトラバースし、ターゲット全体に対してコマンドを実行します。
変数は必ずしも必要ではありませんが、コンパイラフラグなどを処理するのに非常に便利です。正規の例は、CCおよびCCFLAGであり、使用しているコンパイラ、つまりgccおよび-ansi-Wall-o2などのフラグを参照します。
より一般的なヒントとコツ:
オライリーの本の提案に同意します。
Make に関する役立つヒント、コツ、洞察については、Mr. Make の記事を参照してください。
私は GNU 情報システムの大ファンではありませんが、GNU の make 情報ページが非常に役立つことがわかりました。非常に基本的な概念と、利用可能なものの大まかな種類を理解したら、たとえば、事前に作成された関数などの情報を参照するには、情報ページが最も簡単な方法であることがわかりました。
(GNUinfo
プログラムは忘れて、pinfo
代わりに eg を使用してください。)
mgb:それはさらに悪いことです。私は以前、複雑な make システムをゼロから作成したことがあります (数千のファイル、50 または 100 のディレクトリ、4 または 5 のコンパイラとクロスコンパイル ターゲット、2 つの OS など)。私は座って、最初に gnu make を徹底的に学び、システムを設計し、最初にプロトタイプをいじりました。私たちは皆、その結果にとても満足していました。
しかし、それは何年も前のことです。私が今日それらをどのように書いているか知っていますか?あなたが説明するのと同じ方法。それはかなり面倒で、構文の詳細は十分に曖昧であり、かなり定期的に行わない限り、詳細を思い出すことができません. 直観的でない構文といくつかの風変わりなルールを持つ他の言語と同じように、私は推測します。