首页 > 其他分享 >CLion中使用add_subdirectory()模块化管理Stm32项目

CLion中使用add_subdirectory()模块化管理Stm32项目

时间:2024-10-26 21:17:46浏览次数:3  
标签:CMakeLists Log subdirectory Stm32 SOURCES add User txt

背景

文章目录


在Clion中使用STM32的时候,通常把自己开发的内容写在User目录中,然而需要将User目录下的源文件和头文件都添加到生成的 CMakeLits.txt中。对于不同风格的库,直接在生成的 CMakeLists.txt中添加资源会显得有些乱,可以使用cmake的**子目录(subdirectory)**解决这个问题。

  • Clion下的一个Stm32项目如图所示
    在这里插入图片描述

配置

在CMake中,通过使用add_subdirectory()命令可以添加子目录。这使得我们可以将项目划分为多个模块,并在每个子目录中管理自己的源文件和构建规则。参考模块化项目管理:CMake中的子目录和模块化构建
只需要在主CMakeLists.txt中添加(注意如果需要后续使用CubeMX重新生成代码,需要修改CMakeLists_template.txt),对于以后新的项目,只需要把User目录移动到新目录便可以直接复用以前写的模块,同时尽量不对生成的CMakeLists.txt做过多的修改

......
add_executable(${PROJECT_NAME}.elf ${SOURCES} ${LINKER_SCRIPT})
add_subdirectory(User) # 添加子模块User目录
target_link_libraries(${PROJECT_NAME}.elf User) # 主APP链接User库
set(HEX_FILE ${PROJECT_BINARY_DIR}/${PROJECT_NAME}.hex)
set(BIN_FILE ${PROJECT_BINARY_DIR}/${PROJECT_NAME}.bin)
......

文件目录结构如下,User,Log,EasyLog目录下均包含一个CMakeLists.txt文件
在这里插入图片描述

  • User目录下的CMakeLists.txt中写入
project(User C CXX)
file(GLOB SOURCES "*.c" "*.cc" "*.cpp")
include_directories(Log)
add_library(User STATIC ${SOURCES})
# 添加需要链接的库
add_subdirectory(Log)
target_link_libraries(User Log) # User链接Log库
  • Log目录下的CMakeLists.txt中写入
project(Log C CXX)
file(GLOB SOURCES "*.c" "*.cc" "*.cpp")
add_library(Log STATIC ${SOURCES})
# Log依赖的一个开源包
add_subdirectory(EasyLog)
target_link_libraries(Log PUBLIC EasyLog)
  • Log的子目录EasyLog的CMakeLists.txt中写入
project(EasyLog C CXX)
file(GLOB_RECURSE SOURCES "*.c" "*.cc" "*.cpp")
add_library(EasyLog STATIC ${SOURCES})
target_include_directories(EasyLog PUBLIC inc)

注意链接库时使用静态库的方式,stm32不支持动态库,将STATIC换成SHARED时编译cmake会出现警告
在这里插入图片描述
提示: Clion支持Cmake调试CMake debug | CLion Documentation,使用该功能可能很方便知道Cmake的一些变量信息

项目中使用了多级子目录,使用静态库,编译的时候会先编译静态库.a再连接
在这里插入图片描述

参考源码

zephyrhunt/Stm32H723_Debug: Debug Demo

标签:CMakeLists,Log,subdirectory,Stm32,SOURCES,add,User,txt
From: https://blog.csdn.net/qq_47288055/article/details/143259714

相关文章

  • [反悔贪心] Add One 2
    估计是全网最复杂题解。。。反向考虑:将\(a_i\)进行减操作,使得每个数都小于等于0。考虑差分,差分后将区间减转变为单点的加减,但是这样一来每个数都小于等于0的判定就变成了要判定前缀和是否都小于等于0,这不太好处理。考虑增加一个区间加操作,对\([l,r]\)的区间内的\(a_i\)......
  • STM32F7xx移植LVGL记录
    1简介项目中要用到屏幕,也是工作多年首次进行彩屏的开发。之前的项目大多是不需要用户界面的,或者是单色屏。GUI的开发,也就是使用过u8g2,这是个不熟悉的领域。但是也一直想要尝试彩屏的,这就有了机会。STM32就不多说了。简单说一下LVGL,在这之前也是听过LVGL这个开源图形库的鼎鼎大......
  • STM32,堆栈,RAM,FLASH
    收藏评论0刚拿到STM32时,你只编写一个死循环编译后,就会发现这么个程序已用了1600多的RAM,这要是在51单片机上,会心疼死了,这1600多的RAM跑哪儿去了,分析.map文件,你会发现是堆和栈占用的在startup_stm32f10x_md.s文件中,它的前面几行就有以下定义:这下明白了吧,STM32在启动......
  • STM32CubeMX下载芯片固件库失败
    1.错误截图使用STM32CubeMX下载STM32H7R固件失败如下所示:Forunavailablefiles,youcandownloadthemmanuallywiththe"FromLocalbutton"实际图片如下所示出现这个问题的时候,STM32CubeMX的软件重新卸载和安装过,但是均无效。网络也更换过,也无效,所以只有通过错误的......
  • STM32:GPIO
    目录一、简介二、结构三、功能        1.GPIO        2.外部中断四、示例 一、简介    输入输出(IO)是单片机最基本的外设功能之一。根据型号不同,STM32的IO端口数量不同,如64引脚的STM32F103RBT6有A、B、C、D四个IO端口,每个端口有16个引脚。......
  • 通过 PowerShell 更换以太网适配器的 IPv6 DNS 服务器,可以使用 Set-DnsClientServerAd
    通过PowerShell更换以太网适配器的IPv6DNS服务器,可以使用Set-DnsClientServerAddresscmdlet来设置DNS服务器地址。以下是如何操作的详细步骤:步骤1:打开PowerShell以管理员身份运行PowerShell:右键单击开始菜单,选择 WindowsPowerShell(管理员)。步骤2:......
  • STM32配置HID设备时主机识别不到力反馈的解决办法
    这个问题困扰我快一个星期了,我仔仔细细阅读了DeviceClassDefinitionforPhysicalInterfaceDevices(PID)Version1.0和HIDUsageTablesFORUniversalSerialBus(USB)。都没有找到识别不到力反馈的原因,按理说配置完报告描述符就能显示力反馈了,但是我这边死活识别不到,于......
  • 通过 PowerShell 添加网络打印机并创建一个标准 TCP/IP 端口,您可以使用 Add-PrinterPo
    通过PowerShell添加网络打印机并创建一个标准TCP/IP端口,您可以使用Add-PrinterPort和Add-Printercmdlet。以下是一个详细的示例,演示了如何创建TCP/IP端口并添加网络打印机。步骤创建TCP/IP端口添加打印机示例代码powershellCopyCode#设置打印机的IP地址和......
  • STM32H723 ADC+DMA 误差解决
    很多论坛提到STM32H723ADC不准的问题,在安富莱的论坛上很多。实测STM32CubeFW_H7V1.9.1这个库生成的ADC的驱动代码可以实现ADC的精确测量。需要注意的是在ADC的初始化后,要对ADC进行校准,如果不进行校准ADC1ADC2会有50个ADC左右的误差,ADC3有接近130个ADC值得误差。`voidMX_AD......
  • 基于STM32的多功能数控电源设计
    基于STM32的多功能数控电源设计摘要本文介绍了基于STM32单片机的多功能数控电源设计。该电源具有输出电压和电流在一定区间内连续可调、实时显示参数、具备温度检测和过流保护功能等特点。采用STM32F103系列单片机作为核心控制器,通过模块化设计实现高精度调节、实时显示和安......