Created
November 20, 2012 11:45
-
-
Save carun/4117455 to your computer and use it in GitHub Desktop.
Advanced options in makefile
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
make clean && make | |
make clean && make mode=debug arch=32 v=1 cov=1 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
mode := release | |
CC := gcc | |
v := 0 | |
cov := 0 | |
arc := 64 | |
ifeq ($(cov), 0) | |
else | |
COV_CFLAGS = -fprofile-arcs -ftest-coverage | |
COV_LFLAGS = -lgcov | |
endif | |
DEFINES = | |
# Make sure CORE_LIB_PATH is available. | |
CORE_LIB_FILE = "Corelibs.cfg" | |
# Include variables corresponding to the Corelibs. Populate it from the corelibs version control file. | |
CORE_COMMON := $$CORE_LIB_PATH/Common/include | |
A_INC := $$CORE_LIB_PATH/A/$(shell awk -F" = " '/^A/ { print $$2 }' $(CORE_LIB_FILE) 2>/dev/null)/include | |
B_INC := $$CORE_LIB_PATH/B/$(shell awk -F" = " '/^B/ { print $$2 }' $(CORE_LIB_FILE) 2>/dev/null)/include | |
C_INC := $$CORE_LIB_PATH/C/$(shell awk -F" = " '/^C/ { print $$2 }' $(CORE_LIB_FILE) 2>/dev/null)/include | |
D_INC := $$CORE_LIB_PATH/D/$(shell awk -F" = " '/^D/ { print $$2 }' $(CORE_LIB_FILE) 2>/dev/null)/include | |
E_INC := $$CORE_LIB_PATH/E/$(shell awk -F" = " '/^E/ { print $$2 }' $(CORE_LIB_FILE) 2>/dev/null)/include | |
F_INC := $$CORE_LIB_PATH/F/$(shell awk -F" = " '/^F/ { print $$2 }' $(CORE_LIB_FILE) 2>/dev/null)/include | |
# End variable formation | |
INCPATH = -isystem $(CORE_COMMON) -isystem $(A_INC) -isystem $(F_INC) \ | |
-isystem $(C_INC) -isystem $(D_INC) -isystem $(E_INC) \ | |
-isystem $(B_INC) | |
A_LIB := -L$$CORE_LIB_PATH/A/$(shell awk -F" = " '/^A/ { print $$2 }' $(CORE_LIB_FILE) 2>/dev/null)/lib/linux/$(arch)/gcc412/dynamic/release | |
B_LIB := -L$$CORE_LIB_PATH/B/$(shell awk -F" = " '/^B/ { print $$2 }' $(CORE_LIB_FILE) 2>/dev/null)/lib/linux/$(arch)/gcc412/dynamic/release | |
C_LIB := -L$$CORE_LIB_PATH/C/$(shell awk -F" = " '/^C/ { print $$2 }' $(CORE_LIB_FILE) 2>/dev/null)/lib/linux/$(arch)/gcc412/dynamic/release | |
D_LIB := -L$$CORE_LIB_PATH/D/$(shell awk -F" = " '/^D/ { print $$2 }' $(CORE_LIB_FILE) 2>/dev/null)/lib/linux/$(arch)/gcc412/dynamic/release | |
E_LIB := -L$$CORE_LIB_PATH/E/$(shell awk -F" = " '/^E/ { print $$2 }' $(CORE_LIB_FILE) 2>/dev/null)/lib/linux/$(arch)/gcc412/dynamic/release | |
F_LIB := -L$$CORE_LIB_PATH/F/$(shell awk -F" = " '/^F/ { print $$2 }' $(CORE_LIB_FILE) 2>/dev/null)/lib/linux/$(arch)/gcc412/dynamic/release | |
ifeq ($(mode), release) | |
flag := -O2 | |
else | |
flag := -g3 | |
endif | |
CFLAGS += $(flag) -Wall -W -Wextra -Wno-override-init -Werror -std=gnu99 | |
OBJDIR := .objs | |
OBJS = $(addprefix $(OBJDIR)/, genutils.o string-funcs.o thread.o http-receiver.o \ | |
heartbeat.o read-config.o config-settings.o log.o http.o) | |
CORE_LIBS = $(A_LIB) -la $(B_LIB) -lb $(C_LIB) -lc $(D_LIB) -ld $(E_LIB) -le $(F_LIB) -lf | |
EXTERNAL_LIBS = -lcurl | |
SYSTEM_LIBS = -lpthread | |
TARGET = sdk1 | |
.PHONY: all | |
all: $(TARGET) | |
$(OBJS): | $(OBJDIR) | |
$(OBJDIR): | |
@mkdir -p $(OBJDIR) | |
$(OBJDIR)/%.o: %.c | |
@if test ! -d $$CORE_LIB_PATH; then echo "Invalid CORE_LIB_PATH: $$CORE_LIB_PATH. Please make sure the directory exists."; exit 1; fi | |
@if test ! -f $(CORE_LIB_FILE); then echo "Invalid $(CORE_LIB_FILE). Please make sure the core library version control file exists."; exit 1; fi | |
ifeq ($(v), 0) | |
@echo "[$(CC)] $(@F)" | |
@$(CC) -c -m$(arch) $(CFLAGS) $(INCPATH) $(COV_CFLAGS) $(DEFINES) -o $@ $^ | |
else | |
$(CC) -c -m$(arch) $(CFLAGS) $(INCPATH) $(COV_CFLAGS) $(DEFINES) -o $@ $^ | |
endif | |
$(TARGET): $(OBJS) | |
ifeq ($(v), 0) | |
@echo "[$(CC)] $(@F)" | |
@$(CC) -m$(arch) $(LD_FLAGS) -o $@ $(OBJS) $(SYSTEM_LIBS) $(EXTERNAL_LIBS) $(CORE_LIBS) $(COV_LFLAGS) | |
else | |
$(CC) -m$(arch) $(LD_FLAGS) -o $@ $(OBJS) $(SYSTEM_LIBS) $(EXTERNAL_LIBS) $(CORE_LIBS) $(COV_LFLAGS) | |
endif | |
clean: | |
find . -name "*.o" -o -name "*.gcno" -o -name "*.gcda" -o -name "*.info" | xargs rm -f | |
rm -f $(TARGET) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment