Eu li alguns tutoriais sobre Makefiles, mas para mim ainda não está claro o que o alvo "all" significa e o que ele faz.
Alguma ideia?
Uma construção, como o Makefile entende, consiste em muitos alvos. Por exemplo, para construir um projeto, você pode precisar
Se você implementou este fluxo de trabalho com makefile, você poderia fazer cada um dos destinos separadamente. Por exemplo, se você escreveu
make file1.o
ele apenas construiria esse arquivo, se necessário.
O nome de all
não está fixo. É apenas um nome convencional; all
target denota que se você invocá-lo, make irá construir tudo o que é necessário para fazer uma construção completa . Normalmente, é um destino fictício, que não cria nenhum arquivo, mas depende apenas dos outros arquivos. Para o exemplo acima, construir tudo o que é necessário é construir executáveis, os outros arquivos sendo puxados como dependências. Portanto, no makefile é assim:
all: executable1 executable2
all
target é geralmente o primeiro no makefile, já que se você apenas escrever make
na linha de comando, sem especificar o destino, ele construirá o primeiro destino. E você espera que seja all
.
all
geralmente também é um .PHONY
alvo. Saiba mais aqui .
O manual do GNU Make fornece uma definição clara para all
em sua lista de destinos padrão .
Se o autor do Makefile está seguindo essa convenção, o alvo all
deve:
make
deve fazer o mesmo que make all
.Para atingir 1 all
é normalmente definido como um .PHONY
alvo que depende do (s) executável (es) que formam todo o programa:
.PHONY : all
all : executable
Para atingir 2 all
deve ser o primeiro alvo definido no arquivo make ou ser atribuído como a meta padrão:
.DEFAULT_GOAL := all
Não tenho certeza se significa algo especial. É apenas uma convenção que você fornece uma regra 'todos' e geralmente ela é usada para listar todos os subalvos necessários para construir o projeto inteiro, daí o nome 'todos'. A única coisa especial sobre isso é que muitas vezes as pessoas irão colocá-lo como o primeiro destino no makefile, o que significa que apenas digitar 'make' sozinho fará a mesma coisa que 'make all'.
O destino "todos" é um exemplo de destino fictício - não há nada no disco chamado "todos". Isso significa que quando você faz um "make all", make sempre pensa que precisa construí-lo, e então executa todos os comandos para aquele alvo. Esses comandos serão tipicamente aqueles que constroem todos os produtos finais que o makefile conhece, mas podem fazer qualquer coisa.
Outros exemplos de alvos fictícios são "limpar" e "instalar", e eles funcionam da mesma maneira.
Se você ainda não leu, você deve ler o GNU Make Manual , que também é um excelente tutorial.