makefile编译静态库或动态库,遍历所有源文件
TARGET_NAME=libstatic.a #TARGET_NAME=libdynamic.so CROSS= CC=$(CROSS)gcc CXX=$(CROSS)g++ #DEBUG=-g DEBUG= MV=mv -f CP=cp -f RM=rm -rf LN=ln -sf AR=ar -cr TOP_PATH = $(shell pwd) #INC_PATH = $(TOP_PATH)/include INC_PATH= SRC_PATH = $(TOP_PATH)/src MOD_PATH = $(SRC_PATH) #MOD_LIB_PATH = $(MOD_PATH)/lib #MOD_INC_PATH = $(MOD_PATH)/include MOD_LIB_PATH = MOD_INC_PATH = DIRS = $(shell find $(SRC_PATH) -maxdepth 10 -type d) #FILES = $(foreach dir, $(DIRS), $(wildcard $(dir)/*.cpp)) ARCH=X64 ifeq ($(shell getconf LONG_BIT), 32) ARCH=X86 endif TARGET=$(TOP_PATH)/$(ARCH)/$(TARGET_NAME) MODULES_PATH := $(foreach m, $(DIRS), $(m)) #SRCS_CPP += $(foreach dir, $(DIRS), $(wildcard $(dir)/*.cpp)) #SRCS_CC += $(foreach dir, $(DIRS), $(wildcard $(dir)/*.cc)) SRCS_C += $(foreach dir, $(DIRS), $(wildcard $(dir)/*.c)) #OBJS_CPP = $(patsubst %.cpp, %.o, $(SRCS_CPP)) #OBJS_CC = $(patsubst %.cc, %.o, $(SRCS_CC)) OBJS = $(patsubst %.c, %.o, $(SRCS_C)) INC_PATH += -I$(MOD_INC_PATH) INC_PATH += -I$(MOD_PATH) #LIB_PATH += -L$(TOP_PATH)/lib #LIB_PATH += -L$(MOD_LIB_PATH) LIB_PATH += LIB_PATH += CMD= TARGET_NAME_A=libtue_api.a TARGET_NAME_SO=libtue_api.so ifeq ($(TARGET_NAME), $(TARGET_NAME_A)) CFLAGS=$(DEBUG) -Wall -c CMD=$(AR) $@ $^ else ifeq ($(TARGET_NAME), $(TARGET_NAME_SO)) CFLAGS=$(DEBUG) -Wall -c -fPIC CMD=$(CC) -shared -o $(TARGET) $(OBJS) endif all:$(TARGET) $(TARGET) : $(OBJS) $(CMD) $(OBJS):%.o : %.c $(CC) $(CFLAGS) $< -o $@ .PHONY : clean clean: @ $(RM) $(TARGET) $(OBJS) @ $(RM) $(SRC_PATH)/*.o @ $(RM) $(TARGET)