CMake error at CMakeLists.txt: 30(project) : 找不到 CMAKE_C_COMPILER

我正在尝试用 CMake 来编译 aseprite 的最新版本,而 CMake 总是给我提供:

No CMAKE_C_COMPILER could be found.
No CMAKE_CXX_COMPILER could be found.

我已经下载了海湾合作委员会,我正在使用 Visual Studio 2015

我遵循这个教程:

Https://github.com/aseprite/aseprite/blob/master/install.md

473977 次浏览

那些错误消息

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 的一些经验。

先决条件

  • 您已经安装了编译器/IDE,它可以一次性编译任何其他程序(直接不需要 CMake)

    • 例如,您可能拥有 IDE,但是可能没有安装编译器或者像 使用 CMake 为 VS 2017生成解决方案的问题我如何告诉 CMake 在 Windows 上使用 Clang中描述的那样支持框架本身
  • 您拥有最新的 < a href = “ https://cmak.org/download/”rel = “ nofollow norefrer”> CMake 版本

  • 您对要 CMake 生成构建环境的驱动器拥有访问权限

  • 您有一个干净的构建目录(因为 CMake 会缓存上次尝试的内容) ,例如,作为源树的子目录

    Windows cmd.exe

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

    Bash Shell

      $ rm -rf MSYS
    $ mkdir MSYS
    $ cd MSYS
    

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

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

  1. CMake 能够找到并运行任何/您的默认编译器吗? 运行时不要给出生成器

     > cmake ..
    -- Building for: Visual Studio 14 2015
    ...
    

    完美,如果它正确地确定发电机使用-像这里 Visual Studio 14 2015

  2. 到底是什么失败了?

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

CMake 找不到 Visual Studio

  1. 尝试选择正确的 发电机版本:

     > cmake --help
    > cmake -G "Visual Studio 14 2015" ..
    
  2. 如果这没有帮助,请首先尝试设置 VisualStudio 环境变量(路径可能有所不同) :

     > "c:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat"
    > cmake ..
    

    或使用 All Programs/Visual Studio 2015/Visual Studio Tools下的 Windows 开始菜单中的 Developer Command Prompt for VS2015快捷方式(感谢 @ Antwane的提示)。

背景 : 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 环境变量) ,然后再试一次。

  2. 如果它仍然不工作,尝试通过导出直接设置 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 Makefile”生成器时,必须使用 MinGW 分发的 mingw32-make程序

  3. 还是不行吗?真奇怪。请确保编译器在那里,并且它有可执行权限(另见上一章的前提条件)。

    否则,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 + + 错误设置编译器

    另外,这些变量也可以在 Windows 上通过 cmake-gui.exe设置

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

我在 CMake 上也犯了同样的错误。在我的例子中,我在初始 CMake 对话框中使用了错误的 VisualStudio 版本,我们必须在该对话框中选择 VisualStudio 编译器。

然后我把它改成了“ Visual Studio 112012”,事情就顺利了。(我的电脑上有 Visual Studio Ultimate 2012版本)。通常,尝试在初始 CMake 配置对话框中输入 VisualStudio 版本的旧版本。

我在构建 libgit2-0.23.4时遇到了这个问题。对我来说,问题在于 VS2015中没有安装 C + + 编译器和相关软件包,因此 C: Program Files (x86) Microsoft Visual Studio 14.0 VC vcvarsall.bat文件丢失,Cmake 无法找到编译器。

我尝试在 VisualStudio2015GUI (C: Program Files (x86) Microsoft Visual Studio 14.0 Common7 IDE devenv.exe)中手动创建一个 C + + 项目 在创建这个项目的时候,我得到了一个下载 C + + 及相关软件包的提示。

在下载了所需的软件包之后,我看到 vcvarsall.bat & Cmake 能够找到编译器,并且通过以下日志成功执行:

C:\Users\aksmahaj\Documents\MyLab\fritzing\libgit2\build64>cmake ..
-- Building for: Visual Studio 14 2015
-- The C compiler identification is MSVC 19.0.24210.0
-- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual
Studio 14.0/VC/bin/cl.exe
-- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual
Studio 14.0/VC/bin/cl.exe -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Could NOT find PkgConfig (missing:  PKG_CONFIG_EXECUTABLE)
-- Could NOT find ZLIB (missing:  ZLIB_LIBRARY ZLIB_INCLUDE_DIR)
-- zlib was not found; using bundled 3rd-party sources.
-- LIBSSH2 not found. Set CMAKE_PREFIX_PATH if it is installed outside of
the default search path.
-- Looking for futimens
-- Looking for futimens - not found
-- Looking for qsort_r
-- Looking for qsort_r - not found
-- Looking for qsort_s
-- Looking for qsort_s - found
-- Looking for clock_gettime in rt
-- Looking for clock_gettime in rt - not found
-- Found PythonInterp: C:/csvn/Python25/python.exe (found version "2.7.1")
-- Configuring done
-- Generating done
-- Build files have been written to:
C:/Users/aksmahaj/Documents/MyLab/fritzing/libgit2/build64

我在使用 CMake 时也遇到了这个错误:

No CMAKE_C_COMPILER could be found.
No CMAKE_CXX_COMPILER could be found.

MSDN 库文章 Visual C + + in Visual Studio 2015 中的“警告”框给了我所需要的帮助。

默认情况下,VisualStudio2015没有安装 C + + 。因此,创建一个新的 C + + 项目将提示您下载必要的 C + + 组件。

确保选择了正确的 VisualStudio 版本。这比看起来更棘手,因为 VisualStudio2015实际上是 VisualStudio14,类似地,VisualStudio2012是 VisualStudio11。我错误地选择了 VisualStudio15,它实际上是 VisualStudio2017,当我安装了2015。

这里没有一个解决方案可以解决我的问题——只有在我为通用 C 运行时安装 WindowsUpdate 时才能解决。

现在 CMake 正在工作,不再有链接挂起。

Windows 中通用 C 运行时的更新

我将 VisualStudio2015更新2更新为 VisualStudio2015更新3,它解决了我的问题。

对于 Ubuntu,请安装以下内容:

sudo apt-get update && sudo apt-get install build-essential

这发生在我安装 VisualStudio152017之后。

VisualStudio142015的 C + + 编译器不是问题所在。这似乎是 Windows10SDK 的一个问题。

将 Windows10SDK 添加到 VisualStudio142015为我解决了这个问题。

见附件截图。

Enter image description here

我在 CMake-gui (No CMAKE_CXX_COMPILER could be found.)方面遇到了同样的问题,而从命令行运行 CMake 工作得很好。在手动添加条目之后

C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin

C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin

对于 PATH 环境变量来说,它对我很有用。

这对我在 Ubuntu 17.10(艺术食蚁兽) :

apt-get update
apt-get install build-essential

您还可以确保您是 sudo 用户,并且您对正在工作的目录具有 READ/WRITE 访问权限。我在 OS X 上也遇到过类似的问题,我只要进入 sudo 模式就可以修复它。

对我来说,使用 Visual Studio 附带的开发者命令提示符,然后仅仅从 cdyour/jcef/dir并运行 cmake -G "Visual Studio 14 Win64" ..是有效的

对我来说,当我将项目移动到一个较浅的父目录时,这个问题在 Windows 上消失了,也就是说:

C:\Users\spenc\Desktop\MyProjectDirectory

而不是

C:\Users\spenc\Desktop\...\MyProjectDirectory.

我认为问题的根源在于 MSBuild 有一个文件路径长度限制到260个字符。这会导致 CMake 执行的基本编译器测试生成名为 CompilerIdCXX.vcxproj的项目失败,并出现以下错误:

C1083: Cannot open source file: 'CMakeCXXCompilerId.cpp'

因为文件路径的长度。

C:\Users\spenc\Desktop\...\MyProjectDirectory\build\CMakeFiles\...\CMakeCXXCompilerId.cpp

超过 MAX _ PATH 限制。

CMake 然后断定不存在 CXX 编译器。

以防将来对我这样的人有帮助:

这个问题已经持续了24小时,在3台不同的64位机器上(Win7,Windows 8.1 VM 和 WIn 8.1膝上型电脑) ,同时还在尝试用 VS 2017构建 WebKit。

这里的简单问题是 VC + + 编译器(即 cl.exe 及其依赖的 DLL)对 CMake 不可见。很简单。通过使包含这些二进制文件的 VC + + 文件夹对 CMake 和工作命令提示符可见(如果您在命令提示符下运行 CMake) ,瞧!(除上文其他人提出的要点外)

无论如何,在各种修复之后——就像在这些论坛上发布的那样——我发现这很简单,就是要确保 PATH 变量的内容不会与多个 Visual Studio BIN 路径等杂乱无章; 相反,它指向:

A)你的编译器的位置(比如你喜欢的 Visual Studio 版本的 Cl.exe) ,在我的例子中(针对64位平台,在64位主机上开发)是: C: Program Files (x86) Microsoft Visual Studio 2017 Community VC Tools MSVC 14.15.26726 bin Hostx64 x64

B)和另外,包含一个名为(cl.exe 所依赖的)的依赖 DLL 的文件夹: Api-ms-win-crt-run-l1-1-0.dll -在我的机器上是:

C: Program Files (x86) MicrosoftVisualStudio2017 Community Common7 IDE 远程调试器 x64

这两个目录被添加到一个简化的和 CUSTOM 系统路径变量(在管理特权命令提示下工作) ,消除了我的“ No CMAKE _ C _ COMPILER could be found”和“ No CMAKE _ CXX _ COMPILER could be found”错误。

希望能帮到别人。

在使用 CMake 的 Xcode 生成器时,如果启用了 Ccache,我将准确地得到报告的错误。禁用 ccache 为我解决了这个问题。下面我将介绍一个适用于 MacOS 的修复/检查,但在其他平台上也应该能够类似地工作。

显然,也可以将 CMake 的 Xcode 生成器(以及其他生成器)与 ccache 结合使用,如 给你所述。但我自己从没试过。

# 1) To check if ccache is enabled:
echo $CC
echo $CXX
# This prints something like the following:
#     ccache clang -Qunused-arguments -fcolor-diagnostics.
# CC or CXX are typically set in the `.bashrc` or `.zshrc` file.


# 2) To disable ccache, use the following:
CC=clang
CXX=clang++


# 3) Then regenerate the cmake project
cmake -G Xcode <path/to/CMakeLists.txt>

我也有同样的问题。

我试图在我的机器上安装 dlib,它给了我这个错误。 问题中提到的教程导致了2017视觉工作室的下载。我通过卸载 VS2017和安装 VS2015解决了这个问题

可以通过这个 stackoverflow 线程安装 VS 2015: 如何下载 VisualStudio 社区版2015(而不是2017)

我知道这个问题是关于2015视觉工作室的。2017年我在视觉工作室遇到了这个问题。当在谷歌上搜索我登陆到这个页面。看了前面的2、3个答案后,我意识到这就是 vc + + 安装的问题。安装工作负载“使用 c + + 的桌面开发”解决了这个问题。

Desktop development with c++

查看 Cmakelists.txt,如果您发现 ARM,您需要为 ARM 安装 C + +

就是这些包裹:

适用于 ARM64的 C + + 通用 Windows 平台“不需要”

针对 ARM 的 Visual C + + 编译器和库“不需要”

用于 ARM64的 Visual C + + 编译器和库“非常可能需要”

Required for finding Threads on ARM
enable_language(C)
enable_language(CXX)

然后是问题

找不到 CMAKE _ C _ COMPILER。

找不到 CMAKE _ CXX _ COMPILER。

可能会消失,除非您指定 c 编译器,如 clang,而且也许安装 clang 会对其他方面有利。

如果不是为 ARM 编译,可以在 cmakelists.txt 中使用 # before able _ language 进行可选删除。

在尝试了所有的解决方案没有运气,我只是提供了这些缺失的参数由 cmake -DCMAKE_C_COMPILER=/usr/bin/clang -DCMAKE_CXX_COMPILER=/usr/bin/clang++ ...

请确保在安装 VisualStudio 时安装了 WindowsSDK。要添加 WindowsSDK,您可以进入 VisualStudioInstaller 并点击“修改”,然后勾选 WindowsSDK 的复选框并安装它。

在 M1 Mac 上,添加以下配置来为我修复它

 -DCMAKE_C_COMPILER="${OTHER_CXX_FLAG}" -DCMAKE_C_COMPILER="/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang" -DCMAKE_CXX_COMPILER="/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++"

配置结果是:

   cmake ../build -DCMAKE_C_COMPILER="${OTHER_CXX_FLAG}" -DCMAKE_C_COMPILER="/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang" -DCMAKE_CXX_COMPILER="/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++" -DCMAKE_SYSTEM_NAME=Darwin -DCMAKE_TARGET_SYSTEM=mac -GXcode