Расширение GNU создает неявное правило
Я использую неявное правило GNU для связывания моего двоичного файла следующим образом:
foo : foo.o bar.o
Тем не менее, я также хочу быть в состоянии скомпилировать полученный бинарный файл foo
с UPX (вызывая upx ultra-brute foo
) на это потом. Я могу, конечно, сделать что-то вроде этого:
foo : foo.o bar.o
$(CC) $(LDFLAGS) $^ $(LDLIBS) -o $@
upx --ultra-brute $@
Тем не менее, это в основном заставляет меня повторять неявное правило, в то время как все, что я действительно хочу сделать, это просто вызвать upx ultra-brute
после того, что он уже делает в любом случае. Есть ли способ получить то, что я хочу, без необходимости вручную вводить неявное правило в рецепт?
1 ответ
Что вызов upx
изменяет файл на месте, что означает, что в случае его сбоя или прерывания, make
не знаю, чтобы запустить его снова. В общем, вы должны избегать написания правил Makefile.
Если мы разделим это, тогда это станет легко:
foo.fat: foo.o bar.o
foo: foo.fat
upx --ultra-brute -o $@ $<