質問

現在取り組んでいる小さなプロジェクトのためにGNUMakeを学ぼうとしています。これまでのところ、「基本」チュートリアルはかなり荒いようで、メイクファイルの構文についてはまだ理解していません。

絶対に初心者がGNUMakeに慣れるのに役立つリソースはありますか?

役に立ちましたか?

解決

最終的なガイドは http://www.gnu.org/software/です。 make / manual / make.html
o'reillyの本「Managing Projects with GNU Make」があります。より多くの説明があります。 以前のエディションを使用することもできます。GnuMakeを具体的にカバーするわけではありませんが、はるかに薄いです。

Makeは開発者の間の汚い秘密です-私たちは誰もそれを理解していません。他の人からmakeスクリプトを借りて変更するだけです。 (おそらくツールの作成者によって)1つだけのスクリプトがゼロから作成されたことを想像します。

単純な例以上のことを行う必要がある場合、ほとんどの人は、Antのような最新のビルドシステムに切り替えるか、Perl / Python / etcで独自のシステムを展開します。

他のヒント

最も一般的に使用されるmakeの機能は、いくつかの単純な概念、ターゲット、依存関係、変数に分類できます。

ターゲットは構築したいものですが、ターゲットの下のコマンドはコンパイラコマンドまたはスクリプトにすることができます。通常、各ターゲットはコード内のモジュールを参照しますが、プロジェクトに合わせて必要なだけ細かく設定できます。

依存関係は、プロジェクト内のファイルまたはその他のターゲットです。これの最良の例は、多数のオブジェクトファイルからバイナリを構築しているCプロジェクトです。バイナリをビルドする前に各オブジェクトファイルが存在する必要があるため、makeはすべての依存関係が完了するまでターゲットを走査し、ターゲット全体に対してコマンドを実行します。

変数は必ずしも必要ではありませんが、コンパイラフラグなどの処理には非常に便利です。標準的な例は、CCとCCFLAGです。これらは、使用しているコンパイラ、つまりgccと-ansi -Wall -o2などのフラグを参照します。

いくつかの一般的なヒントとコツ:

  • コマンドは[タブ]文字で処理する必要があります 、または実行されません。これはmakeの古い遺物であり、これがなぜなのか思い出せません。
  • 慣例により、すべてのターゲットを含めて、デフォルトを指定するデフォルトを指定できます。これは、複雑なメイクファイルがあり、常にデフォルトにしたい特定のターゲットがある場合に便利です。
  • メークファイルはメークファイルまたはメークファイルと呼ばれる必要がありますが、それを別のものにしたい場合は、$ make -f [メークファイル名]
  • を使用します。
  • 常に完全な変数展開構文、つまり$(VARIABLE)を使用するか、makeが必要なコマンドを出力しない場合があります。
  • makeは再帰的に機能するため、プロジェクト内にディレクトリ内に存在するサブモジュールが多数ある場合は、make内からサブディレクトリmakefileでmakeを呼び出してそれぞれをビルドできます。
  • インストールスクリプトなどを必要とする本当に複雑なプロジェクトがある場合は、メイクファイルを生成し、ライブラリの存在や他の移植性の問題をチェックするための多くのトリックを行うautotoolsを調査することもできます。

" GNU Makeによるプロジェクトの管理、第3版" 「GNU Free Documentation License」の下に置かれます;また、法的に無料でオンラインで読むことができます:リンク

mgb:それはさらに悪いことです。私はかつて複雑なmakeシステムをゼロから作成しました(数千のファイル、50から100のディレクトリ、4から5のコンパイラー、クロスコンパイルのターゲット、2つのOSなど)。私は座って、最初にgnu makeの内側と外側を作り、システムを設計し、最初にプロトタイプを試しました。結果に非常に満足しています。

しかし、それは何年も前のことです。今日私がそれらをどのように書くか知っていますか?あなたが説明するのと同じ方法。かなり面倒くさいし、構文の詳細は、かなり定期的に実行しない限り、詳細を思い出せないほど不明瞭です。直感的でない構文といくつかの風変わりなルールを持つ他の言語と同じように、私は推測します。

私はGNU情報システムの大ファンではありませんが、GNU make infoページは非常に役立つことがわかりました。非常に基本的な概念と、どのような種類のものが利用できるかを知ったら、たとえば、事前に構築された関数などの情報を参照する最も簡単な方法が情報ページであることがわかりました。

(GNU info プログラムを忘れて、たとえば pinfo を使用してください代わりに。)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top