目次
1. Makefile とは
2. Makefile の利点
3. 命名規則
4. 基本ルール
7. 通常の変数
8. 自動変数
makefile には数多くの関数が用意されており、以下の 2 つの関数もよく使用されます。
ホームページ 運用・保守 Linuxの運用と保守 Linuxのメイクファイルとは何ですか

Linuxのメイクファイルとは何ですか

Nov 26, 2021 pm 02:02 PM
linux makefile

Linux では、makefile はプロジェクト ファイルのコンパイル ルールであり、プロジェクト全体のコンパイルとリンクのルールを記述します。これには、どのファイルをコンパイルする必要があるか、どのファイルをコンパイルする必要がないのかが含まれます。どのファイルを最初にコンパイルする必要があるか、どのファイルをポストコンパイルする必要があるか、どのファイルを再構築する必要があるかなど。

Linuxのメイクファイルとは何ですか

#このチュートリアルの動作環境: linux5.9.8 システム、Dell G3 コンピューター。

1. Makefile とは

Makefile は、単純にプロジェクト ファイルのコンパイル ルールと考えることができ、プロジェクト全体のコンパイルとリンクのルールを記述します。

エンタープライズレベルのプロジェクトには通常、多数のソースファイルが含まれており、機能、種類、モジュールごとに異なるディレクトリに分類されている場合もあれば、1つのディレクトリに複数のプログラムが格納されている場合もあります。

Makefle は、上記のコードの一部をコンパイルする方法の問題を解決するために生まれました。Makefle は、どのファイルを最初にコンパイルするか、どのファイルを後でコンパイルするか、どのファイルをコンパイルするかを決定する一連のルールを定義します。再コンパイルされました。

プロジェクト全体のコンパイルに必要なものはすべて Makefile に記述できます。言い換えれば、Makefile を使用すると、大量のソース ファイルやパラメーターを毎回手動で入力する必要がなく、プロジェクトのコンパイルを自動化できます。

Makefile の利点は、「自律コンパイル」を実現できることです。通常、プロジェクト全体でコンパイル、リンク、さらに複雑な機能を完了するには make コマンドが 1 つだけ必要です。すべての Linux ソース プログラムには Makefile が付属していると言えます。

2. Makefile の利点

  • コードのコンパイルを管理し、コンパイルするファイル、コンパイル順序、再コンパイルが必要かどうかを決定します;

  • コンパイル時間を節約します。ファイルが変更された場合、プロジェクト全体を再コンパイルする必要はなく、このファイルを再コンパイルするだけで済みます。

  • 一度だけです。通常、Makefile は一度だけ書き込む必要があり、後で大幅に変更する必要はありません。

3. 命名規則

一般的に、Makefile の名前は Makefile または makefile として問題ありませんが、多くのソース ファイルの名前は小文字であるため、Makefile を最初に表示できるため、より多くのプログラマが Makefile の名前を使用します。

Makefile に別の名前 (Makefile_demo など) を付けることもできますが、次の方法で使用する必要があります:

make -f Makefile_demo

4. 基本ルール

Makefile の基本ルールは次のとおりです。

シリーズの目的: 依存関係

(TAB) ルール

## 目的 --> 生成する必要のあるターゲット ファイル

依存関係 --> ターゲットの生成に必要なファイル

ルール --> 依存関係からターゲット ファイルを生成する手段files

tab -->

各ルールはタブで始まる必要があります、スペースは許可されません

たとえば、よく gcc テストを作成します。 c -o test, Makefileを使うと次のように書けます:

test: test.c
    gcc test.c -o test
ログイン後にコピー

このうち、1行目のtestが生成対象、test.cが依存関係、2行目がルールですtest.c からテストを生成します。

Makefile に複数の目標が存在する場合がありますが、Makefile は

最初の目標を最終目標として設定します

5. 動作原理

ターゲットの生成:

a. ルール内の依存ファイルが存在するかどうかを確認します;

b . 依存ファイルが存在しない場合は、依存ファイルを生成するルールを探します。

Linuxのメイクファイルとは何ですか

たとえば、上の図では、電卓を生成するルールは gcc main.o add.o sub.o mul.o p.o -o です。Makefil は main をチェックします。 .o まず、add.o、sub.o、mul.o、p.o が存在するかどうかを調べます。存在しない場合は、依存関係ファイルを生成するルールを検索します。

たとえば、main.o の依存関係が欠落している場合、Makefile は以下を調べて main.o を生成するルールがあるかどうかを確認します。ルール gcc main.c -o main.o で main.o を生成できることが判明すると、このルールを使用して main.o を生成し、最終目標の計算ツールを生成します。

プロセス全体は、依存関係を下方向に検索し、コマンドを上方向に実行して最終目標を生成することです。

ターゲットの更新:

a. ターゲットのすべての依存関係を確認します。依存関係が更新されている場合は、ターゲットを再生成します。

b . 対象ファイルが依存ファイルよりも新しい場合は、更新する必要があります。

Linuxのメイクファイルとは何ですか

たとえば、main.c が変更されると、main.o ターゲットが再コンパイルされ、main.o が更新されると、最終ターゲット計算ツールも再コンパイルされます。他のファイルの更新も同様に行われます。

6. コマンド実行

make:

このコマンドを使用して、所定の規則に従って対象ファイルを生成します。

Makefile ファイルの名前が Makefile または makefile ではない場合は、

-f オプションを追加する必要があります (例:

make -f Makefile_demo

##)

#きれいにする:

コンパイル プロセス中に生成された中間ファイル (.o ファイル) と最終ターゲット ファイルをクリアします。

clean という名前のファイルが現在のディレクトリに存在する場合、このコマンドは実行されません。

-->解決策: 疑似ターゲット宣言: .PHONY:clean

特殊記号:

-: を示しますこのコマンドの実行中にエラーが発生しても、後続のコマンドは引き続き実行されます。例:

-rm a.o build/

@: コマンドがエコーなしでのみ実行されることを示します。一般ルールが実行されると、実行ルールが端末に出力されますが、この記号を追加するとコマンドのみが実行され、実行ルールはエコーされなくなります。例:

@echo $(SOURCE)

7. 通常の変数

変数の定義と割り当て:

変数は次のとおりです。直接使用 定義は、次のように値を割り当てることで完了できます。

INCLUDE = ./include/

変数値:

囲みます。次のように括弧で囲み、ドル記号を追加します。

FOO = $(OBJ)

システムには変数が付属しています。

は通常、CC などの大文字です。 、PWD、CFLAGなど。

デフォルト値があるものとないものがあります。たとえば、一般的なものは次のとおりです。

CPPFLAGS: プリプロセッサに必要なオプション (例: -I

CFLAGS: コンパイル中に使用されるパラメータ –Wall –g -c

LDFLAGS ):リンク ライブラリで使用されるオプション -L -l

変数のデフォルト値は変更できます。たとえば、CC のデフォルト値は cc ですが、gcc に変更できます: CC =gcc

8. 自動変数

##一般的に使用される自動変数:##Makefile には多くの自動変数が用意されていますが、一般的に使用されるのは次の 3 つです。使用済み。これらの自動変数はルール内のコマンドでのみ使用でき、他の場所では使用できません。

$@ -->ルールのターゲット

$ルールの最初の依存関係条件

$^ -->ルールすべての依存関係

の条件 例:

app: main.c func1.c fun2.c

gcc $^ - o $@

ここで: $^ main.c func1.c fun2.c を表し、$

パターン ルール:

パターン ルールでは、ターゲットおよび依存関係の条件で % を使用して、ディレクトリ内の main.c、func1.c などの対応するファイルと一致します。 func2.c という 3 つのファイルがある場合、これら 3 つのファイルのコンパイルは 1 つのルールで完了できます:

%.o:%.c

$(CC) –c $

このパターン ルールの意味:

main.o は main.c によって生成され、

func1.o は func1.c によって生成され、

func2 .o は func2.c

によって生成されます。これはパターン ルールの役割であり、ディレクトリ内のすべてのファイルを一度に照合できます。

9. 関数

makefile には数多くの関数が用意されており、以下の 2 つの関数もよく使用されます。

makefile 内のすべての関数には戻り値

が必要であることに注意してください。次の例では、ディレクトリに main.c、func1.c、および func2.c という 3 つのファイルがあると仮定します。

wildcard:

は、指定されたディレクトリ内の指定されたタイプのファイルを検索するために使用されます。次のパラメータは、ディレクトリ ファイル タイプです。例:

src = $ (wildcard ./src/*.c)

この文の意味は次のとおりです。 ./src ディレクトリ内でサフィックス .c を持つすべてのファイルを検索し、それらを変数 src に割り当てます。

コマンドの実行が完了すると、src の値は main.c func1.c fun2.c になります。

patsubst:

次の例のような一致置換を使用して、src ディレクトリから .c で終わるすべてのファイルを検索し、それらを .o ファイルに置き換えます。 , そしてobjに代入します。

obj = $(patsubst %.c ,%.o ,$(src))

src 変数内の .c 接尾辞を持つすべてのファイルを .o に置き換えます。

コマンドの実行後、obj の値は main.o func1.o func2.o

特別に、すべての .o ファイルを obj ディレクトリに置きたい場合は、次のようにします。次の方法を使用します:

ob = $(patsubst ./src/%.c, ./obj/%.o, $(src))

関連する推奨事項: "

Linux ビデオ チュートリアル

以上がLinuxのメイクファイルとは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

CentosとUbuntuの違い CentosとUbuntuの違い Apr 14, 2025 pm 09:09 PM

Centosとubuntuの重要な違いは次のとおりです。起源(CentosはRed Hat、for Enterprises、UbuntuはDebianに由来します。個人用のDebianに由来します)、パッケージ管理(CentosはYumを使用し、安定性に焦点を当てます。チュートリアルとドキュメント)、使用(Centosはサーバーに偏っています。Ubuntuはサーバーやデスクトップに適しています)、その他の違いにはインストールのシンプルさが含まれます(Centos is Thin)

Centosをインストールする方法 Centosをインストールする方法 Apr 14, 2025 pm 09:03 PM

Centosのインストール手順:ISO画像をダウンロードし、起動可能なメディアを燃やします。起動してインストールソースを選択します。言語とキーボードのレイアウトを選択します。ネットワークを構成します。ハードディスクをパーティション化します。システムクロックを設定します。ルートユーザーを作成します。ソフトウェアパッケージを選択します。インストールを開始します。インストールが完了した後、ハードディスクから再起動して起動します。

Centosはメンテナンスを停止します2024 Centosはメンテナンスを停止します2024 Apr 14, 2025 pm 08:39 PM

Centosは、上流の分布であるRhel 8が閉鎖されたため、2024年に閉鎖されます。このシャットダウンはCentos 8システムに影響を与え、更新を継続し続けることができません。ユーザーは移行を計画する必要があり、提案されたオプションには、Centos Stream、Almalinux、およびRocky Linuxが含まれ、システムを安全で安定させます。

Dockerの原則の詳細な説明 Dockerの原則の詳細な説明 Apr 14, 2025 pm 11:57 PM

DockerはLinuxカーネル機能を使用して、効率的で孤立したアプリケーションランニング環境を提供します。その作業原則は次のとおりです。1。ミラーは、アプリケーションを実行するために必要なすべてを含む読み取り専用テンプレートとして使用されます。 2。ユニオンファイルシステム(UnionFS)は、違いを保存するだけで、スペースを節約し、高速化する複数のファイルシステムをスタックします。 3.デーモンはミラーとコンテナを管理し、クライアントはそれらをインタラクションに使用します。 4。名前空間とcgroupsは、コンテナの分離とリソースの制限を実装します。 5.複数のネットワークモードは、コンテナの相互接続をサポートします。これらのコア概念を理解することによってのみ、Dockerをよりよく利用できます。

メンテナンスを停止した後のCentosの選択 メンテナンスを停止した後のCentosの選択 Apr 14, 2025 pm 08:51 PM

Centosは廃止されました、代替品には次のものが含まれます。1。RockyLinux(最高の互換性)。 2。アルマリン(Centosと互換性); 3。Ubuntuサーバー(設定が必要); 4。RedHat Enterprise Linux(コマーシャルバージョン、有料ライセンス); 5。OracleLinux(CentosとRhelと互換性があります)。移行する場合、考慮事項は次のとおりです。互換性、可用性、サポート、コスト、およびコミュニティサポート。

Centosがメンテナンスを停止した後の対処方法 Centosがメンテナンスを停止した後の対処方法 Apr 14, 2025 pm 08:48 PM

CentOSが停止した後、ユーザーは次の手段を採用して対処できます。Almalinux、Rocky Linux、Centosストリームなどの互換性のある分布を選択します。商業分布に移行する:Red Hat Enterprise Linux、Oracle Linuxなど。 Centos 9ストリームへのアップグレード:ローリングディストリビューション、最新のテクノロジーを提供します。 Ubuntu、Debianなど、他のLinuxディストリビューションを選択します。コンテナ、仮想マシン、クラウドプラットフォームなどの他のオプションを評価します。

Dockerデスクトップの使用方法 Dockerデスクトップの使用方法 Apr 15, 2025 am 11:45 AM

Dockerデスクトップの使用方法は? Dockerデスクトップは、ローカルマシンでDockerコンテナを実行するためのツールです。使用する手順には次のものがあります。1。Dockerデスクトップをインストールします。 2。Dockerデスクトップを開始します。 3。Docker Imageを作成します(DockerFileを使用); 4. Docker画像をビルド(Docker Buildを使用); 5。Dockerコンテナを実行します(Docker Runを使用)。

VSCODEに必要なコンピューター構成 VSCODEに必要なコンピューター構成 Apr 15, 2025 pm 09:48 PM

VSコードシステムの要件:オペレーティングシステム:オペレーティングシステム:Windows 10以降、MACOS 10.12以上、Linux Distributionプロセッサ:最小1.6 GHz、推奨2.0 GHz以上のメモリ:最小512 MB、推奨4 GB以上のストレージスペース:最低250 MB以上:その他の要件を推奨:安定ネットワーク接続、XORG/WAYLAND(Linux)

See all articles