BSD make и GNU make являются бесплатными заменами оригинальной марки AT & T. Основное различие заключается в различном синтаксисе для расширенных функций. Вот как поместить вывод команды оболочки в переменную в BSD make:
# BSD make
TODAY != date +%Y-%m-%d
А в GNU делают:
# GNU make
TODAY = $(shell date +%Y-%m-%d)
Как только кто-то пишет $(shell ...)
в Makefile, он требует GNU make. Из-за разного синтаксиса некоторые пакеты требуют сборки GNU для сборки, а некоторые требуют BSD make.
BSD make начал свою жизнь как PMake , сокращение от параллельного создания . Его автор, Адам де Бур, описал PMake в PMake - A Tutorial . Его достоинством была новая способность выполнять задания параллельно, как в make -j 3
. Этот параллельный режим нарушил совместимость, выполнив все команды для каждой цели в одной оболочке, а не в одной оболочке на строку. GNU make имеет параллельный режим, также -j
, который поддерживает одну оболочку на строку. NetBSD make (1) теперь имеет make -B -j 3
для параллельного режима с одной оболочкой на строку. OpenBSD make (1) теперь всегда выполняет параллельный режим с одной оболочкой на строку.
4.3BSD-Reno включает PMake как make
и файлы bsd. *. Mk. Эти включаемые файлы - лучшая особенность марки BSD. src / bin / sed / Makefile в 4.3BSD-Tahoe (выпуск до 4.3BSD-Reno) определяет несколько целей, таких как clean, зависимость, установка и так далее. src / usr.bin / sed / Makefile в 4.3BSD-Reno имеет только четыре непустые строки:
# @(#)Makefile 4.6 (Berkeley) 5/11/90
PROG= sed
SRCS= sed0.c sed1.c
.include <bsd.prog.mk>
Здесь bsd.prog.mk автоматически устанавливает OBJS
в sed0.o sed1.o
, определяет цель sed для связи sed с этими объектами, определяет другие цели, такие как clean, зависимость, установка и вызывает make install
установить как sed, так и его страницу руководства sed.1. Существует также bsd.lib.mk для сборки библиотек.
При использовании bsd. *. Mk каждый Makefile может собрать только одну программу или библиотеку. Чтобы создать еще один, в другом каталоге должен быть второй Makefile. Так что src / usr.sbin / smtpd / в OpenBSD имеет шесть подкаталогов, где каждый подкаталог содержит только Makefile, поскольку smtpd создает шесть программ.
Также редко можно использовать bsd. *. Mk для сборки чего-либо, кроме самого BSD. Многие переносимые пакеты от разработчиков BSD, такие как OpenSSH (из OpenBSD) или mksh (из MirBSD), не требуют создания BSD и не используют файлы bsd. *. Mk.
Файл bsd.port.mk находится в центре портов FreeBSD , системы, которая создает пакеты программного обеспечения для FreeBSD. ( NetBSD pkgsrc называет этот файл bsd.pkg.mk .) Эта система имеет конкурентов на других языках сценариев. Доморощенный использует Ruby. MacPorts использует Tcl.
Раньше GNU make была более переносимой, чем BSD. Поскольку make BSD был частью BSD, редко можно найти make BSD в других системах. Теперь есть портативный bmake для других систем. Это портативная версия NetBSD. Наиболее распространенное использование переносимого bmake - запуск pkgsrc в системах, отличных от NetBSD. Я запускаю pkgsrc в OS X, а bmake загружается pkgsrc.