目录
二、解决方法:修改 vscode默认生成器 generator
一、问题描述:
1、在ubuntu中使用vscode打开一个使用cmake编译的C++工程,无论是自动cmake、还是点击如图底部CMake、Build按钮,都可正常编译成功;
2、命令行打开自动生成的目录:build,执行指令“ cmake .. ”成功、再执行make则报错,如下图:
3、命令行在build目录中,执行 rm -rf * 删除所有生成的文件和目录,再次执行 cmake .. 和 make 则成功,如下图:
4、此时再点击底部按钮 CMake、Build 则报错,“Error: Configured generator does not match with CMAKE_GENERATOR found in cache.”,大意是已配置的生成器generator和cache发现的CMAKE_GENERATOR不匹配,如图:
原来是cmake生成器CMAKE_GENERATOR配置有问题,百度搜索图中报错,没找到合适答案,于是仅搜索CMAKE_GENERATOR,则找到不少说明,如cmake的generator详解,发现有诸如以下说明:
1、cmake生成器会通过cmakelist.txt文件,生成适用于不同项目类型的makefile文件
2、
- Unix Makefiles: 生成标准的UNIX makefile。
- 在构建树上生成分层的UNIX makefile。任何标准的UNIX风格的make程序都可以通过默认的make目标构建工程。生成的makefile也提供了install目标。
- Ninja:生成.ninja工程
- Xcode:生成Xcode工程
而使用vscode底部CMake、Build按钮可正常执行时,即本文第一张图中结果,发现有这样两句:
[cms-client] Configuring using the "Ninja" CMake generator
[cms-client] Configuring using the "Ninja" CMake generator
看到此处问题已定位清楚:
原来vscode默认使用的时Ninja生成器,而系统默认的是Unix Makefiles生成器
二、解决方法:修改 vscode默认生成器 generator
发现5处generator相关的设置:
前两处属于插件CMake Integration设置,可明显看到第二处选择了Ninja,若安装了CMake Integration插件,将此处Ninja改选为Unix Makefiles;
后三处属于插件CMake Tools设置,在第一处输入框中填入Unix Makefiles,删除自动生成的build目录,重启vscode即可
而后,无论是使用vscode的cmake插件,即vscode底部按钮CMake、Build生成和编译工程,还是在命令行使用cmke .. 和 make指令,都是默认生成标准的UNIX makefile文件
总结:发现问题并不怕,定位问题所在,一点一点搜索、查找总能找出解决办法