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

95、【OS】【Nuttx】【构建】cmake 配置实操

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

背景

接之前 blog
【OS】【Nuttx】【构建】用 cmake 构建工程
【OS】【Nuttx】【构建】cmake 支持构建的目标
【OS】【Nuttx】【构建】cmake menuconfig 目标
【OS】【Nuttx】【构建】cmake 配置介绍
有了前面的铺垫,现在来实操下 cmake 对工程的配置,这里面也是遇到了些许问题

cmake 配置实操

清除 make 工程配置

nuttx 项目路径下输入 make distclean,要确保清除 make 的工程配置,bash 终端中输入

make distclean

如果没清理 make 工程,用 cmake 配置工程会报错,项目根目录的 CMakeLists.txt 可以看出来
在这里插入图片描述
这里有几个点说下:

  • 76 行注释提示,如果之前用 make 构建后没有清理干净,可能会导致各种 cmake 错误,这就像不能在一个已经装修了一半的房子里,突然换一套完全不同的装修涉及方案一样,必须要先把旧的拆干净(make distclean),才能开始新的装修(cmake 构建)
  • 77 行的 EXISTS 关键字会检查 .config 文件是否存在:${NUTTX_DIR} 是 Nuttx 项目的根目录,.config 文件是使用 make menuconfig 配置项目时生成的配置文件,make 配置项目时,是在项目根目录下进行的,所以 .config 文件也生成在项目根目录里
  • 如果 .config 文件存在,说明之前用 make 构建过这个项目,此时 cmake 会报一个致命错误(FATAL_ERROR),message 配合 FATAL_ERROR 关键字会打印出后面的错误信息,并立刻终止 cmake 配置过程

选择板配置

清理完 make 残余工程后,下面要基于一个板类型进行配置,也就是之前 blog 【OS】【Nuttx】【构建】cmake 配置构建综述 中的第二步,选择板配置,bash 终端输入

cmake -B build -DBOARD_CONFIG=stm32f429i-disco:nsh

同样,如果没有选择板类型,就进行项目工程配置,也会报错,项目根目录的 CMakeLists.txt 也可以看出来
在这里插入图片描述
这里有几个点说下:

  • NOT DEFINED 关键字表示,如果没有定义板类型 BOARD_CONFIG ,同样 cmake 也会报一个致命错误(FATAL_ERROR),终止 cmake 构建过程
  • 这意味着用 cmake 构建任何目标之前,不管是 menuconfig,还是构建编译产物之前,都需要先指定板类型 BOARD_CONFIG,这也好理解,如果都没指定在哪个板类型上跑(sim 模拟环境也可以比作一个虚拟的板类型),那还构建个毛线
  • 所以上面的 cmake 命令,在创建一个 build 目录的同时,也用 -DBOARD_CONFIG 定义了一个板类型:stm32f429i-disco:nsh,-D 在构建框架里面表示定义一个宏变量

配置项目

干完上面两件事,下面就可以在终端输入

cmake --build build -t menuconfig

来构建指定的目标 menuconfig 了,不过读者此时会发现,构建目标时报错了!
在这里插入图片描述
关于这个问题如何解决,下篇 blog 再讲

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

相关文章:

  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘transformers’问题
  • FreeRTOS---基础知识5
  • Dixon‘s 因子分解法——C语言实现
  • KLA/TENCOR ALTAIR 8900
  • [Shell编程] Shell 循环结构入门
  • VMware使用NAT模式,使本机与虚拟机在不同的网络,并且虚拟机可以上网
  • 洛谷 P1433 吃奶酪-普及+/提高
  • 嵌入式第二十三课 !!!树结构与排序(时间复杂度)
  • 浅试A2A
  • 01数据结构-图的概念和图的存储结构
  • PCA多变量离群点检测:Hotelling‘s T2与SPE方法原理及应用指南
  • ABP VNext + Fody AOP:编译期织入与性能监控
  • 嵌入式学习 day47 LED
  • ctfshow_萌新web9-web15-----rce
  • AJAX与axios框架
  • Vuex 数据共享
  • v-model双向绑定指令
  • Overleaf单栏双栏排版技巧
  • MWORKS 2025b:里程碑升级,Sysblock全栈替代,开启AI4MWORKS智能工程
  • F I R S T Q U A R T E R 2 0 2 5 - - M a y 2 2 2 0 2 5
  • 什么是Serverless(无服务器架构)
  • 数据结构---二叉树(概念、特点、分类、特性、读取顺序、例题)、gdb调试指令、时间复杂度(概念、大O符号法、分类)
  • Qwen Agent 入门介绍与简单使用示例
  • 基于STM32单片机的OneNet物联网环境检测系统
  • Vue 路由跳转
  • Vue3生命周期
  • ZK首次连接失败,第二次连接成功的问题解决方案
  • AI入门学习--如何对RAG测试
  • Flutter开发 Switch、SwitchListTile的基本使用
  • 嵌入式LINUX—————系统编程