通用.so/.a Makefile
# DEBUG can be set to YES to include debugging info, or NO otherwise
DEBUG := NO
# PROFILE can be set to YES to include profiling info, or NO otherwise
PROFILE := NO
#****************************************************************************
ARM_LINUX_CHAIN=../../../../tools/toolchain/
PREFIX=$(ARM_LINUX_CHAIN)/gcc-linaro-arm-linux-gnueabihf_linux/bin/arm-linux-gnueabihf-
CC := $(PREFIX)gcc
CXX := $(PREFIX)g++
LD := $(PREFIX)g++
AR := $(PREFIX)ar rc
STRIP :=$(PREFIX)strip
DEBUG_CFLAGS := -Wall -Wno-format -g -DDEBUG
# RELEASE_CFLAGS := -Wall -Wno-unknown-pragmas -Wno-format -O3
RELEASE_CFLAGS := -Wall -O3
DEBUG_LDFLAGS := -g
RELEASE_LDFLAGS :=
ifeq (YES, ${DEBUG})
CFLAGS := ${DEBUG_CFLAGS}
LDFLAGS := ${DEBUG_LDFLAGS}
else
CFLAGS := ${RELEASE_CFLAGS}
LDFLAGS := ${RELEASE_LDFLAGS}
endif
SRCROOT := $(shell pwd)
INCDIRS += -I$(SRCROOT)
# .so .a
TLIBS = .a
TARGET_NAME := libtinyl$(TLIBS)
# SRC_CPP := $(wildcard *.cpp)
SRC_CPP := tiny.cpp tinyparser.cpp tinyerror.cpp tinystr.cpp
# OBJ_O := $(addsuffix .o,$(basename ${SRC_CPP}))
OBJ_O := $(patsubst %.cpp, %.o, $(SRC_CPP))
ifeq (.a, $(TLIBS))
$(TARGET_NAME): $(OBJ_O)
@echo "generate $@"
$(AR) $@ $^
$(OBJ_O): %.o:%.cpp
@echo "compile $@"
$(CXX) $(CFLAGS) -c $< -o $@
else ifeq (.so, $(TLIBS))
$(TARGET_NAME): $(OBJ_O)
@echo "generate $@"
$(CXX) -shared $^ -o $@
$(STRIP) $(TARGET_NAME)
$(OBJ_O): %.o:%.cpp
@echo "compile $@"
$(CXX) $(CFLAGS) -fPIC -c $< -o $@
else
@echo "NO support"
endif
all: begin $(TARGET_NAME) finish
begin:
@echo "make $(TARGET_NAME) begin---->"
finish:
@echo "make $(TARGET_NAME) done----->"
clean:
rm -f *.o $(TARGET_NAME)
.PHONY: all clean