彻底解决“CMake Error: CMAKE_C_COMPILER not set, after EnableLanguage”的问题

问题描述

Windows环境下,不论是手动安装,或者使用scoop,或者choco来安装cmake,以及mingw的编译器,满足了以下条件:

  1. cmake、gcc、g++都可以在环境中找到
  2. 可以直接使用vscode插件运行源代码
  3. 不能使用cmake ..构建,提示错误:
CMake Error: CMAKE_C_COMPILER not set, after EnableLanguage
CMake Error: CMAKE_CXX_COMPILER not set, after EnableLanguage

问题原因

原因是,在下面这些情况中,使用cmake命令的时候,cmake都看不到系统路径中的编译器路径,所以一直要求用户手动指定:

  1. 在cmakelists.txt中指定:
set(CMAKE_C_COMPILER "path/to/c/compiler")
set(CMAKE_CXX_COMPILER "path/to/c++/compiler")
  1. 在命令行cmake ..后面加上路径参数

可以发现,不论哪种方式,都不够优雅,无法像在Linux环境下一样简单优雅,所以想着解决一下这个问题

更进一步了解

cmake是一个跨平台构建工具,也就是说,可以生成不同平台的目标构建文件,我们来看cmake官网:https://cmake.org/cmake/help/latest/manual/cmake-generators.7.html

下载Windows版本的cmake,cmake自己会使用nmake生成器:

NMake Makefiles是CMake支持的一种生成器,它是用于Windows平台的Makefile生成器。与其他生成器相比,NMake Makefiles有以下几个区别:

1. 平台限制:NMake Makefiles只能在Windows平台上使用,而其他生成器可以在多个平台上使用。

2. 构建工具:NMake Makefiles使用Microsoft Visual C++的nmake工具来构建项目,而其他生成器使用不同的构建工具,如Make、Ninja等。

3. 构建速度:NMake Makefiles的构建速度相对较慢,因为它使用的是Microsoft Visual C++的nmake工具,而其他生成器使用的构建工具可能会更快。

4. IDE支持:NMake Makefiles不支持集成开发环境(IDE)的直接使用,而其他生成器可以与多个IDE集成,如Visual Studio、Xcode等。

总的来说,NMake Makefiles适用于在Windows平台上使用Microsoft Visual C++的nmake工具构建项目的情况,而其他生成器则更加通用,可以在多个平台上使用,并且可以与多个IDE集成。

简单来说,这个生成器就是用于Windows平台的Makefile生成器,会自己去找MSVC的编译器,所以不论你安装了mingw或者是msys2,都无法找到默认编译器,所以造成了需要手动配置的情况

可以通过指定生成器的方式来解决,但是不够优雅,解决方案见下,推荐使用msys2安装cmake

问题解决

使用msys2,因为默认使用了ninja生成器

运行 CMake 配置命令时,建议使用选项显式指定所需的构建文件生成器-G。MSYS2 为 Ninja 提供了 CMake 默认值(但这不是上游 CMake 中的默认值,因此显式指定它是最安全的)

以msys2为例:

  1. 使用scoop、choco、winget,或者手动安装exe,成功安装msys2
  2. 在msys2的ucrt64 shell下,运行:
# 更全,vscode推荐
pacman -S --needed base-devel mingw-w64-ucrt-x86_64-toolchain

# 更少,msys2官网
pacman -S mingw-w64-ucrt-x86_64-gcc
  1. 通过msys2安装cmake:
pacman -S mingw-w64-ucrt-x86_64-cmake

但是这个默认是使用ninja编译的,不指定参数的话,就生产了ninja文件,而不是make文件;如果不希望msys2使用ninja,可以参考:https://blog.csdn.net/qq_45510888/article/details/132753462

参考资料

  • 常用msys2命令(以cmake为例):
# 搜索
pacman -Ss cmake

# 安装
pacman -S cmake

# 搜索已安装
pacman -Qs cmake

# 卸载
 pacman -R cmake
  • 8
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值