简单的makefile分析

文件目录:在这里插入图片描述

MakeFile 文件

# 目录路径
DIR_Config   = ./lib/Config
DIR_EPD      = ./lib/LCD
DIR_FONTS    = ./lib/Fonts
DIR_GUI      = ./lib/GUI
DIR_Examples = ./examples
DIR_BIN      = ./bin

# wildcard 是Makefile中的一个函数,用于进行文件名模式匹配,返回符合指定模式的文件列表
# 这里的作用就是将${DIR_EPD})、Config(${DIR_Config})、GUI(${DIR_GUI})、Examples(${DIR_Examples})和Fonts(${DIR_FONTS}下的.c文件并文件位置一起生成一个文件列表,并把这个列表赋值给 OBJ_C
OBJ_C = $(wildcard ${DIR_EPD}/*.c ${DIR_Config}/*.c ${DIR_GUI}/*.c ${DIR_Examples}/*.c ${DIR_FONTS}/*.c)
#OBJ_C可以认为是一个字符串,它的内容我们可以打印到终端,里面的内容是:
"./lib/LCD/Pico_LCD_0in96.c ./lib/LCD/Pico_LCD_1in14.c ./lib/LCD/Pico_LCD_1in3.c ./lib/LCD/Pico_LCD_1in44.c ./lib/LCD/Pin.c ./lib/Config/DEV_Config.c ./lib/Config/dev_hardware_SPI.c ./lib/Config/sysfs_gpio.c ./lib/GUI/GUI_BMP.c ./lib/GUI/GUI_PaPico_LCD_0in96_test.c ./examples/Pico_LCD_1in14_test.c ./examples/Pico_LCD_1in3_test.c ./examples/Pico_LCD_1in44_test.c ./exaes/Pico_LCD_2in_test.c ./lib/Fonts/font12.c ./lib/Fonts/font12CN.c ./lib/Fonts/font16.c ./lib/Fonts/font20.c ./lib/Fonts/fontonts/font48.c ./lib/Fonts/font50.c ./lib/Fonts/font8.c
"

# patsubst 是Makefile中的一个函数,用于对一个字符串中的模式进行替换,这里的主要作用是将OBJ_C中的.c后缀改为.o,

# notdir: 函数,用于从文件路径中提取文件名部分,这里的作用是将OBJ_C中的文件的文件路径去掉
# 从源文件列表派生目标文件列表 (这里只是一个字符串变换的过程,不涉及实际的操作)
OBJ_O = $(patsubst %.c,${DIR_BIN}/%.o,$(notdir ${OBJ_C}))
#它的内容我们可以打印到终端,里面的内容是:
"./bin/Pico_LCD_0in96.o ./bin/Pico_LCD_1in14.o ./bin/Pico_LCD_1in3.o ./bin/Pico_LCD_1in44.o ./bin/Pico_LCD_1in8.o ./bin/Pico_LCD_2in.o ./bin/DEV_Config.o ./bin/dev_hardware_SPI.o ./bin/sysfs_gpio.o ./bin/GUI_BMP.o ./bin/GUI_Paint.o ./bin/main.o ./bin/Pico_LCD_0in96_test.o ./bin/Pico_LCD_1in14_test.o ./bin/Pico_LCD_1in3_test.o ./bin/Pico_LCD_1in44_test.o ./bin/Pico_LCD_1in8_test.o ./bin/Pico_LCD_2in_test.o ./bin/font12.o ./bin/font12CN.o ./bin/font16.o ./bin/font20.o ./bin/font24.o ./bin/font24CN.o ./bin/font48.o ./bin/font50.o ./bin/font8.o
"   
#OBJ_O 内容我们在最后的所有.o文件生成可执行文件的时候需要,这样操作简化了我们的编译,并且可以对文件夹里面的文件删除或者添加而不用改变MakeFile


# 最终目标文件名
TARGET = main

# 控制条件编译的宏,这个大概作用是通过USB调试,我也没有深究,要实现这个功能就要链接库依赖
USELIB = USE_DEV_LIB
# 根据宏设置调试标志
DEBUG = -D $(USELIB)


# 根据宏设置链接的库
ifeq ($(USELIB), USE_DEV_LIB)
    LIB = -lpthread -lm         #链接库
endif

# 自己的编译器的路径
CC = /home/haha/luckfox-pico/tools/linux/toolchain/arm-rockchip830-linux-uclibcgnueabihf/bin/arm-rockchip830-linux-uclibcgnueabihf-gcc


# 编译器选项
MSG = -g -O0 -Wall
#-g: 生成调试信息,以便在调试时能够进行源码级别的调试。
#-O0: 禁用优化,以确保生成的代码更容易理解和调试。这会禁用编译器的优化。
#-Wall: 启用额外的警告,可以帮助开发者识别潜在的问题或不安全的代码。






# 完整的编译器选项
CFLAGS += $(MSG) $(DEBUG)

# 构建最终可执行文件,将所有生成的.O文件打包生成可执行文件,这里就用到了刚才的OBJ_O
${TARGET}:${OBJ_O}
	$(CC) $(CFLAGS) $(OBJ_O) -o $@ $(LIB)
# -I      :$(DIR_Config) -I $(DIR_EPD) -I $(DIR_Examples): 包含这些目录,以便编译器能够找到相应的头文件。
#-o       把.c文件编译为 .o文件

    
# 从Examples目录编译目标文件
${DIR_BIN}/%.o:$(DIR_Examples)/%.c
	$(CC) $(CFLAGS) -c  $< -o $@ -I $(DIR_Config) -I $(DIR_GUI) -I $(DIR_EPD)
#  $< 对应的是 $(DIR_Examples)/%.c 中的 %.c,表示源文件的路径和名称,例如 ${DIR_EPD}/example.c。
#  $@ 对应的是 ${DIR_BIN}/%.o,表示目标文件的路径和名称,例如 ${DIR_BIN}/example.o。


# 从LCD目录编译目标文件
${DIR_BIN}/%.o:$(DIR_EPD)/%.c
	$(CC) $(CFLAGS) -c  $< -o $@ -I $(DIR_Config)

# 从Fonts目录编译目标文件
${DIR_BIN}/%.o:$(DIR_FONTS)/%.c
	$(CC) $(CFLAGS) -c  $< -o $@
	

# 从GUI目录编译目标文件
${DIR_BIN}/%.o:$(DIR_GUI)/%.c
	$(CC) $(CFLAGS) -c  $< -o $@ -I $(DIR_Config)  -I $(DIR_EPD) -I $(DIR_Examples)



# 从Config目录编译目标文件
${DIR_BIN}/%.o:$(DIR_Config)/%.c
	$(CC) $(CFLAGS) -c  $< -o $@ $(LIB)
	
# 清理规则,删除目标文件和可执行文件
clean :
	rm $(DIR_BIN)/*.* 
	rm $(TARGET)

编译打印(#是注释)

#${DIR_BIN}/%.o:$(DIR_EPD)/%.c
#	$(CC) $(CFLAGS) -c  $< -o $@ -I $(DIR_Config)

gcc -g -O0 -Wall -D USE_DEV_LIB -c  lib/LCD/Pico_LCD_0in96.c -o bin/Pico_LCD_0in96.o -I ./lib/Config
gcc -g -O0 -Wall -D USE_DEV_LIB -c  lib/LCD/Pico_LCD_1in14.c -o bin/Pico_LCD_1in14.o -I ./lib/Config
gcc -g -O0 -Wall -D USE_DEV_LIB -c  lib/LCD/Pico_LCD_1in3.c -o bin/Pico_LCD_1in3.o -I ./lib/Config
gcc -g -O0 -Wall -D USE_DEV_LIB -c  lib/LCD/Pico_LCD_1in44.c -o bin/Pico_LCD_1in44.o -I ./lib/Config
gcc -g -O0 -Wall -D USE_DEV_LIB -c  lib/LCD/Pico_LCD_1in8.c -o bin/Pico_LCD_1in8.o -I ./lib/Config
gcc -g -O0 -Wall -D USE_DEV_LIB -c  lib/LCD/Pico_LCD_2in.c -o bin/Pico_LCD_2in.o -I ./lib/Config


#${DIR_BIN}/%.o:$(DIR_Config)/%.c
#	$(CC) $(CFLAGS) -c  $< -o $@ $(LIB)
gcc -g -O0 -Wall -D USE_DEV_LIB -c  lib/Config/DEV_Config.c -o bin/DEV_Config.o -lpthread -lm
gcc -g -O0 -Wall -D USE_DEV_LIB -c  lib/Config/dev_hardware_SPI.c -o bin/dev_hardware_SPI.o -lpthread -lm
gcc -g -O0 -Wall -D USE_DEV_LIB -c  lib/Config/sysfs_gpio.c -o bin/sysfs_gpio.o -lpthread -lm

#${DIR_BIN}/%.o:$(DIR_GUI)/%.c
#	$(CC) $(CFLAGS) -c  $< -o $@ -I $(DIR_Config)  -I $(DIR_EPD) -I $(DIR_Examples)
gcc -g -O0 -Wall -D USE_DEV_LIB -c  lib/GUI/GUI_BMP.c -o bin/GUI_BMP.o -I ./lib/Config  -I ./lib/LCD -I ./examples
gcc -g -O0 -Wall -D USE_DEV_LIB -c  lib/GUI/GUI_Paint.c -o bin/GUI_Paint.o -I ./lib/Config  -I ./lib/LCD -I ./examples


#${DIR_BIN}/%.o:$(DIR_Examples)/%.c
#	$(CC) $(CFLAGS) -c  $< -o $@ -I $(DIR_Config) -I $(DIR_GUI) -I $(DIR_EPD)
    
gcc -g -O0 -Wall -D USE_DEV_LIB -c  examples/main.c -o bin/main.o -I ./lib/Config -I ./lib/GUI -I ./lib/LCD
gcc -g -O0 -Wall -D USE_DEV_LIB -c  examples/Pico_LCD_0in96_test.c -o bin/Pico_LCD_0in96_test.o -I ./lib/Config -I ./lib/GUI -I ./lib/LCD
gcc -g -O0 -Wall -D USE_DEV_LIB -c  examples/Pico_LCD_1in14_test.c -o bin/Pico_LCD_1in14_test.o -I ./lib/Config -I ./lib/GUI -I ./lib/LCD
gcc -g -O0 -Wall -D USE_DEV_LIB -c  examples/Pico_LCD_1in3_test.c -o bin/Pico_LCD_1in3_test.o -I ./lib/Config -I ./lib/GUI -I ./lib/LCD
gcc -g -O0 -Wall -D USE_DEV_LIB -c  examples/Pico_LCD_1in44_test.c -o bin/Pico_LCD_1in44_test.o -I ./lib/Config -I ./lib/GUI -I ./lib/LCD
gcc -g -O0 -Wall -D USE_DEV_LIB -c  examples/Pico_LCD_1in8_test.c -o bin/Pico_LCD_1in8_test.o -I ./lib/Config -I ./lib/GUI -I ./lib/LCD
gcc -g -O0 -Wall -D USE_DEV_LIB -c  examples/Pico_LCD_2in_test.c -o bin/Pico_LCD_2in_test.o -I ./lib/Config -I ./lib/GUI -I ./lib/LCD

#${DIR_BIN}/%.o:$(DIR_FONTS)/%.c
#	$(CC) $(CFLAGS) -c  $< -o $@
gcc -g -O0 -Wall -D USE_DEV_LIB -c  lib/Fonts/font12.c -o bin/font12.o
gcc -g -O0 -Wall -D USE_DEV_LIB -c  lib/Fonts/font12CN.c -o bin/font12CN.o
gcc -g -O0 -Wall -D USE_DEV_LIB -c  lib/Fonts/font16.c -o bin/font16.o
gcc -g -O0 -Wall -D USE_DEV_LIB -c  lib/Fonts/font20.c -o bin/font20.o
gcc -g -O0 -Wall -D USE_DEV_LIB -c  lib/Fonts/font24.c -o bin/font24.o
gcc -g -O0 -Wall -D USE_DEV_LIB -c  lib/Fonts/font24CN.c -o bin/font24CN.o
gcc -g -O0 -Wall -D USE_DEV_LIB -c  lib/Fonts/font48.c -o bin/font48.o
gcc -g -O0 -Wall -D USE_DEV_LIB -c  lib/Fonts/font50.c -o bin/font50.o
gcc -g -O0 -Wall -D USE_DEV_LIB -c  lib/Fonts/font8.c -o bin/font8.o




# 构建最终可执行文件,将所有生成的.O文件打包生成可执行文件,这里就用到了刚才的OBJ_O
#${TARGET}:${OBJ_O}
#	$(CC) $(CFLAGS) $(OBJ_O) -o $@ $(LIB)
gcc -g -O0 -Wall -D USE_DEV_LIB ./bin/Pico_LCD_0in96.o ./bin/Pico_LCD_1in14.o ./bin/Pico_LCD_1in3.o ./bin/Pico_LCD_1in44.o ./bin/Pico_LCD_1in8.o ./bin/Pico_LCD_2in.o ./bin/DEV_Config.o ./bin/dev_hardware_SPI.o ./bin/sysfs_gpio.o ./bin/GUI_BMP.o ./bin/GUI_Paint.o ./bin/main.o ./bin/Pico_LCD_0in96_test.o ./bin/Pico_LCD_1in14_test.o ./bin/Pico_LCD_1in3_test.o ./bin/Pico_LCD_1in44_test.o ./bin/Pico_LCD_1in8_test.o ./bin/Pico_LCD_2in_test.o ./bin/font12.o ./bin/font12CN.o ./bin/font16.o ./bin/font20.o ./bin/font24.o ./bin/font24CN.o ./bin/font48.o ./bin/font50.o ./bin/font8.o -o main -lpthread -lm

# -lpthread -lm   链接附加库

#-lpthread -lm 链接附加库

引用

该代码是luckFox公司 对于Luckfox Pico开发板驱动LCD屏幕的示例代码
https://wiki.luckfox.com/zh/Luckfox-Pico/Luckfox-Pico-LCD

我只是记录下自己的学习笔记,如有侵权请联系删除 qq:1074485750


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值