Я новичок в GNU make, и я читаю «Управление проектами с помощью GNU make - O'Reilly».Статическая библиотека встроенного правила в GNU make
В главе 2, в разделе «Библиотека зданий», в книге представлены два способа обновления архивной библиотеки (статические - .a).
Первый:
libname.a: preq1.o preq2.o
$(AR) $(ARFLGS) [email protected] $?
Второй:
libname.a(preq1.o): preq1.o
$(AR) $(ARFLGS) [email protected] $<
Как libName.a (preq1.o) увеличить производительность обновления статической библиотеки?
Также я предполагаю, что второй формат может быть накладным, если в библиотеке много членов (сотни или тысячи), это правильно?
Это следующее встроенное правило?
(%): %
# commands to execute (built-in):
$(AR) $(ARFLAGS) [email protected] $<
Заранее спасибо
В первом примере весь архивный файл каждый раз воссоздается с нуля. Во втором примере архив сохраняется, и только один файл объекта preq1.o заменяется новой копией. В любом архиве, который вы, вероятно, найдете и с любой доступной сегодня системой, вряд ли вы сможете сказать разницу, если в вашем архиве не содержится сотни или более объектов. Когда была написана статья, все было намного медленнее, и эти повышения эффективности сделали большую разницу. – MadScientist
@MadScientist: вы должны представить это как ответ – wizurd
@MadScientist Сначала спасибо за ваш ответ, но у меня есть комментарий в первом примере, в архиве будут обновляться устаревшие файлы, потому что я передаю «$?» до "$ (AR)". Итак, я думаю, что оба обновляют только устаревших членов, но в книге говорится, что вторая лучшая? –