generated from cpmachado/c-template
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
102 lines (79 loc) · 2.16 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
# See LICENSE for details
# makefile for egc
.PHONY: all clean dist install uninstall
.DEFAULT: all
include config.mk
PKGFILES = \
CPPLINT.cfg\
LICENSE\
Makefile\
README.md\
config.mk\
doc\
man\
src
SRC_DIR = src
BUILD_DIR = build
OBJ_DIR = $(BUILD_DIR)/obj
BIN_DIR = $(BUILD_DIR)/bin
DIST_DIR = $(BUILD_DIR)/dist
DIST_BASE_DIR = egc-$(VERSION)
LIBEGC_SRC_DIR = src/egc
LIBEGC_OBJ_DIR = $(BUILD_DIR)/obj/egc
LIBEGC_SRC = $(wildcard $(LIBEGC_SRC_DIR)/*.c)
LIBEGC_OBJ = $(patsubst $(LIBEGC_SRC_DIR)/%.c,$(LIBEGC_OBJ_DIR)/%.o, $(LIBEGC_SRC))
LIBEGC_BIN = $(BUILD_DIR)/libegc.a
SRC = $(wildcard $(SRC_DIR)/*.c)
OBJ = $(patsubst $(SRC_DIR)/%.c,$(OBJ_DIR)/%.o, $(SRC))
BIN = $(BIN_DIR)/egc
all: $(BIN)
@echo "egc built"
clean:
@echo cleaning
@rm -rf $(BUILD_DIR)
lint:
@cppcheck --check-level=exhaustive $(SRC_DIR) include
@cpplint --recursive $(SRC_DIR) include
options:
@echo "egc compilation flags"
@echo "VERSION = $(VERSION)"
@echo "CC = $(CC)"
@echo "CFLAGS = $(CFLAGS)"
@echo "CPPFLAGS = $(CPPFLAGS)"
@echo "LDFLAGS = $(LDFLAGS)"
@echo "LIBEGC_SRC = $(LIBEGC_SRC)"
@echo "LIBEGC_OBJ = $(LIBEGC_OBJ)"
@echo "LIBEGC_BIN = $(LIBEGC_BIN)"
@echo "SRC = $(SRC)"
@echo "OBJ = $(OBJ)"
@echo "BIN = $(BIN)"
dist:
mkdir -p $(DIST_DIR)/$(DIST_BASE_DIR)
cp -r $(PKGFILES) $(DIST_DIR)/$(DIST_BASE_DIR)
cd $(DIST_DIR); \
tar -cz -f $(DIST_BASE_DIR).tar.gz $(DIST_BASE_DIR); \
zip -r $(DIST_BASE_DIR).zip $(DIST_BASE_DIR)
install: egc
@echo installing executable file to $(PREFIX)/bin
@mkdir -p $(PREFIX)/bin
@cp -f $(BIN) $(PREFIX)/bin
@chmod 755 $(PREFIX)/bin/egc
uninstall:
@echo removing executable file from $(PREFIX)/bin
@rm -f $(PREFIX)/bin/egc
$(BUILD_DIR):
mkdir -p $(BUILD_DIR)
$(OBJ_DIR):
mkdir -p $(OBJ_DIR)
$(LIBEGC_OBJ_DIR):
mkdir -p $(LIBEGC_OBJ_DIR)
$(BIN_DIR):
mkdir -p $(BIN_DIR)
$(LIBEGC_BIN): $(LIBEGC_OBJ) | $(BUILD_DIR)
ar rcs $@ $^
$(BIN): $(OBJ) $(LIBEGC_BIN) | $(BIN_DIR)
$(CC) -o $@ $^ $(LDFLAGS)
$(LIBEGC_OBJ_DIR)/%.o: $(LIBEGC_SRC_DIR)/%.c | $(LIBEGC_OBJ_DIR)
$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $<
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c | $(OBJ_DIR)
$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $<