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

98、【OS】【Nuttx】【构建】cmake 配置问题定位:menuconfig.dir/build.make

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

背景

接之前 blog
【OS】【Nuttx】【构建】cmake 配置问题定位:gmake 调用
【OS】【Nuttx】【构建】cmake 配置问题定位:CMakeFiles/menuconfig.dir
之前 blog 已经分析了 gmake 和 gmake[1],gmake[2] 的调用关系,以及 CMakeFiles,menuconfig.dir,下面继续来分析剩下的内容以及解决方案

menuconfig.dir

之前 blog 已经分析过,menuconfig.dir 是啥,下面来分析 menuconfig.dir 这个目录里面有啥,打开文件目录可以看到,里面大概有这么些东西
在这里插入图片描述
下面来逐一分析里面各文件的作用:

  • build.make:最核心的文件,定义了如何构建 menuconfig 目标,其本质上是一个 Makefile 片段,包含了执行 menuconfig 时要运行的命令以及依赖关系等,也是问题所在文件

  • cmake_clean.cmake:定义清理目标时需要删除哪些文件,里面会列出目标生成时所有的中间件,当运行 make clean 时,CMake 会读取并删除 menuconfig 产生的临时配置和中间件,下面简单看下里面内容
    在这里插入图片描述
    1、file(REMOVE_RECURSE …):递归删除这里指定的文件或目录
    2、CMakeFiles/menuconfig:要删除的目标,不过在当前这个场景下,menuconfig 目标只负责执行命令,并不会生成这个目标文件,所以这句话不会删除任何东西
    3、注释提示下面是根据依赖扫描生成的对应语言的清理规则,其中 foreach(lang ) 表示遍历所有编程语言(比如 C、CXX、ASM 等),但注意这里 lang 后面是空的,说明 这个目标没有关联任何编程语言(因为这个目标只执行命令)
    4、include(…cmake_clean_${lang}.cmake OPTIONAL):引用语言相关的清理文件,比如 cmake_clean_C.cmake,cmake_clean_CXX.cmake 等等,这里 OPTIONAL 表示如果文件不存在,也不要报错

  • compiler_depend.make:依赖信息文件,在 CMake 的 configure 阶段,CMake 本身不执行编译器,无法获取真实依赖,只能创建个空的占位文件,确保生成的 Makefile/Ninja 文件结构完整,从注释可以看出其用途,且未来可能会被覆盖
    在这里插入图片描述

  • compiler_depend.ts:时间戳文件,用于依赖检查,记录最后一次依赖分析的时间,CMake 可以用来判断是否需要重新扫描依赖

  • DependInfo.cmake:依赖信息数据库,记录该目标的所有源文件,输出文件以及依赖信息文件的位置,是 CMake 用来管理依赖关系更新的清单,同样,由于 menuconfig 是个非编译目标,这里的依赖项都是空的
    在这里插入图片描述

  • progress.make:用于构建进度显示,记录当前目标在整体构建中的进度编号,当然由于是非编译目标,这里也是空的
    在这里插入图片描述

build.make

下面来看出问题的地方,build.make 是最核心的文件,定义了如何构建 menuconfig 目标,而在构建 CMakeFiles/menuconfig 目标时,第 70 行出错了,提示没找到相关的文件或目录
在这里插入图片描述
怎么解决这个问题,下篇 blog 分析

http://www.lryc.cn/news/618724.html

相关文章:

  • 【力扣494】目标和
  • 笔试——Day36
  • Unity-VR插件AutoHand
  • Day 10-2: Mini-GPT完整手写实战 - 从组件组装到文本生成的端到端实现
  • 武汉火影数字|VR红色文化馆打造 沉浸式体验红色文化
  • Coze开源 Agent 的“乐高时代”
  • 【19】万集科技——万集科技嵌入式,校招 一面,二面,面试问答记录
  • Java 编程每日一题:实现一个简易的 LRU 缓存
  • 站在Vue的角度,对比鸿蒙开发中的递归渲染
  • C++单继承虚函数表探索
  • 什么是跨域访问问题,如何解决?
  • 使用 rsync 上传下载文件:详解原理、目录同步和常见问题
  • 间隙锁(Gap Lock)
  • 【C++】5. 内存管理
  • 卫生间装修防水怎么做合适?
  • redis原理篇--Dict
  • 《Linux基础知识-1》
  • Linux随记(二十二)
  • Secure 第二天作业
  • SM2和SM4加密算法详解
  • 防火墙快速管理软件,66K超小巧
  • 【网络运维】Linux和自动化:Ansible
  • WEB虚拟主机3种部署方式全解析
  • Linux软件编程(三)文件操作-文件 I/O
  • Outstanding和Credit的概念详解
  • 动态路由协议(一)
  • 《Redis日志系统操作:LIST结构实现日志收集与查询》
  • 在线免VIP的动漫网站
  • 机器学习-集成学习(EnsembleLearning)
  • GitHub的简单使用方法----(4)