以下为AI生成的内容:
一、配置阶段(Configure)
本质:解析项目逻辑,构建内存模型
触发命令:cmake -S <源码路径> -B <构建路径>
关键操作与输出:
操作类型 | 典型案例 | 输出产物 |
---|---|---|
变量定义 | set(APP_NAME “Demo”) | CMakeCache.txt 缓存文件 |
依赖查找 | find_package(OpenCV REQUIRED) | 记录依赖路径到缓存变量 |
目标声明 | add_executable(app main.cpp) | 内存中的目标对象模型 |
条件逻辑 | if(WIN32) … endif() | 激活/跳过代码块 |
生成器表达式记录 | “bin/$” | 未展开的表达式结构 |
典型错误:语法错误、未找到依赖包、变量未定义
二、生成阶段(Generate)
本质:转换内存模型为构建系统文件
触发时机:配置成功后自动执行
关键操作与输出:
操作类型 | 典型案例 | 输出产物 |
---|---|---|
生成器表达式展开 | bin/$ → bin/Debug | 构建规则中的具体路径 |
构建系统文件生成 | 根据平台生成 Makefile / .vcxproj | 完整构建脚本 |
安装规则转换 | install() → cmake_install.cmake | 安装清单与脚本 |
交叉编译适配 | 应用 CMAKE_TOOLCHAIN_FILE 配置 | 目标平台专属构建指令 |
典型错误:生成器表达式展开失败、路径冲突
三、构建阶段(Build)
本质:调用原生工具链编译二进制文件
触发命令:cmake --build <构建路径> --config Release
关键操作与输出:
操作类型 | 底层行为 | 输出产物 |
---|---|---|
编译源代码 | 调用 gcc/cl/clang 编译 .cpp | .o / .obj 中间文件 |
链接目标 | ar / link.exe 合并库与可执行文件 | .a / .lib / .exe |
执行自定义命令 | 运行 add_custom_command() 定义的脚本 | 生成的资源/代码文件 |
安装构建结果 | 执行 cmake_install.cmake | 目标目录中的可部署文件 |
典型错误:编译错误、链接符号缺失、文件权限问题