基于stm32f4的自制menuconfig及makefile工程
2025-03-10 来源:jianshu
一,前言
之前已经定制了自己的menuconfig,并且让其生成#define xxx xxx,这样的二次开发工具还是有一些应用场景的,比如不熟悉功能的新手,通过界面的帮助提示来选择功能模块,最后生成config.h文件用来构建code。但是menuconfig主要还是用来生成makefile需要用的配置参数。所以呢,我又换成了之前轻度定制的menuconfig工具,并且基于我之前制作的stm32f4的makefile进行了简单的修改后,加入了.config的配置参数使用,参考nuttxOS工程中的make.defs,我在每个文件夹下添加了make.mk。一个完整的基于win10,带menuconfig的gcc makefile编译工程就完成了。
二,主要修改点
3.1 makefile的主要修改点
原来我做的makefile工程只能放入需要编译的c和h文件,说白了,不能多放预留文件。当然,我之前想到的方法就是通过一个h文件作为宏开关,现在支持可配置了,不需要添加h宏定义文件,也可以多放些预留文件啦!
修改前
C_SOURCES = $(foreach dir, $(DIRS), $(wildcard $(dir)/*.c)) C_HEADERS = $(foreach dir, $(DIRS), $(wildcard $(dir)/*.h))
修改后
-include Src/make.mk C_SOURCES = $(CSRCS-y)
3.2 来揭开make.mk神秘的面纱
Src文件夹下的make.mk,主要包含了关键路径,其中配置项CONFIG_USE_HARDWARE可以用来选择是否要编译Hardware文件夹的内容。
-include $(TOP_SRC)/Core/make.mk-include $(TOP_SRC)/Drivers/make.mk ifeq ($(CONFIG_USE_HARDWARE),y)-include $(TOP_SRC)/Hardware/make.mk endif-include $(TOP_SRC)/System/make.mk-include $(TOP_SRC)/User/make.mk
Hardware文件夹下的make.mk,里面有2个配置项用来决定是否要编译c文件。而其中VPATH是比较关键的,我之前用的是小写的vpath %.c $(sort $(dir $(C_SOURCES)))直接写入makefile的,但是现在我已经注释掉了,因为引入了make.mk,里面包括了大写的VPATH就直接设置了搜索c文件的路径。C_HEADERS_FOLDER是设置的头文件路径,直接在make.mk中添加-I也是可以的,但是我期望make.mk中尽量简短,所以我在makefile中添加$(addprefix -I,$(C_HEADERS_FOLDER))即可。关于DEPPATH是我从nuttxOS中参考来的,没删除,但这应该是不起作用的。
CSRCS-$(CONFIG_USE_LED) += led.c CSRCS-$(CONFIG_USE_KEY) += key.c VPATH += :$(TOP_SRC)/Hardware C_HEADERS_FOLDER += '$(TOP_SRC)/Hardware'
3.3 至于Kconfig就使用标准语法即可
我使用了2个myKonfig,主的包含一个子的myKonfig,这个就是标准语法,没什么好说了。
menu 'Hardware'source Src/Hardware/myKconfig endmenu
三,效果演示
定制的主界面

image.png
第一次配置中没有包括hardware文件夹

image.png
第二次追加配置,支持hardware文件夹中LED模块的配置项,make命令后,会进行增量编译如下

image.png
文件夹结构展示

image.png
四,总结
学以致用,乐趣无穷。用着自己开发的stm32F4工具链。基于win10 gcc的makefile及menuconfig的二次开发感觉好有成就感。虽然这和计算机视觉关系不大,有点跑题。但是难得花点时间玩玩,base工程环境搭建及各类实用工具开发,掌握这些内容是可以用来提高工作效率的。
- 【STM32F429学习记录】HAL库版——ADC+DMA双缓冲采样和软件滤波例程
- [STM32F407系列学习]按键开关控制单个数码管加减计数
- STM32F407VET6开发板移植基于HAL库的正点原子LCD屏幕驱动
- STM32F407 ADC 模式详解:单次转换、连续转换、扫描模式、非扫描模式
- 嵌入式stm32f429上成功跑通主流Linux 4.13
- STM32F429IDISCOVERY simulink 仿真
- STM32F429-Discovery 使用stlink-1.2.0 在Linux下烧写调试RTEMS
- STM32F407VET6之IAR之ewarm7.80.4工程建立(基于官方固件库1.6版本) 的工程文件目录
- STM32F407VET6之IAR之ewarm7.80.4工程建立(基于官方固件库1.6版本)
- STM32F407 ------ 使用定时器实现精确延时
- 六大全新产品系列推出,MCX A微控制器家族迎来创新
- 意法半导体全新STM32C5系列,重新定义入门级微控制器性能与价值,赋能万千智能设备
- 模组复用与整机重测在SRRC、CCC、CTA/NAL认证中的实践操作指南
- 从控制到系统:TI利用边缘AI重塑嵌入式MCU的边界
- 有源晶振与无源晶振的六大区别详解
- 英飞凌持续巩固全球微控制器市场领导地位
- 使用 Keil Studio for Visual Studio Code开发 STM32 设备
- 蓝牙信道探测技术原理与开发套件实践
- Microchip 推出生产就绪型全栈边缘 AI 解决方案,赋能MCU和MPU实现 智能实时决策
- LoRa、LoRaWAN、NB-IoT与4G DTU技术对比及工业无线方案选型分析




