当前位置: 首页 > news >正文

94、【OS】【Nuttx】【构建】cmake 配置介绍

【声明】本博客所有内容均为个人业余时间创作,所述技术案例均来自公开开源项目(如Github,Apache基金会),不涉及任何企业机密或未公开技术,如有侵权请联系删除

背景

接之前 blog
【OS】【Nuttx】【构建】用 cmake 构建工程
【OS】【Nuttx】【构建】cmake 支持构建的目标
【OS】【Nuttx】【构建】cmake menuconfig 目标
有了前面的基础,现在来看下官方文档对 cmake 构建这里是怎么描述的

CMake 配置介绍

CMake 配置构建整体方法在 Nuttx 文档有介绍,下面来分析下
在这里插入图片描述

CMake 初始化配置

首先这里第一个点,使用 CMake 初始化配置,就有比较多的细节
在这里插入图片描述
下面说下这里面的关键点:

  • 使用 CMake 进行初始化配置,第一步是要基于某个硬件单板来初始化 Nuttx 的配置,而这个配置是用已有的预设配置来生成的,在 boards 目录下,可以看到各种类型板的预设配置 defconfig,比如 stm32f429i-disco:nsh
    在这里插入图片描述

  • 这里 configure.sh -L 命令,可以列出所有 Nuttx 支持的开发板及其配置,这个之前 blog 【OS】【Nuttx】【构建】配置 stm32 工程 已经分析过了

  • configure.sh 后面的 | less 表示将输出结果分页显示,方便查看,| 在 Linux 中叫管道,作用是把前一个命令的输出,当作后一个命令的输入,这里是把前面列出 Nuttx 支持的开发板及配置信息,传递给下一个命令 less

  • less 是 Linux 中的一个分页查看命令,作用是将前面命令的输出结果一屏一屏地显示出来,这里 less 命令接收前面传来的开发板及其配置信息文本,一页一页地显示在终端上

  • 如果不加上 less 命令,configure.sh -L 会输出几百行的配置信息,终端会一下滚屏到底,让人根本看不清内容,加上 less 后,可以用滚轮查看,按 q 可以退出浏览模式,也不会在 bash 终端刷屏,很实用
    在这里插入图片描述

  • 当然也可以下面这种组合使用来快速查找,前提是知道开发板或配置信息的关键字

./tools/configure.sh -L | grep nsh

指定配置项目

下面来看第二个点
在这里插入图片描述
这里面也有几个关键点值得注意下:

  • 一般每个开发板都有一个叫 nsh 的预配置文件,nsh 是 NuttShell 的缩写,相当于 Nuttx 的命令行界面,可类比 Linux 的 shell 终端
  • 选择 nsh 是个很好的起点,因为系统启动后会进入一个交互式命令行,方便测试和调试系统,之前 blog 【OS】【Nuttx】【构建】配置 stm32 工程 里面选择的就是 stm32f429i-disco:nsh 配置
  • -B build:创建一个名字叫做 build 的目录,用来存放编译过程中产生的所有文件,即构建目录,cmake 构建一般都要指定构建目录,不然会污染项目根目录
  • -DBOARD_CONFIG:指定构建要使用哪个开发板的哪个预配置文件
  • -GNinja:指定使用 Ninja 作为构建工具(替代传统的 make),Ninja一般更快更高效,这里可以先用 make 进行构建,不一定要用 Ninja

配置工程

下面第三点就是配置工程的关键
在这里插入图片描述

  • 选择预配置文件,配置完基本选项后,cmake 还支持进一步配置自定义工程
  • -t menuconfig:执行名为 menuconfig 的目标(之前 blog 【OS】【Nuttx】【构建】cmake menuconfig 目标 一直在铺垫的),启动一个文本菜单界面,和 make menuconfig 效果一样,这里 -t 和 --target 是一个意思,用来指定执行目标
  • cmake --build build:对 build 目录进行构建操作,如果没指定目标,就会执行默认的目标:编译构建配置好的项目工程,不过现在指定了构建目标为 menuconfig,就不会启动编译构建

ok,今天先到这儿,下篇 blog 继续

http://www.dtcms.com/a/322168.html

相关文章:

  • 【Linux】Linux增删改查命令大全(附频率评级)
  • 批量将NC格式数据转换为TIF格式:解决转换后图像颠倒、镜像、翻转等问题
  • 深度剖析主流AI大模型的编程语言与架构选择:行业实践与技术细节解读
  • Uipath Studio中爬取网页信息
  • 安装CST时,报错问题处理
  • 几个概率分布在机器学习应用示例
  • Java-反射
  • C++编程之旅-- -- --类与对象的奇幻征途之初识篇(一)(了解类的基本用法,计算类大小,分析this指针)
  • 【完整源码+数据集+部署教程】海洋物体实例分割系统源码和数据集:改进yolo11-EfficientHead
  • Java【问题 07】SSH不同版本使用jsch问题处理(7.4升级9.7及欧拉原生8.8)
  • WD5202 非隔离降压转换芯片,220V降5V,输出电流80MA
  • Java学习Collection单列集合中的三种通用遍历方法
  • 【Erdas实验教程】029:遥感图像光谱增强(缨帽变换)
  • 经济学从业者职业发展认证体系分析
  • 在 Git 中,将本地分支的修改提交到主分支
  • 数据结构--哈希表与排序、选择算法
  • PVE 9.0 保姆级安装及优化教程(换源、网络配置、远程唤醒等)【基础篇】
  • 农行鉴权问题
  • 嵌入式 Linux 驱动开发常见问题排查宝典(驱动开发篇)v1.0
  • “人工”智能究竟需要多少人工?
  • 《设计模式之禅》笔记摘录 - 14.组合模式
  • 使用Python+selenium实现第一个自动化测试脚本
  • 【GPT-OSS 全面测评】释放推理、部署和自主掌控的 AI 新纪元
  • 1688 图片搜图找货接口开发实战:从图像特征提取到商品匹配全流程
  • InfluxDB漏洞:Metrics 未授权访问漏洞
  • 自定义上传本地文件夹到七牛云
  • 【深度学习新浪潮】GPT-5正式发布:开启博士级智能新纪元
  • Redis基础数据类型
  • 支持向量机(SVM)全解析:原理、类别与实践
  • Nestjs框架: 基于 Argon2 的用户登录注册安全机制设计与实现