vscode开发stm32添加新的头文件路径和包含源文件

本文介绍了使用CMake管理项目文件的实用方法。在CmakeLists.txt中,可通过file(GLOB)命令批量添加指定目录下的.c源文件,并利用list(APPEND)合并多个目录的源文件列表,避免变量覆盖问题。对于头文件管理,则需在target_include_directories()中添加自定义.h文件路径。文章以LogisticsRobot项目为例,详细说明了Driver、Application等目录的源文件包含方式,并解释了list命令的作用机制。该方法能有效提升CMake项目管理效率,适用于需要批量处理多个目录文件的构建场景。

目录

一、打开CmakeLists.txt

二、包含源文件

1.查找目录下的.c文件

2.放入文件列表变量

3.查找多个目录的情况

4.添加list的原因

三、包含头文件路径


本文基于cmake编译器

一、打开CmakeLists.txt

在vscode的左侧目录中找到并打开CmakeLists.txt文件

二、包含源文件

在target_sources()中添加对应.c文件的路径即可。

但在target_sources()中包含源文件需要一个个文件写,例如led.c,key.c。效率不高

1.查找目录下的.c文件

可在CmakeLists.txt中添加以下代码,批量将路径LogisticsRobot/Driver下的.c文件包含

复制代码
file(GLOB DRIVER_SOURCES "LogisticsRobot/Driver/*.c")

注意:LogisticsRobot/Driver/是我自己的目录,要把这个改成自己所需要包含的文件的路径

2.放入文件列表变量

记得在target_sources()中添加以下代码

复制代码
${DRIVER_SOURCES}  # 这里把文件列表变量放进来

3.查找多个目录的情况

不能直接如下添加三个路径

复制代码
file(GLOB DRIVER_SOURCES "LogisticsRobot/Driver/*.c")

file(GLOB APP_SOURCES "LogisticsRobot/Application/*.c")

file(GLOB MIDDLEWARE_SOURCES "LogisticsRobot/Middleware/*.c")

这样写会覆盖 DRIVER_SOURCES 变量 ,导致只保留最后一行 file(GLOB DRIVER_SOURCES "LogisticsRobot/Middleware/*.c"),前两行的 DriverApplication 目录的源文件会丢掉。

正确写法,增加

复制代码
list(APPEND DRIVER_SOURCES ${APP_SOURCES})

最终代码

复制代码
# 查找 Driver 目录下所有 .c 文件
file(GLOB DRIVER_SOURCES "LogisticsRobot/Driver/*.c")
# 追加 Application 目录
file(GLOB APP_SOURCES "LogisticsRobot/Application/*.c")
list(APPEND DRIVER_SOURCES ${APP_SOURCES})

# 追加 Middleware 目录
file(GLOB MIDDLEWARE_SOURCES "LogisticsRobot/Middleware/*.c")
list(APPEND DRIVER_SOURCES ${MIDDLEWARE_SOURCES})

4.添加list的原因

list() 是 CMake 中操作列表的命令,cmake里面可以存放一个列表,如

复制代码
set(MY_SOURCES a.c b.c c.c)

这里 MY_SOURCES 就是一个列表,包含三个元素:a.cb.cc.clist() 命令可以对这种列表进行操作,例如追加、插入、删除等。APPEND 表示"追加到列表末尾"。${APP_SOURCES} 是另一个列表变量。

三、包含头文件路径

在以下函数中添加我们自己创建的.h文件的路径

复制代码
target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE

    # Add user defined include paths
   
)

添加完的情况如下

相关推荐
czwxkn18 小时前
8STM32(stdl)低功耗模式
stm32·单片机·嵌入式硬件
czwxkn18 小时前
9STM32(stdl)看门狗
stm32·单片机·嵌入式硬件
生而为虫19 小时前
在VScode中使用Claude Code agent并配置模型(仅mac电脑实际操作,windows电脑未实际操作如有问题可留言)
windows·vscode·macos
LCG元19 小时前
STM32实战:基于STM32F103的SPI通信驱动W25Qxx Flash存储
stm32·单片机·嵌入式硬件
iCxhust20 小时前
led_pattern = (led_pattern << 1) | (led_pattern >> 7)执行顺序
stm32·单片机·嵌入式硬件·51单片机·微机原理
Deitymoon20 小时前
STM32——串口通信发送字符串
stm32·单片机·嵌入式硬件
多看多敲多思考1 天前
华润微CS32ME10 MCU使用教程(2)---CS32ME10之UART串口模块使用
stm32·单片机·嵌入式硬件·mcu
黑白园1 天前
STM32系统时钟由72M修改为36M验证示例
stm32·单片机·嵌入式硬件
LCG元1 天前
基于ARM7的LCD设计与实现:S3C4510B通用IO口控制液晶模块
stm32·单片机·嵌入式硬件
山后太阳1 天前
Keil5(MDK-ARM)完整下载安装教程+入门教程:从零搭建STM32开发环境
arm开发·stm32·嵌入式硬件