Makefile Profissional em C

Ordem

Caminho dos profissionais de C.
Padrão de projeto em C com Makefile mais organizado — separando os arquivos .c e .h em pastas.


Estrutura típica de um projeto em C:

meu_projeto/
├── Makefile
├── src/
│   ├── main.c
│   ├── funcoes.c
│
├── include/
│   └── funcoes.h
│
└── bin/

Onde:


Exemplo dos arquivos

src/main.c

#include <stdio.h>
#include "funcoes.h"

int main() {
    ola();
    return 0;
}

src/funcoes.c

#include <stdio.h>
#include "funcoes.h"

void ola() {
    printf("Olá, Ricardo!
");
}

include/funcoes.h

#ifndef FUNCOES_H
#define FUNCOES_H

void ola();

#endif

Makefile profissional:

# Nome do programa
PROG = bin/programa

# Compilador
CC = gcc

# Diretórios
SRC_DIR = src
INC_DIR = include
BIN_DIR = bin

# Flags de compilação
CFLAGS = -Wall -Wextra -I$(INC_DIR)

# Arquivos fonte
SRCS = $(wildcard $(SRC_DIR)/*.c)

# Objetos gerados
OBJS = $(SRCS:.c=.o)

# Alvo padrão
all: $(BIN_DIR) $(PROG)

# Como compilar
$(PROG): $(SRCS)
	$(CC) $(CFLAGS) $(SRCS) -o $(PROG)

# Cria a pasta bin se não existir
$(BIN_DIR):
	mkdir -p $(BIN_DIR)

# Limpar arquivos gerados
clean:
	rm -f $(PROG)


Comandos pra usar:

Compilar:

make

Executar:

./bin/programa

Limpar:

make clean

Melhorando no Vim:

Dentro do Vim:

Compila e executa:

:!make && ./bin/programa

Atalho no ~/.vimrc:

nnoremap <F5> :w<CR>:!make && ./bin/programa<CR>

😎