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

99、【OS】【Nuttx】【构建】cmake 配置实操:问题解决

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

背景

接之前 blog
【OS】【Nuttx】【构建】cmake 配置问题定位:gmake 调用
【OS】【Nuttx】【构建】cmake 配置问题定位:CMakeFiles/menuconfig.dir
【OS】【Nuttx】【构建】cmake 配置问题定位:menuconfig.dir/build.make
之前 blog 已经分析了 gmake 和 gmake[1],gmake[2] 的调用关系,以及 CMakeFiles,menuconfig.dir,定位了问题大部分元素,最后指向了 build.make 中具体执行命令的 70 行(找不到对应文件和目录),下面来分析解决方案

build.make

下面来看出问题的地方
在这里插入图片描述

构建 CMakeFiles/menuconfig 目标时,第 70 行出错了,没找到相关的文件或目录
在这里插入图片描述
出问题的这句话很长,而且这个 menuconfig 目标执行的是命令,直接拷贝出来在 bash 终端执行,方便查看
在这里插入图片描述
这里看起来很长,化繁为简其实很清晰,这是

cmake -E env [--env=NAME=VALUE] [command]

命令行模式的用法,表示设置环境变量并运行 command 命令,很明显,这里的命令是 menuconfig,而在 bash 终端输入 which menuconfig 来查找这个命令的位置,可以看到是没有这个命令的,所以执行出错
在这里插入图片描述
首先要明确目的,这里是要用 cmake 进行工程配置,要实现与 make menuconfig 一样的效果,这里就涉及到 menuconfig 这个概念,在 make 构建和 cmake 构建中,它都是一个目标,查看 make 里对它的目标描述:
在这里插入图片描述
可以看到其实和 cmake 上面那个命令很像,都是设置环境变量 KCONFIG_ENV,然后执行命令 KCONFIG_MENUCONFIG,那么 make menuconfig 执行的命令 KCONFIG_MENUCONFIG,可以发现和 cmake 执行的并不相同,cmake 执行的是 menuconfig,而 make 执行的是 kconfig-mconf Kconfig
在这里插入图片描述
这里就涉及到两个概念:menuconfig 和 kconfig-mconf Kconfig

  • menuconfig:表示这是一个基于文本的用户界面,用来浏览和编辑由 Kconfig 文件定义的配置选项
  • kconfig-mconf:是实现 menuconfig 的实际工具,mconf 是 kconfig 系统的一部分,负责解析 Kconfig 文件并生成相应的配置界面,换句话讲,当运行 make menuconfig 命令时,实际上是在调用 kconfig-mconf 工具来读取 Kconfig 文件并显示配置界面

这里问题就很清晰了,cmake 执行了 menuconfig 这样一个抽象的,不存在的概念,而 make 执行的是 kconfig-mconf Kconfig 这样一个清晰的命令,所以 cmake 当然执行命令出错,之前 blog 【OS】【Nuttx】【构建】cmake menuconfig 目标 讲过, cmake 执行配置命令在 42 行这里
在这里插入图片描述
而 ${MENUCONFIG} 的值在 37 行这里

在这里插入图片描述
所以将 cmake 这里的 MENUCONFIG 替换成 kconfig-mconf Kconfig
在这里插入图片描述
再重新在 bash 终端执行命令

cmake --build build -t menuconfig

此时 cmake 可以正常打开配置界面,和 make menuconfig 一样,并且这里打开的是 build 目录下的 .config
在这里插入图片描述
这和用 make 在 nuttx 项目根路径上进行 menuconfig 还是有区别的,make 上显示的 .config 是相对路径(相对于 nuttx),而 cmake 上显示的是绝对路径,不过不影响用 cmake 进行配置就行
在这里插入图片描述
ok,cmake 配置工程结束,下篇 blog 回到主线继续分析

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

相关文章:

  • SSH浅析
  • 记录一次react渲染优化
  • 【AI生成+补充】高频 hql的面试问题 以及 具体sql
  • web服务器tomcat内部工作原理以及样例代码
  • GeoScene 空间大数据产品使用入门(4)空间分析
  • Docker-LNMP架构 创建多项目- 单个ngixn代理多个PHP容器服务
  • 正式出版!华东数交组编《数据资产化实践:路径、技术与平台构建》
  • 用 Apache Iceberg 与 Apache Spark 在 Google Cloud 打造高性能、可扩展的数据湖仓
  • 增加vscode 邮件菜单
  • 备战国赛算法讲解——马尔科夫链,2025国赛数学建模B题详细思路模型更新
  • 7 种最佳 DBAN 替代方案,彻底擦除硬盘数据
  • vue excel转json功能 xlsx
  • 【CV 目标检测】②——NMS(非极大值抑制)
  • springboot+JPA
  • 卓伊凡谈AI编程:历史、现状与未来展望-以前面向搜索引擎现在面向AI机器人-优雅草卓伊凡
  • 解释 Spring MVC 的工作原理
  • web应用服务器——Tomcat
  • C语言中关于普通变量和指针变量、结构体包含子结构体或包含结构体指针的一些思考
  • 车载5G加速,扩产+毛利率保卫战
  • 随身WIFI每个月需要交钱吗?流量卡还是随身WIFI哪个更好用?正规随身WIFI品牌有哪些?谁才是真性价比之王?
  • Linux下命名管道和共享内存
  • 云原生作业(nginx)
  • 云原生环境Prometheus企业级监控实战
  • 将黑客拒之物联网网络之外的竞赛
  • 2.Ansible基本使用
  • 9. React组件生命周期
  • 使用镜像网站 打开克隆 GitHub 网站仓库内容 git clone https://github.com/
  • 跟李沐动手学深度学习---学习笔记之基础篇
  • ForceVLA——将具备力感知的MoE整合进π0的动作专家中:从而融合视觉、语言、力反馈三者实现精密插拔
  • 【USRP】基于LabVIEW的BPSK、QPSK,文本,图片