O processo de escrever um Makefile é o seguinte:
- Definir variáveis: defina variáveis como compilador e opções de compilação.
- Definir arquivo de destino: Defina o nome do arquivo de destino.
- Definir arquivos de origem: Defina todos os arquivos de origem.
- Definir regras: Defina as regras para compilar cada arquivo de origem em um arquivo objeto.
- Definir pseudo-destino: Define um pseudo-destino que limpa arquivos objeto e outros arquivos intermediários.
A seguir está um exemplo de Makefile, assumindo que cada diretório tem um .c
arquivo fonte terminando com que precisa ser compilado no arquivo executável correspondente:
CC = gcc
CFLAGS = -Wall -Wextra -Werror
SRCDIRS = src1 src2 src3
TARGETS := $(patsubst %, %/target, $(SRCDIRS))
all: $(TARGETS)
%/target: %/*.c
$(CC) $(CFLAGS) $^ -o $@
.PHONY: clean
clean:
find . -name target -type f -delete
CC
Define o compilador usado, gcc é usado aqui.CFLAGS
As opções de compilação são definidas e algumas opções de aviso são habilitadas aqui.SRCDIRS
Define o diretório onde residem todos os arquivos de origem.TARGETS
é uma lista de todos os arquivos executáveis, usando a função patsubst para substituir o caminho do arquivo de origem pelo caminho do arquivo executável.all: $(TARGETS)
Indica que tudo depende de todos os arquivos executáveis, e$ make
todos os arquivos executáveis podem ser gerados digitando na linha de comando.%/target: %/*.c
Indica uma regra, compila todos os arquivos de um diretório.c
nos arquivos executáveis correspondentes e os armazena em umtarget
arquivo nomeado no diretório..PHONY: clean
Indica que clean é um pseudo-alvo, não um arquivo real, e todos os arquivos executáveis podem ser excluídos digitando na linha de comando. onde o comando é usado para localizar o arquivo nomeado e excluí-lo.$ make clean
find
target