【问题标题】:CMake error at CMakeLists.txt:30 (project): No CMAKE_C_COMPILER could be foundCMakeLists.txt:30(项目)处的 CMake 错误:找不到 CMAKE_C_COMPILER
【发布时间】:2020-06-01 13:18:34
【问题描述】:

我正在尝试使用 CMake 制作 Visual Studio 解决方案来编译最新版本的 aseprite,而 CMake 不断给我:

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

我已经下载了 GCC,我正在使用Visual Studio 2015。

我正在学习本教程:

https://github.com/aseprite/aseprite/blob/master/INSTALL.md

【问题讨论】:

  • 您可以使用编译器为 Visual Studio 或使用 gcc 的 Makefile 配置项目。你试过什么方法?
  • 你输入的cmake命令是什么?
  • 您使用的是最新的 CMake 吗?你用的是什么发电机?您是否从 Visual Studio 2015 命令提示符运行了命令(因此设置了编译器环境变量)?
  • @bames53 只是想添加到相应的命令行以供@Caio Fontes 尝试:cmake .. -G "Visual Studio 14 2015" 或cmake .. -G "MSYS Makefiles"(如果gcc 表示MinGW)。我经常看到这些问题(如here、here 或here),我认为我们缺少关于 SO 的组合/教程答案。

标签: c++ visual-studio gcc cmake visual-studio-2015


【解决方案1】:

那些错误信息

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 在检测您的构建环境时首先尝试的事情之一)。

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

前提条件

  • 您已经安装了编译器/IDE,并且它能够一次编译任何其他程序(直接不使用 CMake)
  • 你有最新的CMake version
  • 您对希望 CMake 生成构建环境的驱动器具有访问权限
  • 您有一个干净的构建目录(因为 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

  2. 究竟是什么失败了?

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

CMake 找不到 Visual Studio

  1. 尝试选择正确的generator version:

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

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

    或使用 Windows 开始菜单中All Programs/Visual Studio 2015/Visual Studio Tools 下的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=... 以添加您的编译器路径(请参阅 How to set PATH environment variable in CMake script?)并重试。

  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
    

    更多详情见How to specify new GCC path for CMake

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

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

    否则CMake的最后一招就是不要自己尝试任何编译器搜索,直接通过设置CMake的内部变量

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

    更多详情请见Cmake doesn't honour -D CMAKE_CXX_COMPILER=g++和Cmake error setting compiler

    另外,这些变量也可以在 Windows 上通过cmake-gui.exe 设置。见Cmake cannot find compiler

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

【讨论】:

  • 请注意,一些 cmake 文档链接指向一个非常旧的 CMake 版本,请记住使用版本选择器来匹配您计算机上的版本(例如,如果您不'没有看到您需要的更新平台)。
  • 不错的清单。但是注意gcc在没有安装g++的情况下可以正常,导致报错。
  • 为cmake-gui.exe 提供C/C++ 编译器路径解决了问题。
【解决方案2】:

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

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

【讨论】:

  • CentOS 7.9 使用什么
  • 我在 Ubuntu 上这样做了,但它触发了错误“CXX 编译器标识未知”
【解决方案3】:

这发生在我安装 Visual Studio 15 2017 之后。

Visual Studio 14 2015 的 C++ 编译器不是问题所在。这似乎是 Windows 10 SDK 的问题。

将 Windows 10 SDK 添加到 Visual Studio 14 2015 为我解决了这个问题。

见附件截图。

【讨论】:

    【解决方案4】:

    这对我有用 Ubuntu 17.10 (Artful Aardvark):

    apt-get update
    apt-get install build-essential
    

    【讨论】:

      【解决方案5】:

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

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

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

      Visual Studio 2015 默认没有安装 C++。因此,创建一个新的 C++ 项目会提示您下载必要的 C++ 组件。

      【讨论】:

        【解决方案6】:

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

        我尝试在 Visual Studio 2015 GUI 中手动创建 C++ 项目(C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\devenv.exe) 在创建项目时,我收到了下载 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
        

        【讨论】:

        • 这对我有用。手动创建一个 C++ 项目来安装必要的包就可以了。
        【解决方案7】:

        我在使用 CMake 时遇到了同样的错误。就我而言,我在初始 CMake 对话框中使用了错误的 Visual Studio 版本,我们必须在其中选择 Visual Studio 编译器。

        然后我将其更改为“Visual Studio 11 2012”并且一切正常。 (我的 PC 上有 Visual Studio Ultimate 2012 版本)。一般情况下,请尝试在初始 CMake 配置对话框中输入旧版本的 Visual Studio 版本。

        【讨论】:

          【解决方案8】:

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

          C:\Users\spenc\Desktop\MyProjectDirectory

          而不是

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

          我认为问题的根源在于 MSBuild has a file path length restriction 到 260 个字符。这会导致 CMake 为构建名为 CompilerIdCXX.vcxproj 的项目而执行的基本编译器测试失败并出现错误:

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

          因为文件路径的长度,例如

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

          超过了 MAX_PATH 限制。

          CMake 然后断定没有 CXX 编译器。

          【讨论】:

            【解决方案9】:

            确保您选择了正确版本的 Visual Studio。这比看起来更棘手,因为 Visual Studio 2015 实际上是 Visual Studio 14,同样 Visual Studio 2012 是 Visual Studio 11。当我安装 2015 时,我错误地选择了 Visual Studio 15,它实际上是 Visual Studio 2017。

            【讨论】:

              【解决方案10】:

              这里的解决方案都不能解决我的问题 - 只有当我为通用 C 运行时安装 Windows 更新时。

              现在 CMake 正在运行,并且 Visual Studio 中没有更多链接挂起。

              Update for Universal C Runtime in Windows

              【讨论】:

                【解决方案11】:

                您还可以确保您是 sudo 用户,并且您对正在工作的目录具有读/写访问权限。我在 OS X 上遇到了类似的问题,我只是通过进入 sudo 模式来解决它。

                【讨论】:

                  【解决方案12】:

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

                  我在 3 台不同的 64 位机器(Win7、Windows 8.1 VM 和 WIn 8.1 笔记本电脑)上遇到此问题 24 小时 - 同时尝试使用 VS 2017 构建 WebKit。

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

                  无论如何,在进行了各种修复之后——正如在许多论坛上发布的那样——我发现这只是确保 PATH 变量的内容不会被多个 Visual Studio BIN 路径等弄乱的问题;而是指向:

                  a) 编译器的位置(即 cl.exe 用于您首选的 Visual Studio 版本),在我的情况下(针对 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-runtime-l1-1-0.dll - 在我的机器上是:

                  C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\Remote Debugger\x64

                  这两个目录被添加到一个简化的自定义系统路径变量(在管理员特权命令提示下工作),消除了我的“找不到 CMAKE_C_COMPILER”和“找不到 CMAKE_CXX_COMPILER”。错误。

                  希望对某人有所帮助。

                  【讨论】:

                    【解决方案13】:

                    如果在使用CMake's Xcode generator 时启用了ccache,我会得到准确报告的错误。禁用 ccache 为我解决了这个问题。下面我提出了一个适用于 MacOS 的修复/检查,但在其他平台上应该也可以类似地工作。

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

                    # 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>
                    

                    【讨论】:

                    • 我能够通过确保“xcode-select -p”的输出指向我的 Xcode 安装来解决相同的问题。就我而言,安装 Xcode 并运行“xcode-select -r”就足够了。
                    【解决方案14】:

                    我知道这个问题是关于 Visual Studio 2015 的。我在 Visual Studio 2017 中遇到了这个问题。在谷歌上搜索时,我登陆了这个页面。在查看第一个 2,3 个答案后,我意识到这是 vc++ 安装的问题。安装工作负载“使用 c++ 进行桌面开发”解决了该问题。

                    【讨论】:

                      【解决方案15】:

                      在尝试了所有解决方案都没有成功后,我只是通过cmake -DCMAKE_C_COMPILER=/usr/bin/clang -DCMAKE_CXX_COMPILER=/usr/bin/clang++ ...提供了那些缺少的参数

                      【讨论】:

                      • 这个解决了我在 Ubuntu 20 上的问题...
                      【解决方案16】:

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

                      【讨论】:

                      • 在他们推送 Windows 操作系统更新后,我在工作场所需要此解决方案。我已使用此页面上的至少 2 个解决方案来修复错误。该错误可能在任何情况下出现,因此这就是为什么有几个不同但可行的答案的原因。
                      【解决方案17】:

                      我在使用 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 环境变量。

                      【讨论】:

                        【解决方案18】:

                        对我来说,使用 Visual Studio 附带的开发人员命令提示符,然后将 cd 到 your/jcef/dir 并运行 cmake -G "Visual Studio 14 Win64" .. 就可以了

                        【讨论】:

                          【解决方案19】:

                          我遇到了同样的问题。

                          我试图在我的机器上安装 dlib,它给了我这个错误。 问题中提到的教程导致下载visual studio 2017。我通过卸载VS 2017并安装VS 2015解决了这个问题

                          可以通过这个 stackoverflow 线程安装 VS 2015: How to download Visual Studio Community Edition 2015 (not 2017)

                          【讨论】:

                            【解决方案20】:

                            查看 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。

                            除非你指定像clang这样的c编译器,否则可能会消失,也许安装clang会有其他好处。

                            如果您不是为 ARM 编译,您可以在 cmakelists.txt 中使用 # 在 enable_language 之前进行可选删除。

                            【讨论】:

                              【解决方案21】:

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

                              【讨论】:

                                猜你喜欢
                                • 2018-01-20
                                • 1970-01-01
                                • 2016-08-27
                                • 2020-12-09
                                • 2020-06-08
                                • 1970-01-01
                                相关资源
                                最近更新 更多