Files

155 lines
3.6 KiB
Makefile
Raw Permalink Normal View History

2026-06-22 15:35:18 +08:00
PLATFORM=x86
# 判断当前平台是否为x86
ifeq ($(PLATFORM),x86)
SEL_DIR=out
else
SEL_DIR=bin
endif
SRC_DIR = .
SRC_EXP_DIR = .
# ../logical
TARGET = ./$(SEL_DIR)/$(notdir $(CURDIR))
# 定义输出目录
#OUTDIR := ./out
#OBJDIR := ./$(OUTDIR)/obj
OUTDIR := ./out
OBJDIR := ./$(OUTDIR)/obj/
##$(notdir $(CURDIR))
AllDIRS := $(shell ls -R .| grep '^\./.*:$$' | awk '{gsub(":","");print}') .
CSRCS = $(foreach n,$(AllDIRS) , $(wildcard $(n)/*.c)) #$(wildcard *.c)
CXXSRCS = $(foreach n,$(AllDIRS) , $(wildcard $(n)/*.cpp)) #$(wildcard *.cpp)
OBJS := $(CSRCS:.c=.o) $(CXXSRCS:.cpp=.o)
DEPS := $(CSRCS:.c=.d) $(CXXSRCS:.cpp=.d)
# 根据源文件列表,将.c文件和.cpp文件生成对应的.o文件列表
OBJS := $(patsubst %, $(OBJDIR)/%, $(CSRCS:.c=.o)) $(patsubst %, $(OBJDIR)/%, $(CXXSRCS:.cpp=.o))
LIBRARY_AR_PATH = #../../../../lib_src/a_src
LIBRARY_SO_PATH = ../../../../lib_src/so_src
STATIC_LIBS_DIR = ../../../../lib/$(PLATFORM)/lib_a
SHARED_LIBS_DIR = ../../../../lib/$(PLATFORM)/lib_so
LIBRARY_NAME = "xxx"
# 头文件必须放在include目录下才能自动识别
INCDIRS= $(SRC_DIR)/../../../../include/general_type \
$(shell find ${SRC_DIR} -type d -name inc) \
$(shell find ${LIBRARY_AR_PATH} -type d -name inc) \
$(shell find ${LIBRARY_SO_PATH} -type d -name inc) \
INC_PATH = $(foreach path,$(INCDIRS),-I$(path))
# .so
LIB_SO_PATH = ../../../../lib/$(PLATFORM)/lib_so \
-lprlog \
-Wl,-rpath=./../../../../lib/$(PLATFORM)/lib_so \
# .a
LIB_AR_PATH = ../lib/$(PLATFORM)/lib_a \
-l prlog \
-l prxml \
-l prgeneral \
# -l stdc++ \
# -l dl \
# -l pthread
DEBUG_FLAG = $(DBGFLAGS)
# DEBUG_FLAG := -g
$(OBJDIR)/%.o: %.cpp
@mkdir -p $(dir $@)
$(CXX) $(DEBUG_FLAG) $< -c -o $@ $(INC_PATH) $(SHARED_LIBS) -L$(LIB_AR_PATH) -L$(LIB_SO_PATH)
$(OBJDIR)/%.o: %.c
@mkdir -p $(dir $@)
$(CC) $(DEBUG_FLAG) $< -c -o $@ $(INC_PATH) $(SHARED_LIBS) -L$(LIB_AR_PATH) -L$(LIB_SO_PATH)
#test:
# @echo "LIBRARY_AR_PATH = $(LIBRARY_AR_PATH)"
# @echo "INC_PATH = $(INC_PATH)"
BUILD_DIR = build
#prepare1:
# @if [ -d $(BUILD_DIR) ]; then \
# echo "Removing existing $(BUILD_DIR) directory..."; \
# rm -rf $(BUILD_DIR); \
# fi
$(TARGET): $(OBJS)
# @if [ -d ./build ];then rm -rf build/ && make; fi
@echo "CROSS_COMPILE = $(CROSS_COMPILE)"
@echo "PLATFORM = $(PLATFORM)"
@echo
$(CXX) $(DEBUG_FLAG) $^ -o $@ $(INC_PATH) -L$(LIB_AR_PATH) -L$(LIB_SO_PATH)
@echo -e "\e[32m >>> build success: $(TARGET) \e[0m"
.PHONY: clean all sh rebuild env
all: $(TARGET)
# source /opt/fsl-imx-wayland/5.10-hardknott/environment-setup-cortexa53-crypto-poky-linux
rebuild: clean $(TARGET)
clean:
-$(RM) $(OBJS) $(TARGET)
rm -rf build
rm -rf $(OBJDIR)
rm -rf $(notdir $(CURDIR)).log
# Standard GNU target
distclean:
-$(RM) *.o $(TARGET)
rm -rf $(OUTDIR)
# modify *.h, compile again
h: touch_cpp all
# find the newest .c | .cpp and touch it
touch_cpp:
find . -type f \( -name "*.c" -o -name "*.cpp" -name "main*" \)|xargs ls -t|head -n1|xargs touch
r: run
run: all check
# Standard GNU target
check:
#$(TARGET)
@echo "#### $(LIB_SO_PATH)"
@echo "sh $(TARGET)"
$(TARGET)
@pwd
# @echo -e "call: sqlite3 $(shell find ../board_dir/datebase/ -name '*.db' | xargs ls -t | head -n1) .dump \e[32m"
# @sqlite3 $(shell find ../board_dir/datebase/ -name "*.db" | xargs ls -t | head -n1) .dump
@echo -e "\e[0m"
sh:
@./build.sh $@
shr:
@./build.sh $@ && ../board_dir/$(SEL_DIR)/$(notdir $(CURDIR))
env:
@echo $(SEL_DIR)
@echo $(GCC)
@echo $(CPP)
@echo "CROSS_COMPILE = $(CROSS_COMPILE)"
@echo "PLATFORM = $(PLATFORM)"
@echo
#$(CXX) #$(DEBUG_FLAG) $^ -o $@ $(INC_PATH) -L$(LIB_AR_PATH) -L$(LIB_SO_PATH)
@echo -e "\e[32m >>> build success: $(TARGET) \e[0m"