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)

 

 
posted @ 2022-04-25 16:11  ericdm  阅读(344)  评论(0编辑  收藏  举报