-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathMakefile
More file actions
64 lines (51 loc) · 1.91 KB
/
Copy pathMakefile
File metadata and controls
64 lines (51 loc) · 1.91 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
# Compilador
CC := $(shell command -v clang || command -v gcc)
FLEX = flex
YACC = bison
# Diretório de build
BUILD_DIR = build
# Flags do compilador
# -I. para o diretório atual (onde o Makefile está)
# -I$(BUILD_DIR) para onde parser.tab.h está
# -IST para ast.h e tabela.h (que agora são incluídos diretamente sem o ST/ no nome)
CFLAGS = -Wall -Wextra -g -I. -I$(BUILD_DIR) -IST -D_POSIX_C_SOURCE=200809L
LDFLAGS = -lm
# Nome do executável do compilador
COMPILER_EXEC = $(BUILD_DIR)/meu_compilador
.PHONY: all run clean debug
# Regra padrão: gera o compilador
all: $(COMPILER_EXEC)
# REGRA PRINCIPAL PARA GERAR O EXECUTÁVEL
# Ela faz todas as etapas de geração (bison, flex) e depois compila/linka tudo.
$(COMPILER_EXEC):
@echo "--- Criando diretório de build ---"
@mkdir -p $(BUILD_DIR)
@echo "--- Gerando parser.tab.c e parser.tab.h com Bison ---"
$(YACC) -d -o $(BUILD_DIR)/parser.tab.c parser/parser.y
@echo "--- Gerando lexer.c com Flex ---"
$(FLEX) -o $(BUILD_DIR)/lexer.c lexer/lexer.l
@echo "--- Compilando e linkando todos os arquivos .c ---"
$(CC) $(CFLAGS) \
$(BUILD_DIR)/parser.tab.c \
$(BUILD_DIR)/lexer.c \
ST/ast.c \
ST/tabela.c \
ST/code_generator.c \
-o $@ $(LDFLAGS)
@echo "--- Compilador gerado em $@ ---"
# Regra para executar o compilador com um arquivo de teste
# Ex: make run TEST_FILE=test/meu_programa.txt
run: $(COMPILER_EXEC)
@echo "--- Executando o compilador com $(TEST_FILE) ---"
@$(COMPILER_EXEC) $(TEST_FILE)
@echo "--- Fim da execução ---"
# Regra para depuração com GDB
# Ex: make debug TEST_FILE=test/meu_programa.txt
debug: $(COMPILER_EXEC)
@echo "--- Iniciando GDB com $(TEST_FILE) ---"
@gdb --args $(COMPILER_EXEC) $(TEST_FILE)
# Limpa os arquivos gerados no diretório de build
clean:
@echo "--- Limpando arquivos gerados ---"
@rm -rf $(BUILD_DIR)/* $(BUILD_DIR)
@echo "--- Limpeza concluída ---"