CMake执行报错(%1 is not a valid Win32 application)及Ninja相关疑问
CMake相关问题解答
一、报错的解决方法
补全CMakeLists.txt的基础配置
空的CMakeLists.txt会触发project命令缺失警告,还会导致CMake无法自动检测编译器。直接在文件开头添加基础配置:cmake_minimum_required(VERSION 3.10) project(MyTestProject C CXX)这里指定C/C++语言,能让CMake自动去查找系统里对应的编译器。
修复Ninja的Win32应用错误
这个错误大概率是Ninja版本和系统位数不匹配,或者文件损坏。要么重新下载对应系统位数的Ninja替换D:/path/ninja下的文件;要么直接换用Make工具,执行CMake时指定生成器:cmake .. -G "Unix Makefiles"前提是你的Make工具已经在系统PATH环境变量里。
解决CMAKE_C/CXX_COMPILER未设置的问题
只要补全了上面的project配置并指定语言,CMake一般会自动找到编译器。如果还是不行,手动指定编译器路径:cmake .. -G "Unix Makefiles" -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++同时检查环境变量,确保gcc/g++或者你用的编译器在PATH里。
二、CMake为什么会生成build.ninja并关联Ninja
- Ninja是独立的构建系统,但CMake的定位是构建生成器——它不直接做构建,而是把你写的CMakeLists.txt配置,转换成对应构建系统能识别的脚本。比如给Ninja生成build.ninja,给Make生成Makefile,这样你不用写复杂的Ninja语法,只用CMake的简洁配置就能管理项目。
- CMake会自动扫描系统里的构建工具,如果你安装了Ninja且它在PATH里,CMake默认会优先选Ninja(尤其是Windows环境),所以会生成build.ninja并关联它。你也可以用
-G参数强制指定其他生成器,比如Makefile或者MSVC的解决方案。
内容的提问来源于stack exchange,提问作者Rudransh Srivastava
相关产品推荐
相关产品推荐

