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.
CC = gcc
CFLAGS = -Wall -Wextra -Werror
SOURCES := $(wildcard *.c)
TARGETS := $(patsubst %.c, %, $(SOURCES))
all: $(TARGETS)
%: %.c
$(CC) $(CFLAGS) $< -o $@
.PHONY: clean
clean:
rm -f $(TARGETS)
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.SOURCES
é uma lista de todos os arquivos de origem, usando o curinga*.c
para localizar todos os arquivos que terminam no diretório atual..c
TARGETS
é uma lista de todos os arquivos executáveis, usando a função patsubst para substituir caminhos de arquivos de origem por caminhos de arquivos executáveis (com extensões de arquivo removidas).all: $(TARGETS)
Indica que tudo depende de todos os arquivos executáveis, e todos os arquivos executáveis podem ser gerados digitando na linha de comando.$ make
%: %.c
Indica uma regra,.c
compila um arquivo em um arquivo executável correspondente e o armazena em um arquivo com o mesmo nome do arquivo de origem..PHONY: clean
Indica que clean é um pseudo-alvo, não um arquivo real, e$ make clean
todos os arquivos executáveis podem ser excluídos digitando na linha de comando.