-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile.lib
More file actions
105 lines (83 loc) · 3.02 KB
/
Makefile.lib
File metadata and controls
105 lines (83 loc) · 3.02 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
95
96
97
98
99
100
101
102
103
104
105
# Makefile para compilar a biblioteca HTTP.c
# Uso: make -f Makefile.lib
LIB_NAME = libhttpc
VERSION = 1.0.0
CC = cc
CFLAGS = -Wall -Wextra -Werror -std=c99 -fPIC -I includes/
AR = ar
RANLIB = ranlib
SRCS_DIR = srcs
OBJS_DIR = objs
LIB_DIR = lib
INCLUDE_DIR = includes
HTTPC_SOURCES = \
$(SRCS_DIR)/api/httpc_lib.c \
$(SRCS_DIR)/api/response.c \
$(SRCS_DIR)/api/response_helpers.c \
$(SRCS_DIR)/core/config.c \
$(SRCS_DIR)/core/utils.c \
$(SRCS_DIR)/core/server.c \
$(SRCS_DIR)/core/router.c \
$(SRCS_DIR)/core/request_parser.c \
$(SRCS_DIR)/core/handlers/handler.c \
$(SRCS_DIR)/core/user_logger.c \
$(SRCS_DIR)/core/error_handling.c \
$(SRCS_DIR)/json/json_utils.c \
$(SRCS_DIR)/json/cJSON.c
HTTPC_OBJS = $(HTTPC_SOURCES:$(SRCS_DIR)/%.c=$(OBJS_DIR)/%.o)
EXAMPLES = examples/simple_server examples/request_api_example
all: $(LIB_DIR)/$(LIB_NAME).a $(LIB_DIR)/$(LIB_NAME).so examples
$(OBJS_DIR):
mkdir -p $(OBJS_DIR)
mkdir -p $(OBJS_DIR)/api
mkdir -p $(OBJS_DIR)/core
mkdir -p $(OBJS_DIR)/core/server
mkdir -p $(OBJS_DIR)/core/router
mkdir -p $(OBJS_DIR)/routes
mkdir -p $(OBJS_DIR)/core/handlers
mkdir -p $(OBJS_DIR)/core/logger
mkdir -p $(OBJS_DIR)/core/logger/messages
mkdir -p $(OBJS_DIR)/core/errors
mkdir -p $(OBJS_DIR)/json
$(LIB_DIR):
mkdir -p $(LIB_DIR)
$(LIB_DIR)/$(LIB_NAME).a: $(HTTPC_OBJS) | $(LIB_DIR)
$(AR) rcs $@ $^
$(RANLIB) $@
$(LIB_DIR)/$(LIB_NAME).so: $(HTTPC_OBJS) | $(LIB_DIR)
$(CC) -shared -o $@ $^
$(OBJS_DIR)/%.o: $(SRCS_DIR)/%.c | $(OBJS_DIR)
@mkdir -p $(dir $@)
$(CC) $(CFLAGS) -c $< -o $@
examples: $(EXAMPLES)
examples/simple_server: examples/simple_server.c $(LIB_DIR)/$(LIB_NAME).a
$(CC) $(CFLAGS) -o $@ $< -L$(LIB_DIR) -lhttpc -Wl,-rpath,$(shell pwd)/$(LIB_DIR)
examples/request_api_example: examples/request_api_example.c $(LIB_DIR)/$(LIB_NAME).a
$(CC) $(CFLAGS) -o $@ $< -L$(LIB_DIR) -lhttpc -Wl,-rpath,$(shell pwd)/$(LIB_DIR)
install: $(LIB_DIR)/$(LIB_NAME).a $(LIB_DIR)/$(LIB_NAME).so
install -d $(DESTDIR)/usr/local/lib
install -d $(DESTDIR)/usr/local/include/httpc
install -m 644 $(LIB_DIR)/$(LIB_NAME).a $(DESTDIR)/usr/local/lib/
install -m 644 $(LIB_DIR)/$(LIB_NAME).so $(DESTDIR)/usr/local/lib/
install -m 644 $(INCLUDE_DIR)/*.h $(DESTDIR)/usr/local/include/httpc/
install -m 644 $(INCLUDE_DIR)/*/*.h $(DESTDIR)/usr/local/include/httpc/
clean:
rm -rf $(OBJS_DIR) $(LIB_DIR)
clean-examples:
rm -f $(EXAMPLES)
clean-all: clean clean-examples
test:
@echo "Use 'make test' no diretório raiz para executar os testes completos"
help:
@echo "HTTP.c Library Makefile"
@echo ""
@echo "Alvos disponíveis:"
@echo " all - Compila biblioteca e exemplos"
@echo " examples - Compila apenas os exemplos"
@echo " install - Instala a biblioteca no sistema"
@echo " clean - Remove arquivos de compilação"
@echo " clean-examples - Remove executáveis dos exemplos"
@echo " clean-all - Remove tudo"
@echo " test - Executa testes básicos"
@echo " help - Mostra esta ajuda"
.PHONY: all examples install clean clean-examples clean-all test help