-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
65 lines (50 loc) · 1.86 KB
/
Makefile
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
# Makefile para "PetFera" em C++
# Feito por Lauro Bezerra (16/11/2020)
# Arquivos "Raízes" para distribuição em diretórios.
SRC = ./src
INC = ./include
# Definições gerais: Nome do Executável Main e Flags do compilador.
PROG = petFera # Nome do executável gerado.
CXXFLAGS = -Wall -std=c++17
fsflag =
ifneq '' '$(findstring clang++, $(CXX))'
fsflag =
else ifneq '' '$(findstring g++, $(CXX))'
fsflag = -lstdc++fs
endif
# ATENÇÃO: Sub-Diretórios (DEVE SER IGUAL EM SRC E INCLUDE);
DIRS = . funcionarios animal animal/ave animal/mamifero animal/reptil animal/anfibio
# Busca de arquivos .hpp e .cpp nos sub-diretórios.
SRCpaths = $(foreach dir, $(DIRS), $(addprefix $(SRC)/, $(dir)))
INCpaths = $(foreach dir, $(DIRS), $(addprefix $(INC)/, $(dir)))
# Declarando diretórios dos cabeçalhos para cada sub-diretório.
INCLUDES = $(foreach dir, $(INCpaths), $(addprefix -I, $(dir)))
VPATH = $(SRC/..)
# Busca arquivos ".cpp" em cada diretório dentro de SRC.
SOURCES = $(foreach dir, $(SRCpaths), $(wildcard $(dir)/*.cpp))
# Compilação principal
all: $(PROG)
debug: CXXFLAGS += -DDEBUG -O0 -g
debug: remake all
$(PROG): $(SOURCES:.cpp=.o)
@echo Linkando os arquivos no executável: $@
@$(CXX) $(CXXFLAGS) -o $@ $^ $(fsflag)
# Compilação das classes em arquivos-objetos ".o"
%.o: %.cpp
@echo Compilando a classe: $@
@$(CXX) $(CXXFLAGS) -c $< $(INCLUDES) -o $@ $(fsflag)
-include $(SOURCES:.cpp=.d)
%.d: %.cpp
@echo Preparando arquivo de dependência: $@
@$(CXX) $< -MM -MT '$*.o $*.d' -o $*.d $(INCLUDES)
# Tarefa para limpeza de arquivos mantendo as dependências...
remake:
@-rm -f $(PROG)
@find . -name "*.o" -type f -delete
@echo Limpando Arquivos da compilação...
# Tarefa para limpeza de arquivos...
clean:
@-rm -f *.d $(PROG)
@find . -name "*.o" -type f -delete
@find . -name "*.d" -type f -delete
@echo Limpando Arquivos da compilação e dependência...