ディレクトリ内のオブジェクトごとに 1 つずつ、複数のバイナリを作成しようとしている古いプロジェクトがあります。この方法で複数のターゲットを処理する方法を理解することはできません。以下は機能しますが、いわば、それらすべてをリンクするための1つのルールを持つことができるはずです。
# compile objects, no problem
%.o: %.c
$(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@
bin: bin.o
$(CC) -o $@ $< ../lib/libfoo.a -lm $(ARCH)
bar: bar.o
$(CC) -o $@ $< ../lib/libfoo.a -lm $(ARCH)
私が取り組んだアプローチの 1 つは、このようにターゲット名からサフィックスを取り除き、コンパイルとリンクを 1 つのステップで行うことですが、少しハックな感じがします。
%.o: %.c
$(CC) $(CFLAGS) $(CPPFLAGS) $< ../lib/libfoo.a -lm -o $(*F)
免責事項:私はmakeを軽蔑します
更新1:これが私が最終的に得たものです
EXECS = bin bar ...
all: $(EXECS)
%: %.c
@echo "Building $@ from $<"
$(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@.o
$(CC) $(CFLAGS) $(CPPFLAGS) $@.o ../lib/libfoo.a -lm -o $@