「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Makefile の理解 (C 言語の例)。

Makefile の理解 (C 言語の例)。

2024 年 7 月 31 日に公開
ブラウズ:972

Comprendre le Makefile (Exemple avec langage C).

Makefile は、プログラムのコンパイルを自動化するために make ツールによって使用されるファイルです。効果的な Makefile を作成するための標準的なルールとベスト プラクティスは次のとおりです:

メイクファイルの基本構造

  1. ターゲット: ビルドしたいもの (実行可能ファイルなど)。
  2. 前提条件: ターゲットをビルドするために必要なファイル (ソース ファイルなど)。
  3. ルール: ターゲットを作成するために実行するコマンド。

簡単な例

target: prerequisites
    command

標準ルール

  1. デフォルト ルール: Makefile の最初のターゲットは、デフォルトでビルドされるターゲットです。

  2. ソース ファイルをコンパイル中:

    • コンパイラとオプションに変数を使用します。
    • 例 :
   CC = gcc
   CFLAGS = -Wall -g
   SOURCES = main.c utils.c
   OBJECTS = $(SOURCES:.c=.o)
   TARGET = mon_programme

   $(TARGET): $(OBJECTS)
       $(CC) -o $@ $^

   %.o: %.c
       $(CC) $(CFLAGS) -c $



  1. Phonies: ファイルではないターゲットに .PHONY を使用します。
   .PHONY: clean
   clean:
       rm -f $(OBJECTS) $(TARGET)
  1. 変数: 変数を使用してパスとオプションの管理を簡素化します。
   CC = gcc
   CFLAGS = -Wall
  1. 依存関係管理: 暗黙のルールとパターンを使用して繰り返しを減らします。

  2. 自動依存関係: .o ファイルの依存関係を自動的に生成できます。

   -include $(OBJECTS:.o=.d)

完全な例

完全な Makefile の例は次のとおりです:

# Variables
CC = gcc
CFLAGS = -Wall -g
SOURCES = main.c utils.c
OBJECTS = $(SOURCES:.c=.o)
TARGET = mon_programme

# Règle par défaut
all: $(TARGET)

# Lien de l'exécutable
# $@ -> $(TARGET)
# $^ -> $(OBJECTS)
$(TARGET): $(OBJECTS)
    $(CC) -o $@ $^

# Compilation des fichiers .c en .o
# $ Premier element des pr
%.o: %.c
    $(CC) $(CFLAGS) -c $



良い習慣

  1. タブでインデント: ルール内のコマンドはスペースではなくタブでインデントする必要があります。

  2. コメント コード: コメントを使用して Makefile のセクションを説明します。

  3. グループ ファイル: プロジェクトに複数のファイルが含まれている場合は、それらをサブディレクトリに整理し、変数を使用してパスを管理します。

  4. 暗黙的なルールを使用する: make の組み込みルールを利用して、共通ルールの書き換えを回避します。

.PHONY を使用する理由

  • 競合の回避: ターゲットと同じ名前のファイルが存在する場合、make はターゲットが最新であると判断し、関連するコマンドを実行しません。 .PHONY はこれを回避します。

  • パフォーマンスの向上: 偽のターゲットは常に「to do」とみなされ、関連するコマンドの実行速度が向上する可能性があります。

コンパイルに %.o:%c を使用する理由

  • 効率: %.o:%c を使用すると、必要なものだけを再コンパイルする make の最適化の恩恵を受けることができます。

  • 実用的: 大規模なプロジェクトの場合は、%.o:%c の方が適しています。

結論

適切に構造化された Makefile により、プロジェクト管理が容易になり、コンパイル エラーが回避されます。これらのルールとベスト プラクティスに従うことで、効率的で保守しやすい Makefile を作成できます。

リリースステートメント この記事は次の場所に転載されています: https://dev.to/ashcript/comprendre-le-makefile-exemple-avec-le-langage-c-47n9 侵害がある場合は、[email protected] に連絡して削除してください。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3