____                         _                       
          / ___| _   _   __ _  _ __  __| |  __ _                
         | |  _ | | | | / _` || '__|/ _` | / _` |               
         | |_| || |_| || (_| || |  | (_| || (_| |               
          \____| \__,_| \__,_||_|   \__,_| \__,_|               
                            _                                   
                         __| |  __ _                            
                        / _` | / _` |                           
                       | (_| || (_| |                           
  __  __             _  \__,_| \__,_|                  _        
 |  \/  |  __ _   __| | _ __  _   _   __ _   __ _   __| |  __ _ 
 | |\/| | / _` | / _` || '__|| | | | / _` | / _` | / _` | / _` |
 | |  | || (_| || (_| || |   | |_| || (_| || (_| || (_| || (_| |
 |_|  |_| \__,_| \__,_||_|    \__,_| \__, | \__,_| \__,_| \__,_|
                                     |___/                      

      

Um makefile básico

20/09/2025 - 11:13 AM

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