Компиляции универсальных двоичных файлов Makefile

#makefile

#makefile

Вопрос:

У меня есть набор исходных файлов, которые используют один и тот же шаблон правил Makefile:

 bin1: bin1.o libfoo.a
    $(LDENV) $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^

bin2: bin2.o libfoo.a
    $(LDENV) $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^

bin3: bin3.o libfoo.a
    $(LDENV) $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^

...
  

Теперь, как я могу реорганизовать это, чтобы избежать повторения одного и того же правила снова и снова? Это легко, если к двоичным файлам добавлено расширение файла:

 %.out: %.o libfoo.a
    $(LDENV) $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^
  

Но возможно ли сделать то же самое без его использования?

Комментарии:

1. Вы сказали, что это легко, если добавить расширение файла , затем спросили , можно ли сделать то же самое без его использования . Почему бы вам просто не создать makefile с использованием шаблонного правила без использования расширения и посмотреть, работает ли это? Это заняло бы меньше времени, чем потребовалось для написания этого вопроса SO (подсказка: да, это сработает).

Ответ №1:

Вы можете использовать статические правила шаблонов:

 bin1 bin2 bin3: %: %.o libfoo.a
    $(LDENV) $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^
  

Таким образом, это чище, и вы уверены, что % единственное совпадение bin1 bin2 и bin3 цели (я думаю, это то, что вы хотите).