configure失败说明环境或配置错误,需检查CMakeLists.txt版本、编译器PATH、中文路径及NDK路径格式;build失败多因构建工具未找到或架构不匹配;链接失败则指向架构混用或库路径错乱;CMakeCache.txt应删除而非手动修改。

直接看错误发生的阶段:configure 阶段失败,说明环境或配置不对;build 阶段失败,大概率是编译器、链接器或缓存问题;链接阶段炸锅(LNK2001/LNK4272),十有八九是架构混用或库路径错乱。
configure 失败:先盯住 CMakeLists.txt 和环境变量
常见现象是 cmake -S . -B build 一跑就报错,比如 Could not find a package configuration file provided by "gRPC" 或 CMAKE_CXX_COMPILER not set。这不是代码问题,而是 CMake 还没开始读你的源码,就在找路。
- 检查
CMakeLists.txt开头有没有写错最低版本,比如cmake_minimum_required(VERSION 3.22),但你装的是 3.21 —— 这会直接中断 - 确认编译器是否在
PATH里:where cl(Windows)或which gcc(Linux/macOS),如果返回空,CMake 就找不到它 - 中文路径是隐形杀手:Windows 的
PATH里只要有一项含中文(如C:\用户\张三\tools),VS Code 的 CMake 插件就可能解析失败,输出乱码路径,必须删掉并重启 VS Code - NDK 项目要特别注意:
android.ndkpath在local.properties里必须是正斜杠或双反斜杠,单反斜杠(c:\ndk)会被当成转义字符吃掉
build 失败:Ninja 找不到、make 执行崩了
典型错误是 CMake Error: CMake was unable to find a build program corresponding to "Ninja". CMAKE_MAKE_PROGRAM is not set。这说明 CMake 没法调起构建工具,不是 Ninja 本身坏了。
- Windows 下 Ninja 默认不进
PATH,装完得手动把ninja.exe所在目录(比如C:\ninja)加到系统环境变量PATH中 - 别依赖 CMake 自动猜路径 —— 显式指定更稳:
cmake -S . -B build -G "Ninja" -DCMAKE_MAKE_PROGRAM="C:/ninja/ninja.exe" - 如果用的是 vcpkg + x64 项目,但终端是 x86 架构(VS 2022 内置 PowerShell 默认就是 x86),
vcvarsall.bat x64会静默失效,where cl仍指向Hostx86\x86\cl.exe,必须换用 x64 终端或改用 Developer Command Prompt for VS 2022
链接失败:LNK2001 / LNK4272 是架构错位的铁证
编译全绿,链接全红,一堆 LNK2001: unresolved external symbol operator new,还夹着 LNK4272: library computer type 'x86' conflicts with target computer type 'x64' —— 这不是代码写错了,是链接器被塞了错的库。
- 立刻查
LIB环境变量:[System.Environment]::GetEnvironmentVariable('LIB')(PowerShell),如果为空,说明 vcvars 没生效;如果路径里有\x86\却目标是 x64,就是架构污染 - vcpkg triplet 必须和 vcvars 架构严格一致:选了
x64-windows-static,就得用vcvarsall.bat x64,且终端本身得是 x64 进程(任务管理器里看“平台”列) - 不要在同一个终端里混用不同架构的 vcvars 调用,旧环境变量不会自动清理,
set LIB=清空再重载更可靠
CMakeCache.txt 别手改,该删就删
改过编译器、换过工具链、升级过 CMake 版本后还报奇怪错误?大概率是 CMakeCache.txt 记了旧账。
- 安全清理只做两件事:
rm -f CMakeCache.txt和rm -rf CMakeFiles/,然后重新cmake -S . -B build - 千万别用文本编辑器打开
CMakeCache.txt改CMAKE_C_COMPILER—— 格式错一个空格,CMake 就拒绝加载,而且不会告诉你哪错了 - 跨平台项目尤其要注意:
CMAKE_MAKE_PROGRAM在 Windows 是ninja.exe,Linux 是ninja,缓存文件混用会导致生成器识别失败
最常被忽略的点:VS 2022 内置终端默认是 x86 进程,哪怕你点了 x64 工具链,它也照旧拉 x86 的 cl.exe;vcpkg 的 triplet 名称(如 x64-windows-static)不是建议,是契约,必须和环境、链接库、CRT 全部对齐。


















