Makefile を作成して、各ディレクトリ内の .c ファイルをそれぞれの .o ファイルにコンパイルします。

Makefile を作成するプロセスは次のとおりです。

  1. 変数の定義: コンパイラやコンパイル オプションなどの変数を定義します。
  2. ターゲットファイルの定義: ターゲットファイル名を定義します。
  3. ソース ファイルの定義: すべてのソース ファイルを定義します。
  4. ルールの定義: 各ソース ファイルをオブジェクト ファイルにコンパイルするためのルールを定義します。
  5. 擬似ターゲットの定義: オブジェクト ファイルおよびその他の中間ファイルをクリーンアップする擬似ターゲットを定義します。

以下は Makefile の例です。各ディレクトリに で.c終わるソース ファイルがあり、対応するファイルにコンパイルする必要があると想定しています.o

CC = gcc
CFLAGS = -Wall -Wextra -Werror
SRCDIR = src
OBJDIR = obj
TARGET = myapp

SOURCES := $(wildcard $(SRCDIR)/**/*.c)
OBJECTS := $(patsubst $(SRCDIR)/%.c, $(OBJDIR)/%.o, $(SOURCES))

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

$(OBJDIR)/%.o: $(SRCDIR)/%.c
	$(CC) $(CFLAGS) -c $< -o $@

.PHONY: clean
clean:
	rm -rf $(OBJDIR)/*.o $(TARGET)
  • CC 使用するコンパイラを定義します。ここでは gcc が使用されます。
  • CFLAGS コンパイル オプションが定義され、いくつかの警告オプションがここで有効になります。
  • SRCDIR ソースファイルが配置されるディレクトリを定義します。
  • OBJDIR 中間ファイルとオブジェクトファイルが配置されるディレクトリを定義します。
  • TARGET 最終的に生成される実行可能ファイル名を定義します。
  • SOURCES すべてのソース ファイルのリストです。ワイルドカードを使用してサブディレクトリ内のソース ファイルを再帰的に検索します。 **
  • OBJECTS すべてのオブジェクト ファイルのリストです。patsubst 関数を使用してソース ファイル パスをオブジェクト ファイル パスに置き換えます。
  • $(TARGET): $(OBJECTS) ターゲット ファイルがすべての中間ファイルに依存しており、$ make myappコマンド ラインに入力することで最終的な実行可能ファイルを生成できることを示します。
  • $(OBJDIR)/%.o: $(SRCDIR)/%.cルールを示し、ディレクトリ内のすべてのファイルを対応するファイルにコンパイルしディレクトリに保存します。 $(SRCDIR) .c .o$(OBJDIR)
  • .PHONY: clean clean が実際のファイルではなく疑似ターゲットであり、$ make cleanコマンド ラインに入力することですべての中間ファイルとターゲット ファイルを削除できることを示します。

おすすめ

転載: blog.csdn.net/FLM19990626/article/details/130983212