CMakePresets.json与cmake区别

CMakePresets.json 是干什么的?

一句话 :CMakePresets.json 是用来预先定义一组"配置/编译方案"的标准配置文件 ,方便你在命令行或 IDE 里一键选择,而不用每次自己拼 -G -DCMAKE_TOOLCHAIN_FILE=... -DCMAKE_BUILD_TYPE=... 这些参数。

  • 典型功能 :
    • 统一定义多个构建配置(如 Debug / Release / arm-gcc-debug 等)。
    • 指定构建目录(build/Debug、build/Release 等)。
    • 指定工具链文件(比如你项目里的 tools/cmake_toolchain_files/armgcc.cmake)。
    • 传各种 -DXXX=ON/OFF 选项。

它和 .cmake 文件的本质区别

  • CMakePresets.json:

    • 是一个 "如何调用 cmake 的配置清单"。
    • 作用范围:外部(调用 cmake 时,决定用什么生成器、什么工具链、放到哪个 build 目录、开哪些选项)。
    • 用法:cmake --preset <名字>、IDE 里的 "Configure Preset / Build Preset" 下拉菜单。
  • xxx.cmake(模块/工具链等):

    • 是 cmake 语言写的脚本 ,在 CMake 运行过程中被 include() / toolchain 使用。
    • 比如:
      • tools/cmake_toolchain_files/armgcc.cmake:定义交叉编译器路径、cpu 选项等 → 典型 工具链文件。
      • flags.cmake、某些 SDK/.../*.cmake:设置编译选项、添加库、宏等 → 典型 模块/配置脚本。
    • 用法:
      • 在命令行:-DCMAKE_TOOLCHAIN_FILE=tools/cmake_toolchain_files/armgcc.cmake
      • 或在 CMakeLists.txt 里:include(flags.cmake) 等。

对比总结:

  • Presets(json) :告诉 cmake "怎么启动、用哪个工具链、放哪编"。
  • .cmake 脚本 :在 cmake 运行时,告诉 cmake "怎么配置项目自身:用哪些编译选项、哪些库、交叉编译器在哪"。

在你的工程里,大概怎么用 Presets

结合你的项目结构(已存在 CMakePresets.json、tools/cmake_toolchain_files/armgcc.cmake):

  • 在命令行构建:
bash 复制代码
# 查看有哪些 preset
cmake --list-presets

# 用某个配置 preset(例如叫 "armgcc-debug")生成 build 目录
cmake --preset armgcc-debug

# 用某个 build preset 编译
cmake --build --preset armgcc-debug
  • 在 VS Code / CLion / VS:
    • 打开工程根目录(有 CMakePresets.json 那层)。
    • IDE 会自动识别 presets,弹出 配置选项 ,你直接选 Debug / Release / armgcc-debug。
    • 之后直接点 Configure / Build 就会按 preset 里定义的参数运行。

什么时候改 Presets?什么时候改 .cmake?

  • 改 CMakePresets.json:

    • 想新增一种编译方案:比如同一个源码,既要为 Windows x64 编,又要为 i.MX8 ARM 编。
    • 想换构建目录命名、默认构建类型、默认工具链等。
  • 改 .cmake(如 armgcc.cmake、flags.cmake):

    • 想改交叉编译器路径、CPU 选项、FPU 选项。
    • 想统一调整 -O2/-O0/-g、警告等级、宏定义、链接脚本等。

如果你愿意,可以把当前的 CMakePresets.json 内容贴出来,我可以逐项解释每个字段具体对你这个 i.MX8 + AD7606 工程的含义。

相关推荐
譕痕3 天前
JSONObject与JSONArray封装数据格式区别
java·json
A黄俊辉A3 天前
uniapp webview中实现 app和内嵌的H5双向通信
vue.js·json
伞伞悦读4 天前
【第37期】Python JSON 与配置详解:序列化、反序列化、嵌套结构和配置文件
开发语言·python·json
Mikko74 天前
jackson-databind 升到 2.21.6 就安全了吗?jackson-core 是另一个坐标,它那条 high 全局库至今没收
java·后端·安全·json
天若有情6736 天前
独立开发复盘:我用 Node.js 做了个在线工具箱
前端·json·工具
Asurplus6 天前
【SpringBoot4】3、从SpringBoot4升级Sa-Token1.46.0报错
redis·sa-token·json·jackson·springboot4
代码中介商6 天前
C++ 预约系统实战(三):服务端实现——libevent 事件驱动与业务路由
c++·json·c/s
譕痕7 天前
notepad++安装插件 可视化展示 json串内容
json·intellij-idea
databook7 天前
DuckDB + SQL 高效分析 JSON 数据
数据分析·json·nosql
数据狐(Datafox)8 天前
1688商品列表API接口解析(附 JSON 样例)
java·开发语言·数据库·爬虫·json