makefile 通用模板

发布时间 2023-04-26 15:11:28作者: 小城熊儿
#
# Makefile
#
# ⭐全速编译命令: make clean && make -j$(nproc)
# := 就地解析赋值  = 最后一次赋值  ?= 未赋值时赋值   += 接续赋值
# mount -t nfs -o nolock,vers=3 192.168.5.12:/home/book/nfs_rootfs /mnt && ps -ef | grep jc | grep -v grep | awk '{print $1}' | xargs kill
# 
# mount -t nfs -o nolock,vers=3 192.168.5.12:/home/book/nfs_rootfs /mnt
# ps -ef | grep jc | grep -v grep | awk '{print $1}' | xargs kill
# cp /mnt/_01_meter ./ && ./_01_meter
# cd /root && cp /mnt/jclvgldemo ./ && ./jclvgldemo
# cd /root && cp /mnt/jclvgldemo ./ && gdbserver localhost:9001 ./jclvgldemo
# nohup ./jclvgldemo >/dev/null &

#######################################################################
#######################################################################
####################### 编译 ##########################################
CC := aarch64-linux-gnu-gcc
# cc := aarch64-linux-gnu-gcc 
# CC := gcc
PRO_DIR ?= ${shell pwd}

WARNINGS = -Wall -Wextra \
           -Wshadow -Wundef -Wmaybe-uninitialized -Wmissing-prototypes -Wpointer-arith -Wuninitialized \
           -Wunreachable-code -Wreturn-type -Wmultichar -Wdouble-promotion -Wclobbered -Wdeprecated  \
           -Wempty-body -Wtype-limits -Wsizeof-pointer-memaccess -g
# CFLAGS用于编译,指定头文件等信息,源文件等信息
# LDFLAGS 用于链接,指定动态库目录,动态库名称等等

CFLAGS ?= -O2 -g0 $(WARNINGS) -I. -I./include
CFLAGS += -I/opt/EmbedSky/TQT507/CoreA/longan//platform/framework/auto/sdk_lib/include
# 使用gcc编译c++
CFLAGS += -lstdc++

CFLAGS += -I./cxx/include

LDFLAGS += -L./cxx/lib -ldface -lMNN_CL -lMNN
# LDFLAGS += -L/opt/EmbedSky/TQT507/CoreA/longan/out/t507/evb/longan/buildroot/target/usr/lib -L./lib 
# LDFLAGS += -lm -lz -lpthread -fstack-usage -lfreetype -lpng -lbz2 -lavformat -lavcodec -lavutil -lswscale -lswresample
# LDFLAGS += -L/platform/framework/auto/sdk_lib/cedarx/lib -lcdx_ion
# LDFLAGS += -L/platform/framework/auto/sdk_lib/sdk_memory -lsdk_memory

#######################################################################
#######################################################################
####################### 输出 ##########################################

BIN = testdface_licence_localinfo
OUTPUT = /home/book/nfs_rootfs
OUTPUT_BOARD = /opt/EmbedSky/TQT507/CoreA/longan/out/t507/evb/longan/buildroot/target/root


#######################################################################
#######################################################################
####################### 源文件 #########################################

#Collect the files to compile
# MAINSRC = ./main.c
MAINSRC +=  ./example/cxx/licence_demo/licence_localinfo.cpp


## include $(PRO_DIR)/my_lib/my.mk  ## 包含某个目录
## # 根据实际需要添加指定目录下的某个文件
## CSRCS += $(PRO_DIR)/pro_meter/meter_init.c
## CSRCS += $(PRO_DIR)/pro_meter/app/lvgl_include.c
## CSRCS += $(PRO_DIR)/pro_meter/app/lvgl_handle_show.c
## # 根据需要添加某目录下全部*.c文件
## CSRCS += $(shell find -L $(PRO_DIR)/pro_meter/driver/  -name "*.c")
## CSRCS += $(shell find -L $(PRO_DIR)/pro_meter/handle/  -name "*.c")

# CSRCS +=$(LVGL_DIR)/mouse_cursor_icon.c 
# $(info  __debuginfo__ $(CSRCS)) ## 打印

OBJEXT ?= .o

AOBJS = $(ASRCS:.S=$(OBJEXT))
COBJS = $(CSRCS:.c=$(OBJEXT))

MAINOBJ = $(MAINSRC:.c=$(OBJEXT))

SRCS = $(ASRCS) $(CSRCS) $(MAINSRC)
OBJS = $(AOBJS) $(COBJS) $(MAINOBJ)

#######################################################################
#######################################################################
####################### 编译链接 ######################################

# demo 批量编译 make -c 跳转到指定目录下执行makefile文件  -f 指定make执行的文件(默认执行makefile)
# SRC_DIR  +=  lv_100ask_app/src/imx6ull_app/imx6ull_set_lcd_brightness\
#              lv_100ask_app/src/imx6ull_app/imx6ull_set_time

# all: default
#     $(foreach  dir,$(SRC_DIR),make $(RUN_JOBS) -C $(dir);)

# clean:
#   $(foreach  dir,$(SRC_DIR),make -C $(dir) clean;)

all: default

%.o: %.c
    @$(CC)  $(CFLAGS) -c $< -o $@
    @echo "CC $<"
    
default: $(OBJS)
    $(CC) -o $(BIN) $(OBJS) $(LDFLAGS) $(CFLAGS)
    @echo finished $(BIN)
    # mkdir -p $(LVGL_DIR)/obj $(LVGL_DIR)/bin/
    # mkdir -p $(OUTPUT) $(LVGL_DIR)/obj $(LVGL_DIR)/bin/
    # rm -rf $(OUTPUT)/$(BIN)
    cp $(BIN) $(OUTPUT)
    # cp $(BIN) $(OUTPUT_BOARD)



clean: 
    rm -f $(BIN) $(OBJS)
    

 

自己总结的makefile通用模板,

 

//