BSD make e GNU make sono entrambi sostituzioni gratuite per la marca originale AT & T. La principale differenza è avere una sintassi diversa per le funzionalità avanzate. Ecco come mettere l'output di un comando di shell in una variabile in BSD marca:
# BSD make
TODAY != date +%Y-%m-%d
E in GNU make:
# GNU make
TODAY = $(shell date +%Y-%m-%d)
Non appena qualcuno scrive $(shell ...)
in un Makefile, si requries GNU rendere. A causa della diversa sintassi, alcuni pacchetti richiedono GNU make per la build, e alcuni richiedono BSD make.
BSD make ha iniziato la sua vita come pmake, abbreviazione di make parallelo. Il suo autore, Adam de Boor, ha descritto PMake in PMake -- A Tutorial. Il merito era la nuova capacità di eseguire lavori in parallelo, come in make -j 3
. Questa modalità parallela ha rotto la compatibilità eseguendo tutti i comandi per ciascun target in una singola shell, non in una shell per riga. GNU make ha una modalità parallela, anche -j
, che mantiene una shell per riga. NetBSD make(1) ora ha make -B -j 3
per eseguire la modalità parallela con una shell per riga. OpenBSD make(1) ora esegue sempre la modalità parallela con una shell per linea.
4.3BSD-Reno incluso PMake come make
e bsd. *. Mk include i file. Questi includono i file sono la migliore caratteristica del marchio BSD.src/bin/sed/Makefile in 4.3BSD-Tahoe (la versione precedente a 4.3BSD-Reno) definisce diversi obiettivi come clean, depend, install e così via. src/usr.bin/sed/Makefile in 4.3BSD-Reno ha solo quattro righe non vuote:
# @(#)Makefile 4.6 (Berkeley) 5/11/90
PROG= sed
SRCS= sed0.c sed1.c
.include <bsd.prog.mk>
Qui bsd.prog.mk imposta automaticamente OBJS
a sed0.o sed1.o
, definisce un obiettivo sed per LINK sed da quegli oggetti, definisce altri obiettivi come pulito, dipenderà, installare e fa sì che make install
installi sia sed che la sua pagina manuale sed.1. C'è anche bsd.lib.mk per la costruzione di librerie.
Quando si utilizza bsd. *. Mk, ciascun Makefile può creare solo un programma o una libreria. Per crearne un altro, ci deve essere un secondo Makefile in un'altra directory. Quindi, src/usr.sbin/smtpd/ in OpenBSD ha sei sottodirectory, dove ogni sottodirectory contiene solo un Makefile, perché smtpd crea sei programmi.
È anche raro usare bsd. *. Mk per costruire qualsiasi cosa eccetto BSD stesso. Molti pacchetti portabili da sviluppatori BSD, come OpenSSH (da OpenBSD) o mksh (da MirBSD), non richiedono BSD make e non usano file bsd. *. Mk.
Il file bsd.port.mk è al centro di FreeBSD Ports, il sistema che crea pacchetti software per FreeBSD. (NetBSD pkgsrc chiama questo file bsd.pkg.mk.) Questo sistema ha rivali in altri linguaggi di scripting. Homebrew usa Ruby. MacPorts usa Tcl.
In passato, la marca GNU era più portatile della marca BSD. Poiché BSD fa parte di BSD, è raro trovare BSD make su altri sistemi. Ora c'è portable bmake per altri sistemi. Questa è una versione portatile di NetBSD make. L'uso più comune di bmake portabile è eseguire pkgsrc su sistemi non NetBSD. Corro pkgsrc su OS X, con bmake avviato da pkgsrc.
gmake 4.x ha aggiunto il supporto per la sintassi '! ='. –