Расширение 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 $@ $<
Другие вопросы по тегам