-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
94 lines (78 loc) · 3.25 KB
/
Makefile
File metadata and controls
94 lines (78 loc) · 3.25 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
CC = gcc
CFLAGS = -Wall -Wextra -std=c99 -pedantic -O2
LIBS = -lpq -lcjson
TARGET = api_server
SOURCE = main.c
# Usar pkg-config para encontrar as bibliotecas
CFLAGS += $(shell pkg-config --cflags libpq 2>/dev/null || echo "")
CFLAGS += $(shell pkg-config --cflags libcjson 2>/dev/null || echo "")
LIBS += $(shell pkg-config --libs libpq 2>/dev/null || echo "")
LIBS += $(shell pkg-config --libs libcjson 2>/dev/null || echo "")
# Detectar sistema operacional
UNAME_S := $(shell uname -s)
# Configurações específicas do sistema
ifeq ($(UNAME_S),Linux)
LIBS += -lpthread
CFLAGS += -D_GNU_SOURCE
endif
# Fallback para paths comuns se pkg-config falhar
ifeq ($(shell pkg-config --exists libpq; echo $?),1)
CFLAGS += -I/usr/include/postgresql
LIBS += -L/usr/lib/x86_64-linux-gnu
endif
ifeq ($(UNAME_S),Darwin)
# macOS
CFLAGS += -I/usr/local/include -I/opt/homebrew/include
LDFLAGS += -L/usr/local/lib -L/opt/homebrew/lib
endif
# Regra principal
$(TARGET): $(SOURCE)
$(CC) $(CFLAGS) $(LDFLAGS) -o $(TARGET) $(SOURCE) $(LIBS)
# Regra para debug
debug: CFLAGS += -g -DDEBUG
debug: $(TARGET)
# Verificar se as dependências estão instaladas
check-deps:
@echo "Verificando dependências..."
@which gcc > /dev/null && echo "✓ GCC instalado" || echo "✗ GCC não encontrado"
@which pg_config > /dev/null && echo "✓ PostgreSQL dev instalado" || echo "✗ PostgreSQL dev não encontrado"
@ldconfig -p | grep -q libpq && echo "✓ libpq encontrado" || echo "✗ libpq não encontrado"
@ldconfig -p | grep -q libcjson && echo "✓ libcjson encontrado" || echo "✗ libcjson não encontrado"
@echo "Se alguma dependência estiver faltando, execute: make install-deps-ubuntu"
# Instalar dependências no Ubuntu/Debian
install-deps-ubuntu:
sudo apt-get update
sudo apt-get install -y build-essential gcc make pkg-config
sudo apt-get install -y postgresql postgresql-contrib libpq-dev
sudo apt-get install -y libcjson-dev
@echo "Verificando instalação..."
@pkg-config --exists libpq && echo "✓ libpq encontrado" || echo "✗ libpq não encontrado"
@pkg-config --exists libcjson && echo "✓ libcjson encontrado" || echo "✗ libcjson não encontrado"
# Instalar dependências no CentOS/RHEL/Fedora
install-deps-fedora:
sudo dnf install -y gcc make postgresql-devel libcjson-devel postgresql-server
# Instalar dependências no macOS
install-deps-macos:
brew install postgresql libpq cjson
# Configurar banco de dados PostgreSQL
setup-db:
sudo -u postgres createdb apidb
sudo -u postgres psql -c "CREATE USER apiuser WITH PASSWORD 'apipass';"
sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE apidb TO apiuser;"
# Executar com logs
run:
./$(TARGET) 2>&1 | tee server.log
# Testar a API
test:
@echo "Testando endpoint de saúde..."
curl -s http://localhost:8080/health | jq .
@echo "\nCriando usuário..."
curl -s -X POST -H "Content-Type: application/json" \
-d '{"name":"João Silva","email":"joao@email.com"}' \
http://localhost:8080/users | jq .
@echo "\nListando usuários..."
curl -s http://localhost:8080/users | jq .
# Limpeza
clean:
rm -f $(TARGET)
.PHONY: clean debug install-deps-ubuntu install-deps-fedora install-deps-macos setup-db run test check-deps