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

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.xdnf.cn/news/17722.html

相关文章:

  • 【模型剪枝2】不同剪枝方法实现对 yolov5n 剪枝测试及对比
  • Linux,docker知识补充
  • 自建知识库,向量数据库 体系建设(二)之BERT 与.NET 8
  • C++少儿编程(二十二)—条件结构
  • 通过限制对象的内存分配位置来实现特定的设计目标
  • powerbi本地报表发布到web,以得到分享链接
  • Day13 Vue工程化
  • SQL 语言分类
  • 人大BABEC地平线高效率具身导航!Aux-Think:探索视觉语言导航中数据高效的推理策略
  • @RequestMapping接收文件格式的形参(方法参数)
  • idea git commit特别慢,cpu100%
  • 13.深度学习——Minst手写数字识别
  • 嵌入式第二十六天(文件IO相关操作)
  • 基于PROFINET的西门子PLC通讯:S7-200与S7-1200在自动化仓储中的协同应用
  • NetworkManager配置热点
  • 6深度学习Pytorch-神经网络--过拟合欠拟合问题解决(Dropout、正则化、早停法、数据增强)、批量标准化
  • Qt树形控件QTreeWidget详解:构建可编辑的多级课程结构
  • 牛客疑难题(6)
  • 需求沟通会议如何组织
  • 呼吸道病原体检测需求激增,呼吸道快检试纸条诊断试剂生产厂家推荐,默克全链解决方案助IVD企业把握百亿风口
  • Java调用Vue前端页面生成PDF文件
  • JMeter并发测试与多进程测试
  • 开疆智能Ethernet转ModbusTCP网关连接发那科机器人与三菱PLC配置案例
  • Jenkins 实战指南-项目自动构建部署全流程通关
  • 快速了解自然语言处理
  • RIOT、RT-Thread 和 FreeRTOS 是三种主流的实时操作系统
  • 【debug 解决 记录】stm32 debug模式的时候可以运行,但是烧录没法执行
  • 鸿蒙下载图片保存到相册,截取某个组件保存到相册
  • 海康视觉相机驱动软件参数配置
  • 【C++】哈希