C 扩展GNU make隐式规则

C 扩展GNU make隐式规则,c,makefile,gnu-make,upx,C,Makefile,Gnu Make,Upx,我使用GNU make链接我的二进制文件,如下所示: foo : foo.o bar.o 然而,我也希望能够通过调用upx ultra brute foo来编译生成的二进制foo。当然,我可以这样做: foo : foo.o bar.o $(CC) $(LDFLAGS) $^ $(LDLIBS) -o $@ upx --ultra-brute $@ 然而,这基本上迫使我重复隐式规则,而我真正想做的只是在它已经做了什么之后调用upx ultra brute。有没有一种方法可以得

我使用GNU make链接我的二进制文件,如下所示:

foo : foo.o bar.o
然而,我也希望能够通过调用upx ultra brute foo来编译生成的二进制foo。当然,我可以这样做:

foo : foo.o bar.o
    $(CC) $(LDFLAGS) $^ $(LDLIBS) -o $@
    upx --ultra-brute $@
然而,这基本上迫使我重复隐式规则,而我真正想做的只是在它已经做了什么之后调用upx ultra brute。有没有一种方法可以得到我想要的,而基本上不必手动将隐式规则写入配方?

调用upx会修改文件,这意味着如果文件失败或被中断,make将不知道再次运行它。一般来说,您应该避免编写这样的Makefile规则

如果我们将其拆分,那么就很容易了:

foo.fat: foo.o bar.o
foo: foo.fat
    upx --ultra-brute -o $@ $<

只有当有一个名为foo.fat.o的先决条件可供隐式规则触发时,这才有效。然而,我不介意以这种方式命名我的测试,所以它对我来说是有效的。