私は現在、小さな単純な C プログラムを書いています。今のところ、私のMakefileは次のようなテキストで構成されています:
program_name:
clang -o program_name program_name.c
必要なのはこれだけですか?.o ファイルと .h ファイルの間の依存関係を確立する必要があるかどうかは、プロジェクトに必ずしも存在しない場合でも、確信が持てませんでした。
あなたは働きすぎです。Makefile を 2 行に簡略化する必要があります。
CC=clang
program_name: some.h
program_name.o
またはへの依存関係を指定する必要はありませんprogram_name.c
。これらは暗示されているためです。デフォルトのルールを使用しているため、ルールを明示的に指定する必要もありません。ただし、ヘッダー ファイルへの依存関係については、詳しく説明する必要があります。
私は自分でGNU Makeを使用しています。何を使用しているのかわかりません。GNU Make については、以下を参照してください。
必要なのはこれだけですか?
いいえ。
.o ファイルと .h ファイルの間の依存関係を確立する必要があるかどうかわかりませんでした
一般に、特にカスタム データ型を使用している場合はそうする必要があります (そうでない場合でも、プラットフォームの ABI/呼び出し規約がブラック マジックで構成されている場合、関数シグネチャの変更によってプログラム全体が壊れる可能性があります)。
私が通常使用しているテンプレートは次のとおりです。
CC = gcc
LD = $(CC)
CFLAGS = -c -Wall
LDFLAGS = -lwhatever -lfoo -lbar
TARGET = myprog
OBJECTS = $(patsubst %.c, %.o, $(wildcard *.c))
all: $(TARGET)
$(TARGET): $(OBJECTS)
$(LD) $(LDFLAGS) -o $@ $^
%.c: %.h
%.o: %.c
$(CC) $(CFLAGS) -o $@ $^