100、【OS】【Nuttx】【构建】cmake 配置保存
【声明】本博客所有内容均为个人业余时间创作,所述技术案例均来自公开开源项目(如Github,Apache基金会),不涉及任何企业机密或未公开技术,如有侵权请联系删除
背景
接之前 blog
【OS】【Nuttx】【构建】cmake 配置实操:问题解决
之前 blog 解决了 cmake 配置问题,在回到主线分析前,再讲一个点:配置保存
配置保存
板默认配置 defconfig 里注释
有两个点:
- make menuconfig:修改当前的 .config 配置文件,.config 是一个保存内核或系统编译配置的文件,里面记录了哪些功能开启,哪些关闭,在编译构建时,将读取这个配置文件
- make savedefconfig:生成一个新的 defconfig 文件,defconfig 一般是一个最小化的配置文件,只记录与默认配置不同的选项,便于管理和版本控制,savedefconfig 会把当前 .config 中的重新输出成一个标准的 defconfig 文件,下次就可以用这个新的 defconfig 来恢复自定义配置,比如在重新编译或分享给他人时使用,便于保存定制配置,方便复用移植
可以这么理解,.config 实时作用于编译构建,而 defconfig 是持久化的配置快照,defconfig 本身不直接参与编译,但能生成或恢复 .config,从而间接作用于编译构建
make 配置保存
现在先重新演示一遍,make 配置的过程,首先在 nuttx 根目录,bash 终端输入
make distclean
先清除之前配置,而后在终端输入
tools/configure.sh -l -e stm32f429i-disco:nsh
选择具体板类型,基于其默认配置 defconfig 进行构建工程搭建
可以看到,此时编译系统用默认配置 defconfig 生成出了 .config 文件,查看 .config 文件,默认配置这里栈溢出选项 CONFIG_ARMV7M_STACKCHECK 此时是关闭的(因为其默认配置 defconfig 里没有)
终端输入
make menuconfig
配置将其打开,此时左上角表示配置将作用到根目录下的 .config 文件
退出保存
可以看到 .config 文件已包含了栈溢出选项 CONFIG_ARMV7M_STACKCHECK
终端输入
make clean; make
进行编译构建,可以看到此时 map 文件里能找到栈溢出的相关功能,比如 __stack_overflow_trap
ok,如果此时想下次重新走这个流程,默认配置本身就带上栈溢出等定制化配置的话,可以在终端输入
make savedefconfig
此时根目录下会重新生成 defconfig(带上了定制化配置)
将新生成的 defconfig 替换掉原来工程目录下的 defconfig,下次重新走这个流程时,就能默认带上用户的定制化配置
cmake 配置保存
上面讲完 make 的配置保存,下面再讲下 cmake 如何保存配置,同之前 blog 【OS】【Nuttx】【构建】cmake menuconfig 目标 一样,之前有 menuconfig 目标,当然也就有 savedefconfig 目标
但是也有点小瑕疵,就是箭头上指出的 savedefconfig 命令,和之前 menuconfig 一样,这个在 Linux 里面是没有的,所以和之前 blog 【OS】【Nuttx】【构建】cmake 配置实操:问题解决 一样,可以参考 make 的写法
继续找到关键字 KCONFIG_SAVEDEFCONFIG
ok,将 cmake 里面 savedefconfig 自定义目标这里替换掉
这里直接提供源码
# utility target to replace defconfig to board's defconfig
add_custom_target(savedefconfigCOMMAND ${CMAKE_COMMAND} -E env ${KCONFIG_ENV} kconfig-conf Kconfig --savedefconfig --out${CMAKE_BINARY_DIR}/defconfig.tmpCOMMAND ${CMAKE_COMMAND} -P ${NUTTX_DIR}/cmake/savedefconfig.cmake${CMAKE_BINARY_DIR}/.config ${CMAKE_BINARY_DIR}/defconfig.tmpCOMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_BINARY_DIR}/defconfig${NUTTX_DEFCONFIG}WORKING_DIRECTORY ${NUTTX_DIR})
cmake 工程经过配置后,配置流程参考之前 blog 【OS】【Nuttx】【构建】cmake 配置实操,在终端输入
cmake --build build -t savedefconfig
即可用 cmake 保存 defconfig 配置
ok,本期讲到这里,下篇 blog 继续