我有一个旧项目,我正在尝试为其创建多个二进制文件,目录中的每个对象一个。我一生都无法弄清楚如何以这种方式处理多个目标。以下作品,但在我看来,我应该能够有一个规则将它们全部联系起来,可以这么说,
# 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)
我确实开始工作的一种方法是像这样从目标名称中去除后缀,并一步编译和链接,但感觉有点hackish,
%.o: %.c
$(CC) $(CFLAGS) $(CPPFLAGS) $< ../lib/libfoo.a -lm -o $(*F)
免责声明:我鄙视制作
更新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 $@