SRC_ROOT:=.
INC_ROOT:=.
CPP_EXCLUDE_LIST:= #排除的cpp文件,需要加路径
C_EXCLUDE_LIST:= #排除的c文件,需要加路径
LIB_ROOT:=
BUILD_DIR:=../build
TARGET:=main #cfg9516
OBJ_ROOT_DIR:=../obj
CC:=arm-linux-gnueabihf-g++
C:=arm-linux-gnueabihf-gcc
DEF:=-DLINUX #宏定义,如-DLINUX -DTEST
LDFLAGS:=-lpthread #-shared#编译动态库需要添加-shared
CFLAGS:=-w -fpermissive -std=c99 #-fPIC#编译动态库需要添加-fPIC
CPPFLAGS:=-w -fpermissive -std=c++11 #-fPIC#编译动态库需要添加-fPIC
INC:=$(addprefix -I ,$(shell find $(INC_ROOT) -type d))
SRC_DIR:=$(shell find $(SRC_ROOT) -type d)
C_SRC:=$(filter-out $(C_EXCLUDE_LIST),$(subst ./,,$(wildcard $(addsuffix /*.c,$(SRC_DIR)))))
CPP_SRC:=$(filter-out $(CPP_EXCLUDE_LIST),$(subst ./,,$(wildcard $(addsuffix /*.cpp,$(SRC_DIR)))))
OBJS:=$(addprefix $(OBJ_ROOT_DIR)/,$(C_SRC:.c=.o) $(CPP_SRC:.cpp=.o))
CPP_DEPS:=$(addprefix $(OBJ_ROOT_DIR)/,$(CPP_SRC:.cpp=.d))
C_DEPS:=$(addprefix $(OBJ_ROOT_DIR)/,$(C_SRC:.c=.d))
$(BUILD_DIR)/$(TARGET):$(OBJS)
@mkdir -p $(BUILD_DIR)
ifneq ($(strip $(LIB_ROOT)),) #判断LIB_ROOT是否为空
$(CC) $^ $(addprefix -L ,$(shell find $(LIB_ROOT) -type d)) $(addprefix -l:,$(notdir $(shell find $(LIB_ROOT) -name "libbylhDriver*.so"))) $(LDFLAGS) -o $@
else
$(CC) $^ $(LDFLAGS) -o $@
endif
$(CPP_DEPS):$(OBJ_ROOT_DIR)/%.d:%.cpp
@mkdir -p $(dir $@)
@$(CC) -MM $(INC) $(CPPFLAGS) $(DEF) $< > $@
@sed -i ":a;N;s|\\n||g;ta" $@
@sed -i 's|\\||g' $@
@sed -i -re 's|\w+\.o:\s*((\w+\/)+).+|\1\0|' $@
@sed -i -re 's|^|$(OBJ_ROOT_DIR)\/|' $@
@echo " $(CC) $(CPPFLAGS) $(DEF) $(INC) -c $< -o $(OBJ_ROOT_DIR)/$*.o" >> $@
$(C_DEPS):$(OBJ_ROOT_DIR)/%.d:%.c
@mkdir -p $(dir $@)
@$(C) -MM $(INC) $(CFLAGS) $(DEF) $< > $@
@sed -i ":a;N;s|\\n||g;ta" $@
@sed -i 's|\\||g' $@
@sed -i -re 's|\w+\.o:\s*((\w+\/)+).+|\1\0|' $@
@sed -i -re 's|^|$(OBJ_ROOT_DIR)\/|' $@
@echo " $(C) $(CFLAGS) $(DEF) $(INC) -c $< -o $(OBJ_ROOT_DIR)/$*.o" >> $@
-include $(C_DEPS) $(CPP_DEPS)
.PHONY:clean
clean:
rm -rfd $(BUILD_DIR)/$(TARGET) $(OBJ_ROOT_DIR)
万能Makefile
于 2022-04-28 18:46:22 首次发布