Windows上VSCode使用cmake编译可能遇到的一系列问题
WuJunn
2025年02月04日 21:44

情况描述:VSCode以MinGW64作为C/C++编译器。cmake和MinGW64均已添加到系统变量。

一个简单项目test01的结构:

cd build 后cmake ..,报错:

CMake Error at CMakeLists.txt:4 (project):

Running

'nmake' '-?'

failed with:

no such file or directory

原因:CMake默认选择了NMake作为构建工具,但由于使用的是MinGW64而非MSVC编译器,导致了nmake无法找到相关的构建工具。

解决方案:运行cmake ..时,指定使用MinGW作为构建工具。

cmake .. -G "MinGW Makefiles"

运行此命令后可能会出现这样的问题:

CMake Error: Error: generator : MinGW Makefiles Does not match the generator used previously: NMake Makefiles Either remove the CMakeCache.txt file and CMakeFiles directory or choose a different binary directory.

这个错误表明CMake在同一个构建目录中已经使用过NMake Makefiles作为生成器,而你现在尝试使用MinGW Makefiles。由于CMake要求在同一构建目录下只能使用一个生成器,因此你需要清理之前的构建文件。

del CMakeCache.txt

rmdir /s /q CMakeFiles

或者更加简单粗暴一点直接删除整个build然后重新构建

rm -r build

这之后按第一个错误的解决方法cmake,重新生成Makefile文件。

此时直接在终端中make,可能出现如下报错:

make : 无法将“make”项识别为 cmdlet、函数、脚本文件或可运行

程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,  

然后再试一次。

所在位置 行:1 字符: 1

+ make

  + CategoryInfo     : ObjectNotFound: (make:String)

  [], CommandNotFoundException

  + FullyQualifiedErrorId : CommandNotFoundException

这是由于MinGW64中的make被称为mingw32-make。你在mingw64/bin路径下应该可以找到mingw32-make这个exe文件。

在终端中使用命令mingw32-make,编译成功。你在build文件夹中可以找到以项目名称命名的exe文件。

问题解决。