扩展GNU使隐式规则

时间:2017-04-28 01:54:34

标签: c makefile gnu-make upx

我使用GNU make implicit rule将我的二进制文件链接在一起,如下所示:

foo : foo.o bar.o

但是,我还希望能够在之后使用UPX(通过调用foo)编译生成的二进制文件upx ultra-brute foo。当然,我可以这样做:

foo : foo.o bar.o
    $(CC) $(LDFLAGS) $^ $(LDLIBS) -o $@
    upx --ultra-brute $@

然而,这基本上迫使我重复隐式规则,而我真正想做的只是在它已经做了之后再调用upx ultra-brute。有没有办法得到我想要的东西,而不必手动将隐式规则写入配方?

1 个答案:

答案 0 :(得分:1)

upx的调用就地修改了文件,这意味着如果它失败或被中断,make将不知道再次运行它。通常,您应该避免编写类似的Makefile规则。

如果我们把它分开,那就变得容易了:

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