-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
120 lines (111 loc) · 3.52 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
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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
##
## EPITECH PROJECT, 2019
## EvalExpr
## File description:
## Renaud sait pas faire un Makefile
##
#
# Config
###################################################################
NAME := libfox
SHELL := $(shell which bash) # Yeah it looks dumb but you can never be too sure.
MAKE := $(shell which make) --no-print-directory -C
RM := $(shell which rm) -f
CP := $(shell which cp) -t
MV := $(shell which mv) -t
ECHO := $(shell which echo)
define echo
$(ECHO)
endef
.DEFAULT_GOAL := all
###################################################################
#
# Module directories
###################################################################
MODULES += datastruct
MODULES += io
MODULES += math
MODULES += memory
MODULES += std
MODULES += string
MODULES += wrap_libc
MODULES += wrap_ncurses
###################################################################
#
# Modules
###################################################################
# This genertes a receipe for each module directory.
# Just use `make MODULEDIR` were MODULEDIR is a module directory
# name and you're good to go !
# --------------------------------------------------------------- #
.PHONY: $(MODULES)
$(MODULES):
@$(MAKE) $@ $(RULE)
@echo
###################################################################
#
# Wrappers
###################################################################
# If you want to build every wrapper at once, use this receipe
# --------------------------------------------------------------- #
.PHONY: wrap wrappers
wrappers: wrap
wrap: $(filter wrap_%,$(MODULES))
###################################################################
#
# Tests
###################################################################
# Use make `test-MODULEDIR` to test a specific module.
# Each following recepe following this pattern will work the same
# --------------------------------------------------------------- #
.PHONY: test-%
test-%:
@$(MAKE) $(subst test-,,$@) tests
@echo
# --------------------------------------------------------------- #
.PHONY: tests tests_run test_report
test_report: tests
tests_run: tests
tests: RULE := tests
tests: $(MODULES)
###################################################################
#
# Completion tools
###################################################################
.PHONY: completion-tools tags ctags compiledb
# --------------------------------------------------------------- #
completion-tools: RULE := completion-tools
completion-tools: $(MODULES)
# --------------------------------------------------------------- #
ctags: RULE := ctags
ctags: $(MODULES)
# --------------------------------------------------------------- #
compiledb: RULE := compiledb
compiledb: $(MODULES)
###################################################################
#
# Make ever module and its tests
###################################################################
.PHONY: all $(NAME)
all: $(NAME)
$(NAME): RULE := all
$(NAME): $(MODULES)
###################################################################
#
# Cleanup
###################################################################
.PHONY: clean
clean: RULE := clean
clean: $(MODULES)
# --------------------------------------------------------------- #
.PHONY: fclean
fclean: RULE := fclean
fclean: $(MODULES)
###################################################################
#
# Scrap everything, build it again
###################################################################
.PHONY: re
re: RULE := re
re: $(MODULES)
###################################################################