ホームページ >バックエンド開発 >C++ >Makefile の理解 (C 言語の例)。

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

王林
王林オリジナル
2024-07-17 01:18:02947ブラウズ

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 $< -o $@
  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 $< -o $@

# Déclaration des cibles phony
.PHONY: all clean fclean re

# Nettoyage des fichiers objets
clean:
    rm -f $(OBJECTS)

# Nettoyage complet (fichiers objets et exécutable)
fclean: clean
    rm -f $(TARGET)

# Refaire la compilation
re: fclean all

良い実践方法

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

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

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

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

.PHONY を使用する理由

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

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

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

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

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

結論

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

以上がMakefile の理解 (C 言語の例)。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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