CMakeLists.txt:30(项目)处的 CMake 错误:找不到 CMAKE_C_COMPILER

新手上路,请多包涵
阅读 1.1k
2 个回答

那些错误信息

CMake Error at ... (project):
    No CMAKE_C_COMPILER could be found.
-- Configuring incomplete, errors occurred!
See also ".../CMakeFiles/CMakeOutput.log".
See also ".../CMakeFiles/CMakeError.log".

或者

CMake Error: your CXX compiler: "CMAKE_CXX_COMPILER-NOTFOUND" was not found.
Please set CMAKE_CXX_COMPILER to a valid compiler path or name.
...
-- Configuring incomplete, errors occurred!

只是意味着 CMake 无法找到您的 C/CXX 编译器来编译一个简单的测试程序(CMake 在检测您的构建环境时尝试的第一件事)。

查找问题的步骤取决于您要生成的构建环境。以下教程是 Stack Overflow 上的答案集合,以及我自己在 Microsoft Windows 7/8/10 和 Ubuntu 14.04 上使用 CMake 的一些经验。

前提条件

Windows cmd.exe

     > rmdir /s /q VS2015
    > mkdir VS2015
    > cd VS2015

bash 外壳

    $ rm -rf MSYS
    $ mkdir MSYS
    $ cd MSYS

并确保您的命令外壳指向您新创建的二进制输出目录。

您可以/应该尝试的一般事情

  1. CMake 是否能够使用任何/您的默认编译器找到并运行?在不提供发电机的情况下运行
    > cmake ..
    -- Building for: Visual Studio 14 2015
    ...

如果它正确地确定了要使用的生成器,那就完美了——就像这里 Visual Studio 14 2015

  1. 究竟是什么失败了?

在之前的构建输出目录中,查看 CMakeFiles\CMakeError.log 是否有任何对您有意义的错误消息,或者尝试打开/编译在 CMakeFiles\[Version]\CompilerIdC | CompilerIdCXX 直接从命令行(在错误日志中找到)。

CMake 找不到 Visual Studio

  1. 尝试选择正确的 生成器版本
     > cmake --help
    > cmake -G "Visual Studio 14 2015" ..

  1. 如果这没有帮助,请先尝试设置 Visual Studio 环境变量(路径可能会有所不同):
     > "c:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat"
    > cmake ..

or use the `Developer Command Prompt for VS2015` short-cut in your Windows Start Menu under `All Programs` / `Visual Studio 2015` / `Visual Studio Tools` (thanks at [@Antwane](https://stackoverflow.com/users/1887976/antwane) for the hint )。

_背景_:CMake 支持所有 Visual Studio 版本和风格(Express、Community、Professional、Premium、Test、Team、Enterprise、Ultimate 等)。为了确定编译器的位置,它使用搜索注册表(例如在 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\[Version];InstallDir )、系统环境变量和 - 如果没有其他人确实想出一些东西 - 显然尝试调用编译器。

CMake 找不到 GCC (MinGW/MSys)

  1. 您使用 msys.bat 启动 MSys bash shell,然后尝试直接调用 gcc
     $ gcc
    gcc.exe: fatal error: no input files
    compilation terminated.

在这里它确实找到了 gcc 并抱怨我没有给它任何参数。

所以以下应该工作:

     $ cmake -G "MSYS Makefiles" ..
    -- The CXX compiler identification is GNU 4.8.1
    ...
    $ make

如果未找到 GCC,请调用 export PATH=... 添加您的编译器路径(请参阅 如何在 CMake 脚本中设置 PATH 环境变量? ),然后重试。

  1. 如果还是不行,尝试直接导出设置 CXX 编译器路径(路径可能不同)
     $ export CC=/c/MinGW/bin/gcc.exe
    $ export CXX=/c/MinGW/bin/g++.exe
    $ cmake -G "MinGW Makefiles" ..
    -- The CXX compiler identification is GNU 4.8.1
    ...
    $ mingw32-make

有关更多详细信息,请参阅 如何为 CMake 指定新的 GCC 路径

注意:使用“MinGW Makefiles”生成器时,您必须使用 mingw32-make 与 MinGW 一起分发的程序

  1. 还是行不通?这很奇怪。请确保编译器在那里并且它具有可执行权限(另请参见上面的先决条件章节)。

否则 CMake 的最后手段是不尝试任何编译器搜索本身并直接设置 CMake 的内部变量

    $ cmake -DCMAKE_C_COMPILER=/c/MinGW/bin/gcc.exe -DCMAKE_CXX_COMPILER=/c/MinGW/bin/g++.exe ..

有关更多详细信息,请参阅 Cmake 不尊重 -D CMAKE_CXX_COMPILER=g++_ 和 _Cmake 错误设置编译器

或者,这些变量也可以通过 cmake-gui.exe 在 Windows 上进行设置。请参阅 Cmake 找不到编译器

_背景_:与 Visual Studio 大致相同。 CMake 支持各种 GCC 风格。它搜索环境变量(CC、CXX 等)或只是尝试调用编译器。此外,它会检测任何前缀( 交叉编译 时)并尝试将其添加到 GNU 编译器工具链的所有 binutils 中( arranlibstrip , ld , nm , objdumpobjcopy )。

原文由 Florian 发布,翻译遵循 CC BY-SA 4.0 许可协议

确保在安装 Visual Studio 时已安装 Windows SDK。要添加 Windows SDK,您可以转到 Visual Studio Installer 并点击“修改”,然后勾选 Windows SDK 的复选框并安装它。

原文由 Grejo Joby 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题