Makefile通用二进制文件编译

Makefile通用二进制文件编译,makefile,Makefile,我有一组共享相同Makefile规则模式的源文件: bin1: bin1.o libfoo.a $(LDENV) $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ bin2: bin2.o libfoo.a $(LDENV) $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ bin3: bin3.o libfoo.a $(LDENV) $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ ... 现在,

我有一组共享相同Makefile规则模式的源文件:

bin1: bin1.o libfoo.a
    $(LDENV) $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^

bin2: bin2.o libfoo.a
    $(LDENV) $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^

bin3: bin3.o libfoo.a
    $(LDENV) $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^

...
现在,我如何重构它以避免重复相同的规则?如果将文件扩展名添加到二进制文件中,这很容易:

%.out: %.o libfoo.a
    $(LDENV) $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^
但是,不使用一个也可以做到这一点吗

您可以使用:

这样做会更干净,而且您可以确保
%
只匹配
bin1
bin2
bin3
目标(我想这是您想要的)。

您说如果添加了文件扩展名,这很容易,然后询问是否可以不使用扩展名就执行相同的操作。为什么不使用模式规则创建一个makefile而不使用扩展名,然后看看它是否有效?这比写这个问题所花的时间要少(提示:是的,它会起作用)。
bin1 bin2 bin3: %: %.o libfoo.a
    $(LDENV) $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^