Erro CMake no CMakeLists.txt: 30 (projeto): não CMAKE_C_COMPILER pôde ser encontrado

Eu estou tentando fazer uma solução Visual Studio com CMake para compilar a versão mais recente do aseprite e CMake continua me dando o seguinte:

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

Já baixei o GCC e estou usando o Visual Studio 2015 .

Estou seguindo este tutorial:

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

Essas mensagens de erro

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

ou

 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! 

Significa que o CMake não conseguiu encontrar o seu compilador C / CXX para compilar um programa de teste simples (uma das primeiras coisas que o CMake tenta enquanto detecta o seu ambiente de compilation).

As etapas para encontrar seu problema dependem do ambiente de criação que você deseja gerar. Os seguintes tutoriais são uma coleção de respostas aqui no Stack Overflow e algumas das minhas próprias experiências com o CMake no Microsoft Windows 7/8/10 e no Ubuntu 14.04.

Condições prévias

  • Você instalou o compilador / IDE e já foi capaz de compilar qualquer outro programa (diretamente sem o CMake)
    • Você, por exemplo, pode ter o IDE, mas pode não ter instalado o compilador ou a própria estrutura de suporte, como descrito em Problemas ao Gerar Solução para o VS 2017 com o CMake ou Como Dizer ao CMake para Usar o Clang no Windows?
  • Você tem a versão mais recente do CMake
  • Você tem direitos de access na unidade que deseja que o CMake gere seu ambiente de criação
  • Você tem um diretório de compilation limpo (porque o CMake armazena em cache as coisas da última tentativa), por exemplo, como subdiretório de sua tree de origem

    Windows cmd.exe

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

    Concha de basquete

     $ rm -rf MSYS $ mkdir MSYS $ cd MSYS 

    e certifique-se de que seu shell de comando aponta para o diretório de saída binário recém-criado.

Coisas gerais que você pode / deveria tentar

  1. O CMake é capaz de encontrar e executar qualquer compilador padrão? Corra sem dar um gerador

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

    Perfeito se determinou corretamente o gerador para usar – como aqui Visual Studio 14 2015

  2. O que foi que realmente falhou?

    No diretório de saída de construção anterior, consulte CMakeFiles\CMakeError.log para obter qualquer mensagem de erro que faça sentido para você ou tente abrir / compilar o projeto de teste gerado em CMakeFiles\[Version]\CompilerIdC | CompilerIdCXX diretamente da linha de comando (conforme encontrado no log de erros).

CMake não pode encontrar o Visual Studio

  1. Tente selecionar a versão correta do gerador :

     > cmake --help > cmake -G "Visual Studio 14 2015" .. 
  2. Se isso não ajudar, tente definir as variables ​​de ambiente do Visual Studio primeiro (o caminho pode variar):

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

    ou use o Developer Command Prompt for VS2015 do Developer Command Prompt for VS2015 no Menu Iniciar do Windows em All Programs / Visual Studio 2015 / Visual Studio Tools (obrigado em @Antwane pela dica).

Background : O CMake suporta todos os lançamentos e versões do Visual Studio (Express, Community, Professional, Premium, Test, Team, Enterprise, Ultimate, etc.). Para determinar a localização do compilador, ele usa uma combinação de pesquisa no registro (por exemplo, em HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\[Version];InstallDir ), variables ​​de ambiente do sistema e – se nenhuma das outras criou algo – claramente tente chamar o compilador.

O CMake não consegue encontrar o GCC (MinGW / MSys)

  1. Você inicia o shell bash do MSys com msys.bat e apenas tenta chamar diretamente o gcc

     $ gcc gcc.exe: fatal error: no input files compilation terminated. 

    Aqui ele encontrou o gcc e está reclamando que eu não dei nenhum parâmetro para trabalhar com ele.

    Então, o seguinte deve funcionar:

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

    Se o GCC não foi encontrado, a export PATH=... chamadas export PATH=... para adicionar seu caminho de compiladores (veja Como definir a variável de ambiente PATH no script CMake? ) E tente novamente.

  2. Se ainda não estiver funcionando, tente definir o caminho do compilador CXX diretamente exportando-o (o caminho pode variar)

     $ 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 

    Para obter mais detalhes, consulte Como especificar o novo caminho do GCC para o CMake

    Nota : Ao usar o gerador “MinGW Makefiles” você tem que usar o programa mingw32-make distribuído com o MinGW

  3. Ainda não funciona? Isso é estranho. Por favor, certifique-se que o compilador está lá e tem direitos executáveis ​​(veja também as pré-condições, capítulo acima).

    Caso contrário, o último recurso do CMake é não tentar qualquer pesquisa do compilador e definir as variables ​​internas do CMake diretamente

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

    Para mais detalhes veja Cmake não honra -D CMAKE_CXX_COMPILER = g + + e compilador de configuração de erro Cmake

    Como alternativa, essas variables ​​também podem ser definidas via cmake-gui.exe no Windows. Veja Cmake não pode encontrar o compilador

Background : Muito parecido com o Visual Studio. O CMake suporta todos os tipos de sabores do GCC. Ele procura nas variables ​​de ambiente (CC, CXX, etc.) ou simplesmente tenta chamar o compilador. Além disso, ele detectará quaisquer prefixos (ao compilar cruzadamente ) e tentará incluí-lo em todos os binutils da cadeia de ferramentas do compilador GNU ( ar , ranlib , strip , ld , nm , objdump e objcopy ).

Eu também experimentei esse erro ao trabalhar com o CMake:

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

A checkbox ‘aviso’ no artigo da biblioteca MSDN Visual C ++ no Visual Studio 2015 me deu a ajuda que eu precisava.

O Visual Studio 2015 não vem com o C ++ instalado por padrão. Assim, a criação de um novo projeto C ++ solicitará que você baixe os componentes C ++ necessários.

Isso aconteceu comigo depois que instalei o Visual Studio 15 2017.

O compilador C ++ para o Visual Studio 14 2015 não foi o problema. Parecia ser um problema com o Windows 10 SDK.

Adicionar os SDKs do Windows 10 ao Visual Studio 14 2015 resolveu o problema para mim.

Veja a captura de canvas anexada.

Digite a descrição da imagem aqui

Eu corri para este problema ao construir libgit2-0.23.4. Para mim, o problema foi que o compilador C ++ e os pacotes relacionados não foram instalados com o VS2015, portanto, o arquivo “C: \ Arquivos de Programas (x86) \ Microsoft Visual Studio 14.0 \ VC \ vcvarsall.bat” estava ausente e o Cmake não conseguiu o compilador.

Tentei criar manualmente um projeto C ++ na GUI do Visual Studio 2015 ( C: \ Arquivos de Programas (x86) \ Microsoft Visual Studio 14.0 \ Common7 \ IDE \ devenv.exe ) e durante a criação do projeto, recebi um aviso para fazer o download do C ++ e pacotes relacionados.

Depois de baixar os pacotes necessários, eu pude ver vcvarsall.bat & Cmake foi capaz de encontrar o compilador e executado com sucesso com o seguinte log:

 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 

Eu tive os mesmos erros com CMake. No meu caso, usei a versão errada do Visual Studio na checkbox de diálogo inicial do CMake, onde temos que selecionar o compilador do Visual Studio.

Então eu mudei para “Visual Studio 11 2012” e as coisas funcionaram. (Eu tenho a versão do Visual Studio Ultimate 2012 no meu PC). Em geral, tente inserir uma versão mais antiga da versão do Visual Studio na checkbox de diálogo inicial de configuração do CMake.

Verifique se você selecionou a versão correta do Visual Studio. Isso é mais complicado do que parece porque o Visual Studio 2015 é, na verdade, o Visual Studio 14 e, similarmente, o Visual Studio 2012 é o Visual Studio 11. Eu tinha selecionado incorretamente o Visual Studio 15, que é na verdade o Visual Studio 2017, quando eu tinha 2015 instalado.

Nenhuma das soluções aqui resolve meu problema – somente quando instalo o Windows Update para o tempo de execução C universal.

Agora, o CMake está funcionando e não há mais vínculo entre o Visual Studio.

Atualização para o Universal C Runtime no Windows

Para o Ubuntu, por favor instale as seguintes coisas:

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

Para mim, este problema desapareceu no Windows quando eu mudei meu projeto para um diretório pai mais raso, ou seja:

C:\Users\spenc\Desktop\MyProjectDirectory

ao invés de

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

Eu acho que a origem do problema foi que o MSBuild tem uma restrição de comprimento de caminho de arquivo para 260 caracteres. Isso faz com que o teste básico do compilador CMake seja executado para criar um projeto chamado CompilerIdCXX.vcxproj para falhar com o erro:

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

porque o comprimento do caminho do arquivo, por exemplo

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

excede a restrição MAX_PATH.

O CMake conclui que não há compilador CXX.

Eu atualizei o Visual Studio 2015 atualização 2 para o Visual Studio 2015 atualização 3 e resolveu meu problema.

Eu tive o mesmo problema com cmake-gui ( No CMAKE_CXX_COMPILER could be found. ), Enquanto a execução CMake da linha de comando funcionou bem. Depois de adicionar manualmente as inputs

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

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

para a variável de ambiente PATH, funcionou para mim.

Isso funciona para mim no Ubuntu 17.10 (Artful Aardvark):

 apt-get update apt-get install build-essential 

Você também pode ter certeza de que é o usuário sudo e tem access READ / WRITE no diretório em que está trabalhando. Eu tive um problema semelhante no OS X, e consegui corrigi-lo apenas entrando no modo sudo.

Para mim, funcionou usar o Developer Command Prompt que vem com o Visual Studio e, em seguida, apenas cd para o your/jcef/dir e execute cmake -G "Visual Studio 14 Win64" ..