forked from wallacegibbon/container-collection-for-c
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcc-with-test.mk
59 lines (42 loc) · 1.35 KB
/
cc-with-test.mk
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
OBJECTS += $(addprefix $(BUILD_DIR)/, $(notdir $(C_SOURCE_FILES:.c=.c.o)))
C_FLAGS += -g -Wall -Wextra -Wno-unused -ffunction-sections -fdata-sections \
-Wp,-MMD,-MT"$@",-MF"$(@:.o=.d)",-MP \
$(addprefix -I, $(C_INCLUDES))
LD_FLAGS += -Wl,--gc-sections,[email protected]
ifeq ($(MEMCHECK), 1)
C_FLAGS += -fno-inline -fno-omit-frame-pointer
LD_FLAGS += -static-libgcc
MEMORY_CHECK_PROG = drmemory --
endif
TARGET ?= target
BUILD_DIR ?= build
#INSTALL_DIR ?= /usr/local/lib
INSTALL_DIR ?= C:/lib
CC = cc
AR = ar
.PHONY: all build_dir clean install
vpath %.c $(sort $(dir $(C_SOURCE_FILES)))
all: $(OBJECTS)
$(BUILD_DIR)/%.c.o: %.c | build_dir
@echo -e "\tCC $<"
@$(CC) -c -o $@ $< $(C_FLAGS)
$(BUILD_DIR)/lib$(TARGET).a: $(OBJECTS)
@echo -e "\tAR $@"
@$(AR) -rcsv $@ $^
install: $(BUILD_DIR)/lib$(TARGET).a
@mkdir -p $(INSTALL_DIR)/$(TARGET)/{lib,include}
@echo -e "\tCP include/* $(INSTALL_DIR)/$(TARGET)/include/"
@cp -r include/* $(INSTALL_DIR)/$(TARGET)/include/
@echo -e "\tCP $(BUILD_DIR)/lib$(TARGET).a $(INSTALL_DIR)/$(TARGET)/lib/"
@cp $(BUILD_DIR)/lib$(TARGET).a $(INSTALL_DIR)/$(TARGET)/lib/
build_dir:
@mkdir -p $(BUILD_DIR)
clean:
@rm -rf $(BUILD_DIR)
vpath %.c ./test
$(BUILD_DIR)/%: %.c $(OBJECTS) | build_dir
@echo -e "\tCC $<"
@$(CC) -o $@ $^ $(C_FLAGS) $(LD_FLAGS)
@echo -e "\t./$@\n"
@$(MEMORY_CHECK_PROG) $@
-include $(OBJECTS:.o=.d)