Repository navigation
Expand file tree
/
Copy pathMakefile.generic
More file actions
63 lines (45 loc) · 1.5 KB
/
Copy pathMakefile.generic
File metadata and controls
63 lines (45 loc) · 1.5 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
NAME = array
SRC = main.cpp
SRCDIR = src
OBJDIR = obj
INCDIR = include
LIBFLG =
OBJ = $(foreach o, $(SRC:.cpp=.o),$(OBJDIR)/$(o))
DEP = $(foreach d, $(SRC:.cpp=.d),$(OBJDIR)/$(d))
LIBINC = $(foreach l, $(LIBS),-I $(l) -L $(l) -l$(l:lib%=%))
LIBARC = $(foreach l, $(LIBS),$(l)/$(l).a)
INCLUDE = $(foreach i, $(INCDIR),-I $(i)) $(foreach l, $(LIBS),-I $(l))
CFLAGS = -Wall -Wextra -Werror -std=c++17
SFLAGS = -fsanitize=address -g
CC = c++
# == Determine OS and CPU core count =
OS := $(shell uname)
ifeq ($(OS),Linux)
NPROCS:=$(shell grep -c ^processor /proc/cpuinfo)
endif
ifeq ($(OS),Darwin) # Assume Mac OS X
NPROCS:=$(shell sysctl hw.ncpu | grep -o '[0-9]\+')
endif
# ====================================
all: $(NAME)
san: fclean setdebug $(NAME)
setdebug:
$(eval CFLAGS := $(CFLAGS) $(SFLAGS))
$(NAME): $(OBJ) $(LIBARC)
$(CC) $(CFLAGS) $(INCLUDE) $(LIBFLG) $(LIBINC) $(MLX42) -o $@ $(OBJ)
-include $(DEP)
$(OBJ): $(OBJDIR)/%.o: $(SRCDIR)/%.cpp
@if [ $(OBJDIR) != '.' ] && [ ! -d $(OBJDIR) ]; then mkdir $(OBJDIR); fi
$(CC) $(CFLAGS) $(INCLUDE) -MMD -MP -c -o $@ $(SRCDIR)/$(notdir $(@:.o=.cpp))
$(LIBARC): %:
$(MAKE) -j$(NPROCS) -C $(basename $(notdir $@))
clean:
@$(foreach l, $(LIBS),$(MAKE) -C $(l) clean;)
@rm -f $(foreach o, $(OBJ),$(o))
@rm -f $(foreach d, $(DEP),$(d))
@if [ $(OBJDIR) != '.' ] && [ -d $(OBJDIR) ]; then rmdir $(OBJDIR); fi
fclean: clean
@$(foreach l, $(LIBS),$(MAKE) -C $(l) fclean;)
@if [ -f $(NAME) ]; then /bin/rm $(NAME); fi
re: fclean all
.PHONY: bonus