【Linux】自動ビルドツール - make/Makefileの詳細解説

1175ee7859cc48aea62cd5d09ac60a8a.png

 序文

  • 皆さん、こんにちは 。YYドロップ Linux シリーズへようこそ。ようこそ!
  • この章の主な内容は、Linux に携わってきたベテランを対象としています。

YY ドロップ Linux コラムの購読を歓迎します。より多くの乾物が継続的に更新されます! ポータルは以下の通りです! 

コラムを購読してください: YY の「Linux」シリーズ❀❀❀❀❀
【Linuxシリーズ-P1】Linux環境の構築
【Linuxシリーズ-P2】Linuxの基礎知識と使い方
【Linuxシリーズ-P3】Linuxのパーミッション
【Linuxシリーズ-P4】Linux基本ツール【yum】【vim】

目次

1. Make/Makefile バックグラウンドの概要

2. 依存関係と依存メソッド

3. Makefile 機能: 依存関係の自動導出

4. Make 機能: ソース ファイルとターゲット ファイルの新しさに応じて、コンパイルの依存関係を再実行するかどうかを決定します。

5. 【.PHONY】と偽のターゲットの適用

はじめに: make を毎回実行するには何が必要でしょうか?

従来アプリケーション:[.PHONY] cleanを変更し、cleanに対応する依存メソッドが毎回実行されるようにする

6. 特殊記号 [$@] [$^] はファイルを示します


1. Make/Makefile バックグラウンドの概要

  • Makefile を書けるかどうかは、ある面から見ると、その人に大規模なプロジェクトを完了する能力があるかどうかを示します。
  • プロジェクト内のソース ファイルはカウントされず、タイプ、機能、モジュールに応じて複数のディレクトリに配置されます。Makefile は、どのファイルを最初にコンパイルする必要があるか、どのファイルを後でコンパイルする必要があるか、どのファイルを再コンパイルする必要があるかを指定する一連のルールを定義し、さらに複雑な機能操作を実行することもできます。
  • makefile のメリットは「自動コンパイル」一度作成すると、make コマンドを 1 回作成するだけで、プロジェクト全体が完全に自動でコンパイルされるため、ソフトウェア開発の効率が大幅に向上します。
  • make は、makefile 内の命令を説明するコマンド ツールです。一般に、Delphi の make、Visual C++ の nmake、Linux 上の GNU の make など、ほとんどの IDE にこのコマンドがあります。Makefile がエンジニアリングにおけるコンパイル方法になっていることがわかります。
  • make はコマンドmakefile はファイルであり、この 2 つは一緒に使用してプロジェクトの自動構築を完了します。
  • make はmakefile を上から下にスキャンし、最初のコマンドをデフォルトのコマンドとして取得します (たとえば、先頭に clean: を置くと、make の操作は clean になります)。そのため、通常の状況では、実行するプログラムを先頭に置き、clean を最後に置き、clean を使用したい場合は [make clean] を呼び出します
  • make コマンドはデフォルトでシステムによって実行されます (下の図でわかるように、make は bin ディレクトリにあります)。

  •  makeはカレントディレクトリから対応する[依存関係]と[依存メソッド]を見つけますが、依存メソッドとは何でしょうか?詳細は以下を参照してください

2. 依存関係と依存メソッド

はじめに: 依存関係と依存メソッドをより深く理解していただくために、YY は以下に使用例を紹介します。

  1. 最初に vim で makefile を作成し、 [挿入モード] の図に示すように依存関係 [mycode:mycode.c]依存メソッド [gcc -o mycode mycode.c]を記述します。
  2. 注意すべき特別な点: [clean:]右側には何もありません。これは、clean がどのファイルにも依存しないことを意味します; 同様に、[1] では、mycode は mycode.c に依存します。
  3. vim を使用して mycode.c ファイルを作成しましょう 
  4. Linux インターフェイスに戻って、make および make clean と入力すると、その依存関係メソッドがはっきりとわかります。
  • [追記: make はデフォルトで呼び出される makefile 内の最初の操作であり、make clean は makefile 内で上から下に検索されます]


3. Makefile 機能: 依存関係の自動導出

  • 結論は、次の使用例からわかります。 make は、makefile 内の依存関係を自動的に推定します(これは再帰構造に非常によく似ています。再帰には関数スタック フレームの呼び出しが含まれるため、これがスタック構造であることも理解できます)。
  • 順序を変更しても影響はありません。
  • 依存関係のセットが途中で欠落している場合 (たとえば、mycode.s: mycode.i をコメントアウトする)、機能しません。


4. Make 機能: ソース ファイルとターゲット ファイルの新しさに応じて、コンパイルの依存関係を再実行するかどうかを決定します。

はじめに: make コマンドを 2 回目に使用すると、次のような状況が表示されます。これはコンパイルの繰り返しを防止し、効率を向上させるためのコンパイラです。また、これを行うにはどうすればよいですか?

結論は:

  • make コマンドは、ソース ファイルターゲット ファイル新しさに応じて、コンパイルの依存関係を再実行する必要があるかどうかを判断します。
  • どの操作でも、実行可能プログラム (.exe) の前にソース ファイル (.c) が必要です。
  • 一般に、実行可能プログラムはソース ファイルより新しい必要があります。
  • ソースファイルを変更する場合、その時点でソースファイルが実行プログラムよりも新しいことになりますが、この時点でmakeを実行することで実現できますが、それ以外の場合は「最新です」というフィードバックが表示されます。

5. 【.PHONY】と偽のターゲットの適用

はじめに: make を毎回実行するには何が必要でしょうか?

  • [.PHONY]を使用してmycode を変更し、偽のターゲットにする
  • false ターゲットの特徴は、それらが常に実行されることです

従来アプリケーション:[.PHONY] cleanを変更し、cleanに対応する依存メソッドが毎回実行されるようにする


6. 特殊記号 [$@] [$^] はファイルを示します

  • コロンの右側にあるファイルを表すには [$@] を使用してターゲット ファイルを表し、[$^] を使用します。

おすすめ

転載: blog.csdn.net/YYDsis/article/details/131515237