-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
64 lines (50 loc) · 1.81 KB
/
Makefile
File metadata and controls
64 lines (50 loc) · 1.81 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
# Diretórios
SRC_DIR = src
CATALOG_DIR = $(SRC_DIR)/catalog
ENTITIES_DIR = $(SRC_DIR)/entities
IO_DIR = $(SRC_DIR)/io
QUERIES_DIR = $(SRC_DIR)/queries
INTERACTIVE_DIR = $(SRC_DIR)/interactive
TESTS_DIR = tests
UTILS_DIR = $(SRC_DIR)/utils
# Compilador
CC = gcc
CFLAGS = -fno-omit-frame-pointer -Wall -Wextra -Werror=discarded-qualifiers -Ofast -march=native -g -Iinclude `pkg-config --cflags glib-2.0`
LDFLAGS= `pkg-config --libs glib-2.0` -lm
NCURSES = -lncurses
MAIN_PROGRAM = programa-principal
TEST_PROGRAM = programa-testes
INTERACTIVE_PROGRAM = programa-interativo
# Fontes da aplicação
SRCS_APP := $(shell find $(SRC_DIR) -type f -name '*.c' ! -path '$(INTERACTIVE_DIR)/*' ! -name 'main.c')
SRCS_MAIN := $(SRC_DIR)/main.c
SRCS_INTERACTIVE := $(shell find $(INTERACTIVE_DIR) -type f -name '*.c')
SRCS_TEST := $(wildcard $(TESTS_DIR)/*.c)
# Objetos
OBJS_APP := $(SRCS_APP:.c=.o)
OBJS_MAIN := $(SRCS_MAIN:.c=.o)
OBJS_INTERACTIVE := $(SRCS_INTERACTIVE:.c=.o)
OBJS_TEST := $(SRCS_TEST:.c=.o)
# Alvo padrão
all: $(MAIN_PROGRAM) $(TEST_PROGRAM) $(INTERACTIVE_PROGRAM)
# Programa principal
$(MAIN_PROGRAM): $(OBJS_MAIN) $(OBJS_APP)
$(CC) $(CFLAGS) $^ $(LDFLAGS) $(NCURSES) -o $@
# Programa de testes
$(TEST_PROGRAM): $(OBJS_TEST) $(OBJS_APP)
$(CC) $(CFLAGS) $^ $(LDFLAGS) $(NCURSES) -o $@
$(INTERACTIVE_PROGRAM): $(OBJS_INTERACTIVE) $(OBJS_APP)
$(CC) $(CFLAGS) $^ $(LDFLAGS) $(NCURSES) -o $@
# Compilar .c -> .o (src)
$(SRC_DIR)/%.o: $(SRC_DIR)/%.c
$(CC) $(CFLAGS) -c $< -o $@
# Compilar .c -> .o (subpastas do src)
$(SRC_DIR)/%/%.o: $(SRC_DIR)/%/%.c
$(CC) $(CFLAGS) -c $< -o $@
# Compilar .c -> .o (tests)
$(TESTS_DIR)/%.o: $(TESTS_DIR)/%.c
$(CC) $(CFLAGS) -c $< -o $@
# Limpeza
clean:
rm -f $(MAIN_PROGRAM) $(TEST_PROGRAM) $(INTERACTIVE_PROGRAM) $(OBJS_APP) $(OBJS_MAIN) $(OBJS_INTERACTIVE) $(OBJS_TEST)
.PHONY: all clean