Aqui está um resumo dos recursos do GNU make, a título de comparação com outras versões do make e em reconhecimento a elas. Como referência, tomamos os recursos do make dos sistemas 4.2 BSD como ponto de partida. Se você se preocupa em escrever makefiles portáveis, não deve usar os recursos listados aqui, nem os apresentados no capítulo Incompatibilidades e recursos não implementados.
Muitos recursos vêm da versão do make do System V.
VPATH e seu significado especial. Veja a seção Buscar diretórios para pré-requisitos (prerequisites). Esse recurso existe no make do System V, mas não é documentado. Ele é documentado no make do 4.3 BSD (que afirma imitar o recurso VPATH do System V).
MAKEFLAGS a invocações recursivas do make. Veja a seção Comunicar opções a um sub-make.
$% recebe o nome do membro em uma referência a arquivo de arquivo (archive). Veja a seção Variáveis automáticas.
$@, $*, $<, $% e $? têm formas correspondentes como $(@F) e $(@D). Generalizamos isso para $^ como uma extensão óbvia. Veja a seção Variáveis automáticas.
make do System V, essas opções de fato fazem algo.
make por meio da variável MAKE, mesmo que «-n», «-q» ou «-t» seja especificado. Veja a seção Uso recursivo do make.
make, porque o recurso geral de encadeamento de regras (veja Cadeias de regras implícitas) faz com que uma única regra de padrão para instalar membros em um arquivo de arquivo (veja Regra implícita para alvos de membro de arquivo) seja suficiente.
Os recursos a seguir foram inspirados em várias outras versões do make. Em alguns casos, não está claro exatamente quais versões inspiraram quais outras.
make. Não temos certeza de quem o inventou primeiro, mas se espalhou bastante. Veja a seção Definir e redefinir regras de padrão.
make para o AT&T Eighth Edition Research Unix e, mais tarde, por Andrew Hume, da AT&T Bell Labs, em seu programa mk (onde ele o chama de “fecho transitivo (transitive closure)”). Não sabemos ao certo se obtivemos isso de algum deles ou se o concebemos por conta própria na mesma época. Veja a seção Cadeias de regras implícitas.
$^, que contém uma lista de todos os pré-requisitos do alvo atual. Não fomos nós que a inventamos, mas não fazemos ideia de quem o fez. Veja a seção Variáveis automáticas. A variável automática $+ é uma simples extensão de $^.
make) foi (até onde sabemos) inventado por Andrew Hume no mk. Veja a seção Em vez de executar receitas.
make e de programas semelhantes, embora não nas implementações do System V ou do BSD. Veja a seção Execução de receitas.
make pela função patsubst antes de a sintaxe alternativa ser implementada para compatibilidade com o SunOS 4. Não está totalmente claro quem inspirou quem, já que o GNU make tinha patsubst antes de o SunOS 4 ser lançado.
make do SunOS 4. Veja a seção Acrescentar mais texto a variáveis.
make do SunOS 4. Veja a seção Membros de arquivo de arquivo como alvos.
-include, que inclui makefiles sem gerar erro para arquivos inexistentes, vem do make do SunOS 4. (Mas observe que o make do SunOS 4 não permite especificar vários makefiles em uma única diretiva -include.) O mesmo recurso aparece com o nome sinclude no make do SGI e talvez em outros.
!= existe em muitas versões BSD do make e foi implementado aqui propositadamente para se comportar de forma idêntica a essas implementações.
make.
Os recursos restantes são invenções novas do GNU make:
make.
MAKE, às invocações recursivas do make. Veja a seção Uso recursivo do make.
define. Veja a seção Definir variáveis de múltiplas linhas.
.PHONY.
Andrew Hume, da AT&T Bell Labs, implementou um recurso semelhante com uma sintaxe diferente em seu programa mk. Isso parece ser um caso de descoberta paralela. Veja a seção Alvos falsos (phony).
Esse recurso foi implementado inúmeras vezes em várias versões do make; parece uma extensão natural derivada dos recursos do pré-processador C e de linguagens de macro semelhantes, e não um conceito revolucionário. Veja a seção Partes condicionais dos Makefiles.
MAKEFILES.
make, eles devem começar com «.» e não podem conter caracteres «/».
make usando a variável MAKELEVEL. Veja a seção Uso recursivo do make.
MAKECMDGOALS, quaisquer metas (goals) dadas na linha de comando. Veja a seção Argumentos para especificar as metas.
vpath seletiva. Veja a seção Buscar diretórios para pré-requisitos.
make do System V tem uma forma muito, muito limitada dessa funcionalidade, na medida em que faz o checkout de arquivos SCCS dos makefiles.
make. Veja a seção Carregar objetos dinâmicos.