0Pricing
C Academy · Aula

Makefiles

Automatize a compilação.

Makefiles é uma aula grátis de C Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C Academy inclui 4 aulas no total.

Por que usar Makefiles

Digitar comandos gcc manualmente se torna rapidamente inviável. O make lê um Makefile que descreve como compilar seu projeto e executa somente os comandos necessários.

Seu principal recurso: ele recompila um arquivo somente quando suas entradas são mais recentes que sua saída, economizando muito tempo de compilação.

Anatomia de uma regra

Uma regra tem três partes: um alvo, seus pré-requisitos e uma receita.

A linha da receita MUST começar com um caractere TAB real, e não com espaços. Esse é o erro mais comum em Makefiles.

target: prerequisite1 prerequisite2
	<TAB>command to build target

Um primeiro Makefile

Isto compila app a partir de dois arquivos de código-fonte. Executar make sem argumentos compila o primeiro alvo.

Se nenhum dos arquivos de código-fonte tiver sido alterado desde a última compilação, make exibe 'up to date' e não faz nada.

app: main.c math_utils.c
	gcc main.c math_utils.c -o app

Regras de compilação separada

Compilar cada objeto separadamente significa que uma alteração em um arquivo recompila somente esse arquivo.

make segue o grafo de dependências: altere main.c e somente main.o, além da vinculação final, será executado novamente.

app: main.o math_utils.o
	gcc main.o math_utils.o -o app

main.o: main.c math_utils.h
	gcc -c main.c

math_utils.o: math_utils.c math_utils.h
	gcc -c math_utils.c

Variáveis

As variáveis eliminam repetições. Defina-as no início e expanda-as com $(NAME).

Assim, alterar o compilador ou as opções passa a ser feito em um único lugar.

CC = gcc
CFLAGS = -Wall -Wextra -g

app: main.o math_utils.o
	$(CC) main.o math_utils.o -o app

Variáveis automáticas

O make fornece abreviações dentro das receitas:

  • $@ — o nome do alvo
  • $^ — todos os pré-requisitos
  • $< — o primeiro pré-requisito

Elas mantêm as receitas curtas e corretas.

app: main.o math_utils.o
	$(CC) $^ -o $@

main.o: main.c
	$(CC) $(CFLAGS) -c $< -o $@

Regras de padrão

Uma única regra de padrão compila cada .c para seu .o, para que você não precise escrever uma regra para cada arquivo.

% corresponde a qualquer parte variável do nome; combinado com $< e $@, torna a regra totalmente genérica.

%.o: %.c
	$(CC) $(CFLAGS) -c $< -o $@

Alvos fictícios

Alvos como clean não produzem um arquivo com esse nome. Declare-os como .PHONY para que make sempre os execute, mesmo que exista um arquivo chamado 'clean'.

clean remove os artefatos da compilação para forçar uma compilação limpa.

.PHONY: clean
clean:
	rm -f *.o app

Um Makefile completo

Juntando tudo: variáveis, uma regra de padrão, uma regra de vinculação e um alvo fictício de limpeza.

Isso se adapta a muitos arquivos sem edições específicas para cada arquivo.

CC = gcc
CFLAGS = -Wall -Wextra -g
OBJS = main.o math_utils.o

app: $(OBJS)
	$(CC) $^ -o $@

%.o: %.c
	$(CC) $(CFLAGS) -c $< -o $@

.PHONY: clean
clean:
	rm -f $(OBJS) app

Como o make decide

make compara marcas de tempo. Um alvo é recompilado se algum pré-requisito tiver um horário de modificação mais recente ou se o alvo não existir.

É por isso que listar as dependências dos cabeçalhos é importante: edite um cabeçalho e todos os objetos dependentes serão recompilados corretamente.

Vários alvos e padrões

O primeiro alvo de um Makefile é o padrão e é executado quando você digita apenas make. Por convenção, ele se chama all.

Você também pode compilar um alvo específico pelo nome, como make clean ou make test, dando a um único Makefile vários pontos de entrada úteis.

.PHONY: all
all: app

test: app
	./app --selftest

Verificação rápida

Diagnostique um erro clássico de Makefile.

Recapitulação

Agora você já consegue automatizar compilações com make:

  • As regras têm alvo, pré-requisitos e uma receita indentada com TAB
  • Variáveis e variáveis automáticas ($@ $^ $<) reduzem repetições
  • Regras de padrão (%.o: %.c) tratam genericamente todos os arquivos
  • .PHONY marca alvos que não são arquivos, como clean
  • make recompila apenas o que está desatualizado, com base nas marcas de tempo

A seguir: compilando bibliotecas estáticas e compartilhadas.

Perguntas Frequentes

A aula “Makefiles” é grátis?

Sim — o texto completo de “Makefiles” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C Academy, atualize para CoddyKit PRO. O curso de C Academy inclui 4 aulas no total.

O que vou aprender em “Makefiles”?

Automatize a compilação. Você pratica C Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar C Academy?

Nenhuma experiência prévia é necessária. C Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.

Quanto tempo leva a aula “Makefiles”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de C Academy?

Sim. Cada aula de C Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Compilação condicional
  2. Projetos com vários arquivos
  3. Makefiles
  4. Bibliotecas estáticas e compartilhadas
← Voltar para C Academy