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

时间:2015-09-26 20:22:19

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

我正在尝试使用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

20 个答案:

答案 0 :(得分:76)

这些错误消息

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 version
  • 您希望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打开/编译生成的测试项目命令行(在错误日志中找到)。

  3. 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 ..
      

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

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

      CMake无法找到GCC(MinGW / MSys)

      1. 您使用bash启动MSys msys.bat 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 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 doesn't honour -D CMAKE_CXX_COMPILER=g++ Cmake error setting compiler

        或者,也可以在Windows上通过cmake-gui.exe设置这些变量。请参阅 Cmake cannot find compiler

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

答案 1 :(得分:14)

安装Visual Studio 15 2017后,发生了这种情况。

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

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

参见附页截图。

Enter image description here

答案 2 :(得分:12)

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

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

警告&#39; MSDN库文章 Visual C++ in Visual Studio 2015 中的框给了我所需的帮助。

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

答案 3 :(得分:9)

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

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

答案 4 :(得分:4)

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

然后我将其更改为&#34; Visual Studio 11 2012&#34;事情很有效。 (我的PC上有Visual Studio Ultimate 2012版本)。通常,尝试在初始CMake配置对话框中输入旧版本的Visual Studio版本。

答案 5 :(得分:4)

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

我尝试在Visual Studio 2015 GUI中手动创建C ++项目( C:\ Program Files(x86)\ Microsoft Visual Studio 14.0 \ Common7 \ IDE \ devenv.exe ) 在创建项目时,我得到了下载C ++和C ++的提示。相关包。

下载所需的软件包后,我可以看到vcvarsall.bat&amp; Cmake能够找到编译器&amp;使用以下日志成功执行:

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

答案 6 :(得分:4)

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

答案 7 :(得分:3)

这适用于我Ubuntu 17.10(Artful Aardvark):

apt-get update
apt-get install build-essential

答案 8 :(得分:2)

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

答案 9 :(得分:1)

这里的解决方案都没有解决我的问题 - 只有在我为通用C运行时安装Windows Update时才会解决。

现在,CMake正在运行,不再有来自Visual Studio的链接。

TransmitFile

答案 10 :(得分:1)

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

答案 11 :(得分: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”。错误。

希望它可以帮助某人。

答案 12 :(得分:1)

使用ccache时,如果启用了CMake's Xcode generator,我将得到确切的报告错误。禁用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>

答案 13 :(得分:0)

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

答案 14 :(得分: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环境变量。

答案 15 :(得分:0)

对我来说,它可以使用Visual Studio随附的开发人员命令提示符,然后从cdyour/jcef/dir并运行cmake -G "Visual Studio 14 Win64" ..

答案 16 :(得分:0)

我遇到了同样的问题。

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

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

答案 17 :(得分:0)

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

Desktop development with c++

答案 18 :(得分:0)

如果找到ARM,请查看Cmakelists.txt,您需要为ARM安装C ++

这些程序包:

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

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

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

DOCTYPE

然后是问题

找不到CMAKE_C_COMPILER。

找不到CMAKE_CXX_COMPILER。

除非您指定clang之类的c编译器,否则它可能会消失,并且安装clang可能会有所帮助。

如果您不针对ARM进行编译,则可以在enable_language之前使用#将cmakelists.txt中的可选remove与#一起删除。

答案 19 :(得分:0)

在没有运气的情况下尝试了所有解决方案后,我只是通过 cmake -DCMAKE_C_COMPILER=/usr/bin/clang -DCMAKE_CXX_COMPILER=/usr/bin/clang++ ...

提供了那些缺少的参数