# Diretórios de acesso 

LIB=./lib
INC=./include
SRC=./src
OBJ=./obj

# Flags de compilação. Otimização: -O3 (deve ser usada apenas na
# versão final), Warning: -Wall (deve ser usada sempre), Debug: -g
# (deve ser usada para debugar o programa). NUNCA USE -g e -O3 AO
# MESMO TEMPO.

# Para trocar da flag de compilacao para a flag de Debug, remova 
# o simbolo '#' da frente da primeira linha, e coloque-o na 
# frente da segunda linha.

FLAGS= -g -Wall 
# FLAGS= -O3 -Wall

# Mensagem final 

libdados: $(LIB)/libdados.a
	echo "libdados.a contruída com sucesso."

#  Indica as dependências e gera a biblioteca 

$(LIB)/libdados.a: \
$(OBJ)/comum.o \
$(OBJ)/vetor.o \
$(OBJ)/matriz.o \
$(OBJ)/pilha.o \
$(OBJ)/fila.o \
$(OBJ)/arvore.o \
$(OBJ)/arvoreb.o

	ar -r $(LIB)/libdados.a \
$(OBJ)/comum.o \
$(OBJ)/vetor.o \
$(OBJ)/matriz.o \
$(OBJ)/pilha.o \
$(OBJ)/fila.o \
$(OBJ)/arvore.o \
$(OBJ)/arvoreb.o

#  Compila as funções 

$(OBJ)/comum.o: $(SRC)/comum.c
	gcc $(FLAGS) -c $(SRC)/comum.c -I$(INC) -L$(LIB) -o $(OBJ)/comum.o 

$(OBJ)/vetor.o: $(SRC)/vetor.c
	gcc $(FLAGS) -c $(SRC)/vetor.c -I$(INC) -L$(LIB) -o $(OBJ)/vetor.o 

$(OBJ)/matriz.o: $(SRC)/matriz.c
	gcc $(FLAGS) -c $(SRC)/matriz.c -I$(INC) -L$(LIB) -o $(OBJ)/matriz.o 

$(OBJ)/pilha.o: $(SRC)/pilha.c
	gcc $(FLAGS) -c $(SRC)/pilha.c -I$(INC) -L$(LIB) -o $(OBJ)/pilha.o 

$(OBJ)/fila.o: $(SRC)/fila.c
	gcc $(FLAGS) -c $(SRC)/fila.c -I$(INC) -L$(LIB) -o $(OBJ)/fila.o 

$(OBJ)/arvore.o: $(SRC)/arvore.c
	gcc $(FLAGS) -c $(SRC)/arvore.c -I$(INC) -L$(LIB) -o $(OBJ)/arvore.o 

$(OBJ)/arvoreb.o: $(SRC)/arvoreb.c
	gcc $(FLAGS) -c $(SRC)/arvoreb.c -I$(INC) -L$(LIB) -o $(OBJ)/arvoreb.o 

#  Apaga os objetos e a biblioteca

apagatudo:
	rm -f $(OBJ)/* $(LIB)/*

#  Apaga apenas os objetos

apaga:
	rm -f $(OBJ)/*

