扩展 GNU make 隐式规则
Extending a GNU make implicit rule
我正在使用 GNU make implicit rule 将我的二进制文件链接在一起,如下所示:
foo : foo.o bar.o
但是,我还希望能够在之后用 UPX(通过调用 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 $@ $<
我正在使用 GNU make implicit rule 将我的二进制文件链接在一起,如下所示:
foo : foo.o bar.o
但是,我还希望能够在之后用 UPX(通过调用 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 $@ $<