-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
66 lines (50 loc) · 1.44 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
CC = g++
STD = -std=c++23
INCLUDE_DIR = include
CFLAGS = -O1 -I$(INCLUDE_DIR) -Wall -Wextra -pedantic $(STD)
TARGET = lunawp
BUILD_DIR = build
SRC_DIR = src
PREFIX = /usr
INSTALL_DIR = $(PREFIX)/bin
MANPAGE_DIR = $(PREFIX)/share/man/man1
SRCS := $(shell find $(SRC_DIR) -name "*.cpp")
HEADERS := $(shell find $(INCLUDE_DIR) -name "*.h")
OBJS := $(patsubst src/%.cpp, build/%.o, $(SRCS))
ifneq ($(findstring clang++, $(CC)),)
CFLAGS += $(CFLAGS) -D__cpp_concepts=202002L -Wno-builtin-macro-redefined -Wno-macro-redefined
endif
all: mkdir_build $(TARGET)
build/%.o : src/%.cpp
$(CC) $(CFLAGS) -MMD -MP -c $< -o $@
$(TARGET) : $(OBJS)
$(CC) $(CFLAGS) $^ -o $@
mkdir_build:
@for i in $(BUILD_DIR); do\
if [ ! -f "$$i" ]; then\
mkdir -p $$i;\
fi;\
done
clean:
@for i in $(BUILD_DIR) $(TARGET); do\
if [ -f "$$i" ] || [ -d "$$i" ]; then\
rm -r "$$i";\
fi;\
done
install:
$(info :: Installing $(TARGET))
install -Dm755 $(TARGET) $(INSTALL_DIR)/$(TARGET)
mkdir -p $(MANPAGE_DIR)/
install -Dm644 man/$(TARGET).1 $(MANPAGE_DIR)/
uninstall:
$(info :: Uninstalling $(TARGET))
rm $(INSTALL_DIR)/$(TARGET)
rm $(MANPAGE_DIR)/$(TARGET).1
cppcheck:
$(info :: running static code analysis)
$(info )
cppcheck --cppcheck-build-dir=build --std=c++23 --check-level=exhaustive\
--suppress=unreadVariable --suppress=missingIncludeSystem --enable=all -I $(INCLUDE_DIR) $(SRC_DIR)
format:
clang-format -i $(SRCS) $(HEADERS)
-include $(OBJS:.o=.d)