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


105

我正在尝试使用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的Makefiles配置项目。您尝试过什么方法?
Tsyvarev

您输入的cmake命令是什么?
bames53 2015年

您正在使用最新的CMake吗?您使用了什么发电机?您是否从Visual Studio 2015命令提示符运行命令(因此已设置了编译器环境变量)?
drescherjm 2015年

1
@ bames53只是想添加到@Caio Fontes的相应命令行中进行尝试:cmake .. -G "Visual Studio 14 2015"cmake .. -G "MSYS Makefiles"(如果gcc表示MinGW)。而且我已经看到了很多问题(例如hereherehere),并且我认为我们缺少关于SO的综合/教程答案。
Florian 2015年

Answers:


97

那些错误信息

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的情况下)
  • 您拥有最新的CMake版本
  • 您具有要CMake生成构建环境的驱动器的访问权
  • 您有一个干净的构建目录(因为CMake确实缓存了上次尝试的内容),例如作为源树的子目录

    Windows cmd.exe

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

    打击壳

    $ 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. 尝试选择正确的生成器版本

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

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

    或使用Developer Command Prompt for VS2015Windows开始菜单中All Programs/ Visual Studio 2015/ 下的快捷方式Visual Studio Tools(感谢@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 bashshell,msys.bat并尝试直接调用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 Makefiles”生成器时,必须使用mingw32-make与MinGW一起分发的程序

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

    另外,这些变量也可以通过cmake-gui.exeWindows 设置。请参阅Cmake找不到编译器

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


1
提醒您,某些cmake docs链接指向的是CMake的真正旧版本,请记住使用版本选择器来匹配计算机上的版本(例如,如果您没有看到列出的较新平台,你需要)。
jrh

40

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

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

21

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

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

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

请参阅所附的屏幕截图。

在此处输入图片说明




5

在构建libgit2-0.23.4时遇到了这个问题。对我来说,问题是VS2015未安装C ++编译器和相关程序包,因此缺少“ C:\ Program Files(x86)\ Microsoft Visual Studio 14.0 \ VC \ vcvarsall.bat”文件,Cmake找不到编译器。

我尝试在Visual Studio 2015 GUI(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

1
这对我有用。手动创建一个C ++项目以安装必要的软件包就可以解决问题。
Melaz

5

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

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


4

对我来说,当我将项目移至较浅的父目录时,该问题在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编译器。


2

确保您选择了正确的Visual Studio版本。这比看起来要棘手,因为Visual Studio 2015实际上是Visual Studio 14,类似地Visual Studio 2012是Visual Studio11。当我安装了2015时,我错误地选择了Visual Studio 15(实际上是Visual Studio 2017)。



1

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


1

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

我在3个不同的64位计算机(Win7,Windows 8.1 VM和WIn 8.1笔记本电脑)上已经有24小时的问题了-同时尝试使用VS 2017构建WebKit。

此处的简单问题是CMake对VC ++编译器(即cl.exe及其从属DLL)不可见。简单。通过使包含那些二进制文件的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),此外,该文件夹包含一个名为DLL(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

将这两个目录添加到简化的CUSTOM系统路径变量(在Admin特权命令提示符下工作),消除了我的“找不到CMAKE_C_COMPILER”和“找不到CMAKE_CXX_COMPILER”。错误。

希望它能帮助某人。


1

当使用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>

1
通过确保“ xcode-select -p”的输出指向我的Xcode安装,我能够解决相同的问题。就我而言,安装Xcode并运行“ xcode-select -r”就足够了。
TomTasche

0

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


他们推送Windows OS更新后,在我的工作地点需要此解决方案。我已使用此页面上的至少两种解决方案来修复该错误。该错误可能会在任何数量的情况下出现,因此这就是为什么有几个不同但可行的答案的原因。
娜塔莉·科特里

0

我从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环境变量。


0

对我来说,它的工作使用随Visual Studio的,然后只是开发者命令提示符cdyour/jcef/dir和运行cmake -G "Visual Studio 14 Win64" ..



0

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

使用C ++进行桌面开发


0

查看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进行编译,则可以在enable_language之前使用#将cmakelists.txt中的可选remove与#一起删除。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.