ホームページ  >  記事  >  運用・保守  >  Linux プロジェクト自動構築ツール Makefile make をマスターしましょう

Linux プロジェクト自動構築ツール Makefile make をマスターしましょう

WBOY
WBOY転載
2022-01-24 17:11:361891ブラウズ

この記事では、Linux の自動プロジェクト構築ツールについて説明します。実際には、特定の機能を操作するためにファイルのコードだけに頼ることはできないことがよくあります。複数の異なるセクションの組み合わせが必要です。この時点では、最終的な機能を実現するには、プロジェクトとパッケージを構築し、すべてのモジュールを結合する必要があります。みんなが助けてくれることを願っています。

Linux プロジェクト自動構築ツール Makefile make をマスターしましょう

Makefile

Makefile は、プロジェクトのビルド ルール プロセスを記録するテキスト ファイルです。仕事でメイクファイルを書けるかどうかは、ある面では大規模プロジェクトを遂行できる能力があるかどうかを示しますが、同時にプロジェクト内のソースファイルはカウントされず、種類ごとにいくつかのディレクトリに置かれます。 Makefile 一連のルールは、どのファイルを最初にコンパイルする必要があるか、どのファイルを後でコンパイルする必要があるか、どのファイルを再コンパイルする必要があるかを指定するために定義されており、さらに複雑な関数操作を実行できます。それがもたらすのは「自動コンパイル」一度作成すると、必要な make コマンドは 1 つだけで、プロジェクト全体が完全に自動的にコンパイルおよび翻訳されるため、ソフトウェア開発の効率が大幅に向上します。

make

make は、メイクファイル内の命令を解釈するコマンド ツールです。一般に、Delphi の make、Visual C nmake、Linux 上の GNU make など、ほとんどの IDE にこのコマンドがあります。 makefile がエンジニアリングにおける

コンパイル方法になっていることがわかります。 Make はコマンド、makefile はファイルであり、これらを組み合わせて使用​​すると、プロジェクトの自動構築が完了します。

動作原理

Makefile では、さまざまなファイル間の依存関係が形成されます。たとえば、code.o に基づいたリンクを通じて code.exe が生成され、code.o がそれです。 code.sを元にアセンブルしてCode.sを生成 code.iを元にコンパイルしてCode.sを生成 code.cを元に前処理が完了してCode.iを生成 このようにしてソースは層ごとに見つかります。そのルールは、最初のファイルを最後に完成したファイルとして扱うフラッシュバック方式を採用しており、現在のファイルが生成されない場合は、依存関係と相互生成方式によって階層ごとに進められ、最終的にすべてのファイルの形成が完了します。


依存関係

A:B AはBに依存しています

依存関係メソッド

gcc オプション B -o A A は B の処理後に生成されたファイルです

プロジェクトのクリーンアップ

プロジェクトは次のとおりですclean と同様に、cleaning は最初のターゲット ファイルに直接的または間接的に関連付けられていないため、その後に定義されたコマンドは自動的に実行されませんが、make が実行されることを示すことができます。つまり、「make clean」コマンドは、再コンパイルのためにすべてのターゲット ファイルをクリアするために使用されます。ただし、クリーンなターゲット ファイルの場合は、通常、それを擬似ターゲットとして設定し、.PHONY で変更します。擬似ターゲットの特徴は、常に

によって実行されることです。

Principle

make は、現在のディレクトリで「Makefile」または「makefile」という名前のファイルを検索します。

見つかった場合は、ファイルのコンテンツ内の最初のファイルを検索し、このファイルを最終ターゲット ファイルとして使用します。

ファイルが現在存在しない場合、またはファイルの依存ファイルの変更時刻が現在のファイルより新しい場合は、後で定義されたコマンドを実行して現在のファイルを生成します。

ファイルの依存ファイルが存在しない場合は、最終ソース ファイルが見つかるまで、この依存ファイルに対して手順 2 と 3 に進みます。

もちろん、C ファイルと H ファイルはが存在するため、make は .o ファイルを生成し、その .o ファイルを使用して、ファイルを実行するという make の最終タスクを宣言します。

これは make 全体の依存関係です。Make は、最初のターゲット ファイルが最終的にコンパイルされるまで、ファイルの依存関係をレイヤーごとに検索します。

検索プロセス中に、最後の依存ファイルが見つからないなどのエラーが発生した場合、make は直接終了してエラーを報告します。定義されたコマンドにエラーがある場合、コンパイルは成功しません。 、make はそれをまったく無視します。

make はファイルの依存関係のみを考慮します。つまり、依存関係を見つけた後、コロンの後のファイルがまだ存在しない場合は、申し訳ありませんが、動作しません。

make は、毎回生成のために Makefile 内の最初のターゲット オブジェクトのみを検索し、生成後に終了します (2 番目のオブジェクトは生成されません)

.PHONY: clean

clear:

œrm -rf $(obj)

[補足]


1. 事前定義変数の使用: [$@ ]、[ $ ^]、[ $#$@: ターゲット オブジェクトを示します#$^: すべての依存オブジェクトを示します

&<:>2を示します $ (ワイルドカード ./.c) カレントディレクトリ内の.cで終わるすべてのファイルのファイル名を取得します 【例】 src=$(ワイルドカード ./.c) コード: $ (str)

3. $ (patsubst %.c, %.o,$(str)) は、str 変数内の .c ファイルを .o に置き換えることを意味します。そしてobj変数に保存されます。

4. 疑似オブジェクト: ターゲット オブジェクトが外部ファイルとは何の関係もないことを宣言します。つまり、オブジェクトが最新かどうか、また外部が存在できるかどうかに関係なく、毎回オブジェクトを再生成する必要があります。 、ステートメントは毎回実行する必要があります。 [.PHONY:]

5. プログラムのコンパイルプロセス: 一般的には、前処理、コンパイル、アセンブリ、リンクが含まれますが、実際のプロジェクト構築では、コンパイルとリンクの 2 つのステップに分かれます。この利点は、1 つの .c ファイルのみを変更する場合、すべての .c ファイルを直接コンパイルして実行可能プログラムを生成する以前のプロセスと比較して、実行可能プログラムを生成するためにすべての .c ファイルを再コンパイルする必要があり、非常に非効率であることです。 , そのため、操作は 2 つのステップに分かれています。まず、各 .c が独自の .o を生成し、次にすべての .o をリンクします。.c が変更されたら、この .c のみを生成する必要があります。oその後は、.c を置き換えるだけです。プログラム内の指定されたモジュール。

例 1. 一般的な Makefile を作成します

Linux プロジェクト自動構築ツール Makefile make をマスターしましょう

Linux プロジェクト自動構築ツール Makefile make をマスターしましょう

例 2. 定義済みの Makefile を使用する

Linux プロジェクト自動構築ツール Makefile make をマスターしましょう

関連する推奨事項: 「Linux ビデオ チュートリアル

以上がLinux プロジェクト自動構築ツール Makefile make をマスターしましょうの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。