cmake 版本 arm_rt-thread搭建cmake基本编译环境

最近clion用的比较多,和mdk一对比,clion实在是趁手了许多,所以一直就像在clion进行开发,之前使用clion编辑代码,mdk进行编译,总觉得优点太low了,所以为了一劳永逸,最近把rtthread在clion中搭建好了,并且集成了编译,下载,debug,这里分享出来以供参考。

目前我也只搭建了编译环境,可以对代码进行编译,并没有搭建起来构建环境,无法对源码进行选择和组织。

RT-Thread官方的构建工具

官方的rt-thread使用的是scons进行构建。

SCons 简介

SCons 是一套由 Python 语言编写的开源构建系统,类似于 GNU Make。它采用不同于通常 Makefile 文件的方式,而是使用 SConstruct 和 SConscript 文件来替代。这些文件也是 Python 脚本,能够使用标准的 Python 语法来编写。所以在 SConstruct、SConscript 文件中可以调用 Python 标准库进行各类复杂的处理,而不局限于 Makefile 设定的规则。

在 SCons 的网站上可以找到详细的 SCons 用户手册。

什么是构建工具

构建工具是一种软件,它可以根据一定的规则或指令,将源代码编译成可执行的二进制程序。这是构建工具最基本也是最重要的功能。实际上构建工具的功能不止于此,通常这些规则有一定的语法,并组织成文件。这些文件用来控制构建工具的行为,在完成软件构建之外,也可以做其他事情。

目前最流行的构建工具是 GNU Make。很多知名开源软件,如 Linux 内核就采用 Make 构建。Make 通过读取 Makefile 文件来检测文件的组织结构和依赖关系,并完成 Makefile 中所指定的命令。

由于历史原因,Makefile 的语法比较混乱,不利于初学者学习。此外在 Windows 平台上使用 Make 也不方便,需要安装 Cygwin 环境。为了克服 Make 的种种缺点,人们开发了其他构建工具,如 CMake 和 SCons 等。

而Clion使用的是cmake进行构建。所以需要把rt-thread使用cmake重新进行构建。

MDK转换到cmake

事实上之前开发项目,也并没有用到scons,大部分情况都是

选择对应芯片的bsp->使用scons生成mdk5工程->在mdk5进行开发

scons只是作为一个生成mdk5工程的工具而已。不知道这是不是大部分开发stm32嵌入式工程师的现状?

那么问题来了,要把MDK的工程转到cmake需要做哪些工作?

编写Cmakelists.txt

首先需要一份基础的Cmakelists

clion2019.1版本之后支持将stm32cube的工程转换为cmakelist,使用该功能可以得到一份基础的cmakelist

#THIS FILE IS AUTO GENERATED FROM THE TEMPLATE! DO NOT CHANGE!

使用这份Cmakelist已经可以对工程进行编译。但对于rt-thread来说,这份cmakelists还不够。

更换编译器带来的变化

MDK使用的是ARM_CC编译器,是一款收费的编译器。用cmake构建一般选择

arm-none-eabi​developer.arm.com

该编译器使用的libc为newlib,rt-thread已经为newlib做了适配,编译的时候引入对应的文件,并开启RT_USING_NEWLIB

components/libc/compilers/newlib/libc.c
components/libc/compilers/newlib/libc.h
components/libc/compilers/newlib/libc_syms.c
components/libc/compilers/newlib/stdio.c
components/libc/compilers/newlib/syscalls.c
components/libc/compilers/newlib/termios.h
components/libc/compilers/newlib/time.c
components/libc/compilers/newlib/sys/dirent.h
components/libc/compilers/newlib/sys/mman.h
components/libc/compilers/newlib/sys/statfs.h
components/libc/compilers/newlib/sys/termios.h

更换编译器后,必须要更换对应的启动文件,HAL库中有对应gcc的启动文件

Drivers/CMSIS/Device/ST/STM32F4xx/Source/Templates/gcc

rt-thread对应的内核port也应切换到gcc版本

libcpu/arm/cortex-m4/context_gcc.S

3.修改部分源码,修改链接脚本(可选)

为什么要修改源码?因为编译器修改后,如果用到了编译器的一些特定的功能,则可能需要修改源码。

比如我这个项目中,正好使用到了外部SRAM,之前在MDK中是这样定义的:

uint8_t 

这个是ARM_CC的用法,在gcc需要做如下修改:

uint8_t nodeDataBlockBuff[DATA_BLOCK_BUFF_SIZE] __attribute__((section(".sram")));

并且在链接脚本中创建这个section

MEMORY
{
    CODE (rx) : ORIGIN = 0x08000000, LENGTH =  512k /* 512KB flash */
    RAM1 (rw) : ORIGIN = 0x20000000, LENGTH =  128k /* 128K sram */
    RAM2 (rw) : ORIGIN = 0x10000000, LENGTH =   64k /* 64K sram */
    RAM3 (rw) : ORIGIN = 0x68000000, LENGTH = 1024k /* 1024KB sram */
}

SECTIONS
{
    ...
    ...
    ...
    /* sram */
    .sram :
    {
       . = ALIGN(4);
       *(.sram) /* Startup code */
       . = ALIGN(4);
    } >RAM3
    ...
    ...
    ...
}

4.配置openOCD

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CMake报错"CUBLAS_LIBRARY-NOTFOUND"通常发生在CUDA(Compute Unified Device Architecture)开发中,特别是当你尝试链接CUDA相关的库,如cuBLAS(CUDA Basic Linear Algebra Subroutines),而系统找不到预定义的cuda libraries路径或这些库文件不存在的情况。 具体原因可能包括: 1. **环境变量未配置**:`CUDA_HOME` 或 `CUDA_PATH` 环境变量没有设置正确,导致CMake无法找到cuBLAS库的位置。 2. **cuBLAS库缺失**:安装CUDA的时候可能没有正确安装cuBLAS组件,或者库文件已经损坏或移除。 3. **依赖管理问题**:如果你是在某个特定的项目结构中遇到这个问题,可能是项目的CMakeLists.txt文件中没有正确设置cuBLAS的find_package()调用或者links。 4. **CUDA版本不兼容**:cuBLAS的版本可能与你的CUDA版本不匹配,需要确保它们是配套使用的。 为了解决这个问题,你可以尝试以下步骤: - **检查环境变量**:确认CUDA相关环境变量已设置并指向正确的安装目录。 - **重新安装CUDA**:如果之前安装有问题,尝试卸载后重新安装CUDA和所有相关的组件。 - **更新CMakeLists.txt**:确保CMake文件正确地查找和链接cuBLAS,可能需要添加`find_package(CUDA REQUIRED)`和`target_link_libraries`指令。 - **运行`cmake --verbose=1`**:增加详细信息,查看CMake寻找库的具体过程,有助于定位问题所在。 相关问题: 1. 如何通过CMake配置CUDA及其库? 2. 如果我在Windows上遇到这个错误,应该如何解决? 3. 对于Mac用户,如何保证cuBLAS正确安装并且被CMake找到?

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值