单片机cmake使用笔记

一、同时拥有两个工程项目时的配置(APP  IAP)方便git等工具的管理

1.1、目录结构如下:

|-Power_prj

|-CMakelists.txt

|        |-Power_APP

|        |        |-src

|        |        |-include

|        |        |-main.c

|        |        |-CMakelists.txt

|        |-Power_IAP

|        |        |-src

|        |        |-include

|        |        |-main.c

|        |        |-CMakelists.txt

1.2、CMakelists.txt说明:

Power_prj下的CMakelists.txt里面包含两个项目即可

cmake_minimum_required(VERSION 3.14.0)


project(hc32f072_prj)  
  
# 添加子目录,这会触发子目录中的CMakeLists.txt文件的执行  
add_subdirectory(Power_APP/)
add_subdirectory(Power_IAP/)



对应Power_APP与Poer_IAP中的CMakelists.txt按实际需求编写,路径生成文件通过set(CUSTOM_BIN_DIR "${CMAKE_BINARY_DIR}/Power_IAP")  配置。另头文件的使用需使用target_include_directories进行路径的加载,否则源文件中调用时需要指定绝对路径,示例如下(Power_IAP):

cmake_minimum_required(VERSION 3.14.0)

set(CMAKE_SYSTEM_NAME Generic)
set(CMAKE_SYSTEM_PROCESSOR arm)
set(CUSTOM_BIN_DIR "${CMAKE_BINARY_DIR}/Power_IAP")  

project(hc32f072_Iap)
enable_language(ASM C)

# 全局宏定义
add_definitions(
    -D__STACK_SIZE=8*1024
    -D__HEAP_SIZE=32*1024
    -DHC32F448
    -DUSE_DDL_DRIVER
)

add_compile_options(
    -mno-unaligned-access
    -fgnu89-inline
    # -mstrict-align
)

add_executable(
    ${PROJECT_NAME}.elf
        # startup files
        prj/startup/startup_ARMCM4.S
        prj/startup/vector.c
        # libc files
        prj/libc/libc-hooks.c
        # hc32 ll library files
        Lib/src/hc32_ll_adc.c
        Lib/src/hc32_ll_aes.c
        Lib/src/hc32_ll_aos.c
        Lib/src/hc32_ll_clk.c
        Lib/src/hc32_ll_cmp.c
        Lib/src/hc32_ll_crc.c
        Lib/src/hc32_ll_ctc.c
        Lib/src/hc32_ll_dac.c
        Lib/src/hc32_ll_dbgc.c
        Lib/src/hc32_ll_dcu.c
        Lib/src/hc32_ll_dma.c
        Lib/src/hc32_ll_efm.c
        Lib/src/hc32_ll_emb.c
        Lib/src/hc32_ll_event_port.c
        Lib/src/hc32_ll_fcg.c
        Lib/src/hc32_ll_fcm.c
        Lib/src/hc32_ll_gpio.c
        Lib/src/hc32_ll_hash.c
        Lib/src/hc32_ll_i2c.c
        Lib/src/hc32_ll_icg.c
        Lib/src/hc32_ll_interrupts.c
        Lib/src/hc32_ll_keyscan.c
        Lib/src/hc32_ll_mcan.c
        Lib/src/hc32_ll_mpu.c
        Lib/src/hc32_ll_pwc.c
        Lib/src/hc32_ll_qspi.c
        Lib/src/hc32_ll_rmu.c
        Lib/src/hc32_ll_rtc.c
        Lib/src/hc32_ll_smc.c
        Lib/src/hc32_ll_spi.c
        Lib/src/hc32_ll_sram.c
        Lib/src/hc32_ll_swdt.c
        Lib/src/hc32_ll_tmr0.c
        Lib/src/hc32_ll_tmr4.c
        Lib/src/hc32_ll_tmr6.c
        Lib/src/hc32_ll_tmra.c
        Lib/src/hc32_ll_trng.c
        Lib/src/hc32_ll_usart.c
        Lib/src/hc32_ll_utility.c
        Lib/src/hc32_ll_wdt.c
        Lib/src/hc32_ll.c
        #application files
        src/IAP_Init/IAP_Init.c
        src/uFlash/uFlash.c
        src/com/com.c
        src/Modem/modem.c
        src/SysTick/SysTick.c
        src/main.c
        # App/BootLoader/BootLoader.c
        # dev files
        # Dev/Relay/Fan_P.c
        # Dev/Lora/Lora.c
        # Dev/SD2506/SD2506API.c
        Dev/bsp/bsp_clk.c
        Dev/bsp/bsp_usart.c
        Dev/bsp/bsp_crc.c
        Dev/bsp/bsp_ringbuf.c
        # Dev/bsp/bsp_flash.c
        # Dev/bsp/bsp_timer.c
        # Dev/bsp/bsp_wdt.c
        # Dev/bsp/bsp_I2C.c
        Dev/HC32_Common/ev_hc32f448_lqfp80.c
        Dev/HC32_Common/system_hc32f448.c
        Dev/WDI/WDI_Init.c
)

target_include_directories(
    ${PROJECT_NAME}.elf
    PRIVATE
        # app include files dir
        # ./App/BootLoader
        ./src/uFlash
        ./src/com
        ./src/IAP_Init
        ./src/Modem
        ./src/SysTick
        # dev include files dir
        ./Dev/bsp
        ./Dev/WDI
        ./Dev/HC32_Common
        #lib include files dir
        ./Lib/inc     
)

target_compile_options(
     ${PROJECT_NAME}.elf
     PRIVATE
)

target_link_options(
    ${PROJECT_NAME}.elf
    PRIVATE
        -T${CMAKE_SOURCE_DIR}/Power_IAP/prj/linker/gcc.ld
)

add_custom_target(
    ${PROJECT_NAME}.asm 
    DEPENDS 
        ${PROJECT_NAME}.elf 
    COMMAND 
        ${CMAKE_OBJDUMP} -d ${CUSTOM_BIN_DIR}/${PROJECT_NAME}.elf > ${CUSTOM_BIN_DIR}/${PROJECT_NAME}.asm
)

add_custom_target(
    ${PROJECT_NAME}.bin
    DEPENDS
	    ${PROJECT_NAME}.elf 
    COMMAND 
        ${CMAKE_OBJCOPY} -O binary ${CUSTOM_BIN_DIR}/${PROJECT_NAME}.elf ${CUSTOM_BIN_DIR}/${PROJECT_NAME}.bin
)

add_custom_target(${PROJECT_NAME}.hex
    DEPENDS 
        ${PROJECT_NAME}.elf 
    COMMAND 
        ${CMAKE_OBJCOPY} -O ihex ${CUSTOM_BIN_DIR}/${PROJECT_NAME}.elf ${CUSTOM_BIN_DIR}/${PROJECT_NAME}.hex
)

add_custom_target(${PROJECT_NAME}.info
    DEPENDS 
        ${PROJECT_NAME}.asm
    COMMAND 
        ${CMAKE_SIZE} ${CUSTOM_BIN_DIR}/${PROJECT_NAME}.elf
)

二、cmake使用命令暂记

2.1、Windows下使用cmake清除build下的文件:

        cmake --build ./ --target clean

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/770244.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

二氯二氰苯醌(DDQ)市场空间受限 行业需要寻求新的发展方向及机遇

二氯二氰苯醌(DDQ)市场空间受限 行业需要寻求新的发展方向及机遇 二氯二氰苯醌(DDQ),学名2,3-二氯-5,6-二氰基苯醌,是一种亮黄色粉末状化合物,具有强氧化性。DDQ在化学合成中具有重要用途&#…

LInux安装nginx方法以及配置文件释义

Linux安装Nginx方法以及所遇见的坑 安装nginx注意细节1、安装所需要的依赖2、下载以及安装nginx3、所有命令执行完毕,启动nginx4、开通防火墙执行完以上所有命令,nginx安装以及启动步骤完成,满足基础访问,访问地址如下&#xff1a…

21.《C语言》——【位操作符】

🌻开场语 亲爱的读者,大家好!我是一名正在学习编程的高校生。在这个博客里,我将和大家一起探讨编程技巧、分享实用工具,并交流学习心得。希望通过我的博客,你能学到有用的知识,提高自己的技能&a…

视频怎么制作gif动态图片?GIF制作方法分享

视频怎么制作gif动态图片?视频制作GIF动态图片,不仅保留了视频的生动瞬间,还赋予了图像循环播放的魔力。这一技能不仅让创意表达更加丰富多彩,还极大地提升了视觉传播的效率和趣味性。在快节奏的数字时代,GIF动图以其小…

Unity 数据持久化【PlayerPrefs】

1、数据持久化 文章目录 1、数据持久化PlayerPrefs基本方法1、PlayerPrefs概念2、存储相关3、读取相关4、删除数据思考 信息的存储和读取 PlayerPrefs存储位置1、PlayerPrefs存储的数据在哪个位置2、PlayerPrefs 数据唯一性思考 排行榜功能 2、Playerprefs实践1、必备知识点-反…

文化创新与社交媒体:探索Facebook的足迹

在过去的十多年里,Facebook从一个简单的校园社交网络发展成为全球最大的社交媒体平台之一。它不仅改变了人们的沟通方式,更在许多方面推动了文化的创新和变革。本文将深入探索Facebook如何通过其平台的演进和功能创新,成为文化创新的重要推动…

SpringBoot实战(二十八)集成 Collabora Online 实现在线编辑

目录 一、什么是 Collabora Online?二、Docker 下载并启动 CODE2.1 拉取镜像2.2 启动镜像2.3 访问界面2.4 补充:nextcloud 的镜像启动三、SpringBoot 实现 WOPI 服务3.1 什么是WOPI?3.2 Spring Boot 简单实现3.3 另一种实现方式3.4 总结四、补充:coolwsd.xml 核心配置介绍c…

SpringBoot集成beetl模板快速入门

在pom文件引入maven依赖 <dependency><groupId>com.ibeetl</groupId><artifactId>beetl-framework-starter</artifactId><version>1.1.81.RELEASE</version></dependency>写一个controller /*** author * create * descripti…

Java开发-实际工作经验和技巧-0005-使用MapStruct进行两个实体类的转换,出现所有属性值都为null的情况

Java开发-实际工作经验和技巧-0005-使用MapStruct进行两个实体类的转换,出现所有属性值都为null的情况 更多内容欢迎关注我&#xff08;持续更新中&#xff0c;欢迎Star✨&#xff09; Github&#xff1a;CodeZeng1998/Java-Developer-Work-Note 技术公众号&#xff1a;Code…

推荐系统三十六式学习笔记:原理篇.MAB问题|16|简单却有效的Bandit算法

目录 推荐就是选择MAB问题Bandit算法1.汤普森采样算法2.UCB算法3.Epsilon贪婪算法4.效果对比 冷启动总结 推荐系统的使命就是建立用户和物品之间的连接。建立连接可以理解成;为用户匹配到最佳的物品&#xff1b;但也有另一个理解就是&#xff0c;在某个时间某个位置为用户选择最…

Redis 管道(Pipeline)是什么?有什么用?

目录 1. redis 客户端-服务端模型的不足之处 2. redis 管道是什么&#xff1f;有什么好处&#xff1f; 3. 管道的使用场景 4. 管道使用的注意事项 1. redis 客户端-服务端模型的不足之处 众所周知&#xff0c;redis 是一个客户端-服务端的模型设计&#xff0c;客户端向服务…

Zoom视颊会议软件使用

GPT-3.5 (OpenAI) Zoom是一款极受欢迎的视频会议软件。使用Zoom可以方便地进行视频会议、远程授课、在线研讨会等活动。以下是Zoom的使用步骤&#xff1a; 1. 下载Zoom客户端 可以在Zoom官网上下载对应平台的Zoom客户端。下载并完成安装后&#xff0c;双击打开客户端。 2. 创建…

大数据开发中如何计算用户留存及SQL示例

在大数据开发领域&#xff0c;用户留存是一个关键指标&#xff0c;它反映了产品吸引并保留用户的能力。 留存率的计算不仅有助于评估产品的健康状况&#xff0c;还能为产品优化和市场策略提供重要依据。 本文将详细介绍如何在大数据开发中计算用户留存&#xff0c;并附带具体…

大数据之路 读书笔记 Day2

大数据之路 读书笔记 Day2 日志采集——浏览器的页面采集 一、分类 #mermaid-svg-8c9sRexRDdSB9pWA {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-8c9sRexRDdSB9pWA .error-icon{fill:#552222;}#mermaid-svg-8c9…

【论文解读】CVPR2024:DUSt3R: Geometric 3D Vision Made Easy

论文“”https://openaccess.thecvf.com/content/CVPR2024/papers/Wang_DUSt3R_Geometric_3D_Vision_Made_Easy_CVPR_2024_paper.pdf 代码&#xff1a;GitHub - naver/dust3r: DUSt3R: Geometric 3D Vision Made Easy DUSt3R是一种旨在简化几何3D视觉任务的新框架。作者着重于…

002-关于Geogebra软件的介绍及与MatLab的区别

为什么要学Geogebra&#xff1f; 因为和MatLab的科学计算相比&#xff0c;GeoGebra重点突出教学展示&#xff0c;对于教师、学生人群来讲再合适不过了&#xff0c;尤其是可以融入到PPT里边呈现交互式动画&#xff0c;想想听众的表情&#xff01;这不就弥补了看到PPT播放数学公…

邮箱smtp发送邮件失败的原因?怎么做排查?

邮箱smtp发送邮件失败的解决方法&#xff1f;SMTP错误代码解析&#xff01; 在使用SMTP发送邮件时&#xff0c;我们时常会遇到各种问题&#xff0c;导致邮件发送失败。了解这些问题的根本原因可以帮助我们更好地解决它们。AoKSend将详细探讨邮箱SMTP发送邮件失败的几大原因&am…

在 WebGPU 与 Vulkan 之间做出正确的选择(Making the Right Choice between WebGPU vs Vulkan)

在 WebGPU 与 Vulkan 之间做出正确的选择&#xff08;Making the Right Choice between WebGPU vs Vulkan&#xff09; WebGPU 和 Vulkan 之间的主要区别WebGPU 是什么&#xff1f;它适合谁使用&#xff1f;Vulkan 是什么&#xff1f;它适合谁使用&#xff1f;WebGPU 和 Vulkan…

mac 上 Docker Desktop的免费开源的替代工具Colima

当谈到在macOS上运行容器时&#xff0c;Docker长期以来一直是首选。但是&#xff0c;必须解决使用适用于macOS的Docker Desktop时出现的一些限制&#xff0c;特别是对于大中型公司&#xff0c;最大的问题是需要购买许可证。另外&#xff0c;macOS 版Docker Desktop的性能问题也…

单调栈(左小大,右小大)

①寻找每个数左边第一个比它小的数 给定一个长度为 N 的整数数列&#xff0c;输出每个数左边第一个比它小的数&#xff0c;如果不存在则输出 −1。 输入样例&#xff1a; 3 4 2 7 5 输出样例&#xff1a; -1 3 -1 2 2 从左到右遍历&#xff0c;用单调递增&#xff08;栈底到栈顶…
最新文章