Eu uso o make faz pouco menos de 2 meses e a seguinte estrutura me é bem util e prática para 98% das coisas que faço. Dependendo do projeto, eu apenas adiciono algumas rules a mais.
makefile
CC = gcc # Nome do compilador SRC = main.c # Nomes dos arquivos .c, separados por espaço OBJ = ${SRC:.c=.o} # Para cada nome em SRC, troca .c por .o WARNINGS = -Wall -Wextra -Werror -pedantic # Avisos de compilação DEBUG = -ggdb # Informação de debug formato GDB FLAGS = -std=c99 ${DEBUG} ${WARNINGS} all: main # Rule padrão main: obj ${CC} -o $@ ${OBJ} # $@ chama o nome da rule. Nesse caso main obj: ${SRC} ${CC} -c ${FLAGS} ${SRC} clean: rm -rf *.o main .PHONY: all clean obj # Essas rules não são nomes de arquivos Download: makefile