CMake não encontra compilador Visual C ++

118

Depois de instalar o Visual Studio 2015 e executar o CMake em um projeto anterior, erros do CMake informando que não foi possível encontrar o compilador C.

The C compiler identification is unknown
The CXX compiler identification is unknown
CMake Error at CMakeLists.txt:4 (PROJECT):
  No CMAKE_C_COMPILER could be found.

CMake Error at CMakeLists.txt:4 (PROJECT):
  No CMAKE_CXX_COMPILER could be found.

Fui pesquisar cl.exena pasta Visual Studio,, C:\Program Files\Microsoft Visual Studio 14.0e não consegui encontrar.

Como faço para configurar o CMake para funcionar no Windows com o Visual Studio 2015?

Asher
fonte
1
Talvez o caminho de instalação de 2015 não seja o que o CMake esperava? Qual versão do CMake você usa? Além disso, não sei sobre a versão Windows do CMake, mas pode ser possível que o CMake procure no PATHpara encontrar o programa de que precisa, então, se não estiver atualizado, não poderá encontrar o compilador.
Algum programador cara
1
Estou usando o cmake versão 3.2.3, que afirma ter suporte para o Visual Studio 2015
Asher
1
Use a versão 3.2.x, encontrei este problema quando instalei o Cmake antes do VS2015, então reinstale o cmake, conserte isso para mim
Andiana
Às vezes, você simplesmente se esquece de reinicializar o computador ou não quer depois de uma instalação ou atualização do Visual Studio. Nesse caso, o CMake não encontrará o seu compilador.
Noki

Respostas:

124

Eu encontrei a solução. Embora o IDE do Visual Studio tenha sido instalado com êxito, ele não instalou nenhuma ferramenta de compilação e, portanto, não instalou o compilador C ++.

Ao tentar criar manualmente um projeto C ++ na GUI do Visual Studio 2015, fui capaz de solicitar que ele baixasse os pacotes C ++. O CMake foi então capaz de encontrar o compilador sem qualquer dificuldade.

Asher
fonte
2
Legal, essa resposta me deu uma pista. Eu uso meu ISO VS2015 para instalar os componentes C ++ e o problema foi resolvido.
Peter Liang
Eu também instalei usando o ISO VS2015 e instalei apenas as peças básicas vb / c #. Tive que lançar o ISO novamente para modificar e instalar outras coisas c ++.
Abhinav Gauniyal
2
Exatamente quais pacotes / componentes / coisas vocês instalaram? Eu criei um Visual C ++ / Win32Project, e ele instalou dois componentes e funcionou bem dentro do VS, mas cmake ainda reclamava como antes. Obrigado. -S
ssimm
Isso é muito simpático!
user2434741
2
Isso funcionou com o vs 2017 também - que coisa estranha! Obrigado pela dica, cara!
Steve Horvath
36

Aqui está a solução que funcionou para mim:

  1. Abra a ferramenta de prompt de comando do Visual Studio (como administrador). No Windows 10, pode ser chamado de 'prompt de comando do desenvolvedor'.
  2. Navegue até onde você tem o executável CMake
  3. Execute Cmake.exe
  4. Proceda normalmente para selecionar a compilação e a pasta de origem
  5. Selecione o compilador Visual Studio apropriado e aperte o botão configurar

Esperançosamente, deve funcionar sem problemas.

Fortuna
fonte
3
Não acho que você precise executar o prompt de comando do VS como administrador. Mas a execução do prompt de comando do VS coloca tudo que o cmake está procurando no caminho. Dependendo de como você instalou o CMake (se você o colocou no caminho), você também pode navegar para o diretório de construção e executar a cmake ..partir daí. De qualquer forma, votado positivamente, porque o terminal git-bash, por exemplo, não coloca tudo automaticamente em seu caminho. Isso me ajudou!
hetepeperfan
1
Isso parece mais uma solução alternativa do que uma solução, já que normalmente os geradores IDE não precisam das várias variáveis ​​de ambiente encontradas no conjunto de prompts de comando dev (você só precisa disso se estiver usando um gerador de makefile ou similar, como como Ninja)
Ryan Pavlik
2
atualização: no Windows 10, isso é chamado de Prompt de comando
Mattijs
2
Explicação muito estranha: 1: Não é chamado de prompt de comando do VS Studio 2: "navegar", você quer dizer usar o comando "cd"? 3: Você quer dizer, execute cmake-gui? Como você disse na etapa 5 para "clicar" em um botão 4: Continuar ?? você quer dizer preencher? 5: Na caixa suspensa na janela de configuração, posso selecionar o compilador VS, mas ainda assim os compiladores C e C ++ são desconhecidos ...
DrumM
1
A propósito, basta digitar search cmake e você encontrará o cmake-gui
DrumM
31

Eu olhei no arquivo CMakeError.log e encontrei um erro sobre cannot run 'rc.exe'

Eu pesquisei e encontrei esta resposta para copiar RC.Exe e RcDll.Dll do bin SDKs da Microsoft para o bin VC, e então CMake funcionou.


Edit: A resposta principal para outra pergunta sugere que é um problema de PATH, portanto, pode ser o suficiente para garantir que o compartimento do Microsoft SDK esteja em seu PATH.

Carl Walsh
fonte
15

Certifique-se de estar usando a versão correta do Visual Studio no gerador. Eu tinha selecionado incorretamente o Visual Studio 15 quando o Visual Studio 14 foi instalado.

Hrushikesh Kulkarni
fonte
3
Esse era o meu problema também. É confuso porque o Visual Studios 2015 é a versão 14!
Paul Wintz
4
Observe que pode ser necessário excluir o cache para alterar a versão do VS. Para fazer isso, clique em Arquivo> Excluir Cache.
Paul Wintz
Isso ajudou ... versionamento no seu melhor!
Noel Widmer
arrrrg, @PaulWintz obrigado por esse lembrete. Acho que no meu caso executei o cmake com um cache cmake limpo, mas enquanto o VisualStudio esperava que eu reiniciasse o computador para concluir uma atualização do VS, o cmake inteligentemente armazenou em cache a situação ruim.
orion elenzil
13

Aqueles que tropeçam com isso no Visual Studio 2017: há um recurso relacionado ao CMake que precisa ser selecionado e instalado junto com os conjuntos de ferramentas do compilador relevantes. Veja a imagem abaixo.

As ferramentas Visaul C ++ para CMake devem ser instaladas

Vadim Berman
fonte
E a versão 2015? Não consegui encontrar essa caixa de seleção na instalação de 2015. Uma solução poderia ser a atualização para 2017 ...
DrumM
1
@DrumM, isso é especificamente para Visual Studio 2017. Não acredito que o recurso exista no VS 2015.
Vadim Berman
Tem certeza de que isso é necessário? Não é apenas para usar o CMake de dentro do Visual Studio?
Peter Mortensen,
@PeterMortensen: resolveu o problema para mim. Mais uma vez, Visual Studio 2017.
Vadim Berman
9

Se nenhuma das soluções acima funcionar, pare e faça uma verificação de integridade.

Eu me queimei usando a -G <config>corda errada e isso me deu este erro enganoso.

Primeiro, execute o prompt de comando do VS, não o prompt de comando regular. Você pode encontrá-lo em Start Menu -> Visual Studio 2015 -> MSBuild Command Prompt for VS2015Isto configura todos os caminhos corretos para ferramentas VS, etc.

Agora veja quais geradores estão disponíveis no cmake ...

cmake -help

...<snip>... The following generators are available on this platform: Visual Studio 15 [arch] = Generates Visual Studio 15 project files. Optional [arch] can be "Win64" or "ARM". Visual Studio 14 2015 [arch] = Generates Visual Studio 2015 project files. Optional [arch] can be "Win64" or "ARM". Visual Studio 12 2013 [arch] = Generates Visual Studio 2013 project files. Optional [arch] can be "Win64" or "ARM". Visual Studio 11 2012 [arch] = Generates Visual Studio 2012 project files. Optional [arch] can be "Win64" or "ARM". Visual Studio 10 2010 [arch] = Generates Visual Studio 2010 project files. Optional [arch] can be "Win64" or "IA64". ...

Em seguida, escolha a string apropriada com o [arco] adicionado.

mkdir _build cd _build cmake .. -G "Visual Studio 15 Win64"

Executar cmake em um subdiretório torna mais fácil fazer uma 'limpeza', pois você pode simplesmente deletar tudo naquele diretório.

Eu atualizei para o Visual Studio 15, mas não estava prestando atenção e estava tentando gerar para 2012.

TrophyGeek
fonte
7

Para mim, verifiquei o CMakeError.logarquivo e encontrei:

[...] erro MSB8036: O SDK do Windows versão 8.1 não foi encontrado. Instale a versão necessária do Windows SDK ou altere a versão do SDK nas páginas de propriedades do projeto ou clicando com o botão direito na solução e selecionando "Retarget solution".

Isso apesar de usar o Visual Studio 2017 no Windows 7. Portanto, parece que o CMake está tentando construir seu projeto de detecção com o SDK do Windows 8.1.

Usei o instalador do Visual Studio para adicionar esse componente e agora o CMake está feliz como um molusco.

chowey
fonte
4

Menu → Visual Studio 2015 → Prompt de comando do MSBuild para Visual Studio 2015. O CMake pode encontrar cl.exe.

set PATH="c:\Program Files (x86)\Windows Kits\10\bin\10.0.16299.0\x64\";%PATH%

Altere o caminho superior para onde o Windows SDK está instalado.

CMake pode encontrar rc.exe.

cd para o caminho de CMakeLists.txte faça:

md .build
cd .build
cmake .. -G "Visual Studio 14 2015 Win64" -DCMAKE_BUILD_TYPE=Release
cmake --build .

O parâmetro após -Gdeve ser buscado pelo CMake. Use --help; você pode ou não ter o gerador.

Alen Wesker
fonte
Quando você tiver o msvc 2015 e 2017 instalado e tentar construir com o msvc 2015, ele detectará automaticamente o SDK 10.0 ao executar o prompt de comando vs2015. Você pode especificar a versão do SDK modificando o "VS2015 x64 Native Tools Command Prompt" para forçar o SDK de 8.1 adicionando no final do parâmetro da linha de comando como este; "% comspec% / k" "C: \ Arquivos de programas (x86) \ msdev2015 \ VC \ vcvarsall.bat" "amd64 8.1"
kalmiya
Devo instalar o 'MSBuild Command Prompt para Visual Studio 2015' separadamente? Instalei o msvc 2017, mas o prompt de comando para o visual studio não está lá.
meen
2

Encontrei o mesmo problema e corrigi-lo reiniciando a instalação do Visual Studio e marcando a seguinte opção:

Windows and Web Development/ Universal Windows App Development Tools/Windows 10 SDK

Ele contém os cabeçalhos C ++ padrão usados ​​na maioria dos aplicativos e, portanto, geralmente é necessário instalá-lo também.

Philippe Ferdinand
fonte
2

Tive esse problema no Windows 10 ao usar o Visual Studio 2015 Professional, enquanto o Visual Studio 2015 Express funcionava! No Windows 7, as duas versões do Visual Studio costumavam funcionar.

Novos projetos criados a partir do Visual Studio 2015 Professional IDE são compilados com êxito, mas o CMake não consegue encontrar o relatório do compilador:

The C compiler identification is unknown
The CXX compiler identification is unknown

Eu atualizei o CMake de 3.4.1 para 3.11.4 e agora o problema desapareceu.

jpo38
fonte
1

Se você estiver no Visual Studio 2017, você precisa de pelo menos CMake 3.8!

Lars Bilke
fonte
1

Tive um problema semelhante com o projeto Visual Studio 2017 gerado por meio do CMake. Alguns dos pacotes estavam faltando durante a instalação do Visual Studio no desenvolvimento de Desktop com C ++. Veja o instantâneo:

Pacotes do Visual Studio 2017:

Pacotes Visual Studio2017

Além disso, atualize o CMake para a versão mais recente.

vinodsaluja
fonte
0

No meu caso, havia um conjunto de variáveis ​​de ambiente que causou esse erro. O problema foi resolvido após a exclusão de cxx_flags das variáveis ​​de ambiente.

Starger
fonte
0

Tive esse problema com o CMake 3.12.1, após uma atualização do Visual Studio 2017. Simplesmente executei novamente o CMake e funcionou.

0xF
fonte
0

No meu caso, pude ver no CMakeError.logque o CMake não conseguiu encontrar o SDK do Windows ( MSB8003: Could not find WindowsSDKDir variable from the registry).

A versão pode ser especificada na linha de comando na primeira execução do CMake usando:

-DCMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION=

Fui mais longe depois de definir isso, mas encontrei mais problemas depois (portanto, presumo que meu ambiente está bagunçado de alguma forma), mas talvez isso ajude alguém com esse problema.

Zitrax
fonte
0

Algumas dicas:

  • Tente definir o caminho manualmente marcando 'avançado' e modificando CMAKE_LINKER e CMAKE_MAKE_PROGRAM
  • Exclua o cache - no CMake com GUI, vá para: Arquivo → Excluir Cache.

Meu problema era uma combinação do que foi dito anteriormente: configurei a versão do compilador para 15 em vez de 14 e, quando corrigido, tive que deletar o cache.

Também iniciei o prompt de comando do Visual Studio como administrador e a partir daí executei o cmake-gui.exe

Então, tudo funcionou como deveria.

Rarach
fonte
0

No meu caso, o problema era que o projeto pai, que inclui googletest via

add_subdirectory(gtest_dir)

foi definido como

PROJECT( projname CXX )

De alguma forma, o CMake não reconhece

PROJECT(sub_project_name CXX C)

uma vez que o compilador C não está definido no pai.

Resolvi o problema usando

PROJECT( projname CXX C)

no meu CMakeLists.txtarquivo principal .

Mojovski
fonte
0

Nenhuma das soluções anteriores funcionou para mim. No entanto, percebi que, embora tenha instalado o Visual Studio versão 15 (não confundir com o Visual Studio 2015), o diretório criado em meu computador era para o Visual Studio 14.

Quando especifiquei o Visual Studio 14 ao pressionar o botão de configuração, ele funcionou.

Gamaliel
fonte
A numeração da versão do Visual Studio é simplesmente ... estranha. O Visual Studio 14 é na realidade o Visual Studio 2015, não há Visual Studio 2014. Veja a resposta da trophygeek stackoverflow.com/a/40332976/1319284
kutschkem
0

Encontrei esta solução no stackoverflow e trabalho para mim, embora não funcione com outras soluções se você tiver um sistema operacional Windows 10, seguir os seguintes passos resolverá o problema:

1) vá para C: \ Arquivos de programas (x86) \ Microsoft SDKs \ Windows \ v7.1A \ Bin

2) em seguida, copie RC.exe e RcDll deste arquivo

3) vá para C: \ Arquivos de programas (x86) \ Microsoft Visual Studio 14.0 \ VC \ bin e cole os dois arquivos que você copiou nele.

isso é tudo que eu espero que seja útil ...

tigre inteligente
fonte
0

Procure no Cmakelists.txt se você encontrar o ARM, você precisa instalar o C ++ para ARM e também vcvarsall.bat usar para a pasta bin ARM.

São estes pacotes:

Plataforma C ++ Universal do Windows para ARM64 "Não Obrigatório"

Compiladores e bibliotecas do Visual C ++ para ARM "Não obrigatório"

Compiladores e bibliotecas do Visual C ++ para ARM64 "Muito provavelmente necessária"

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

Então, os problemas podem desaparecer:

Nenhum CMAKE_C_COMPILER foi encontrado.

Nenhum CMAKE_CXX_COMPILER foi encontrado.

Se acima não resolver seu problema?

Opcionalmente, você pode remover as opções C e CXX em cmakelists.txt definindo # na frente de onde está enable_language (C). E evite a compilação do processador ARM do Android.

Dealazer
fonte
0

Resolvido ao adicionar o componente ausente Modificar-> continuar adicionar como segue Consertar

ABDULRAHMAN ALKHAMEES
fonte
Uma resposta apenas com link não é recomendada.
Ṃųỻịgǻňạcểơửṩ
0

Tive um problema relacionado: os geradores do Visual C ++ nem estavam na lista durante a execução cmake --help.

Corri where cmakeno console e descobri que o cygwin também fornece seu próprio arquivo cmake.exe , que estava sendo usado. Alterar a ordem dos diretórios no PATH corrigiu o problema.

Stgatilov
fonte
0

A verificação de CMakeErrors.log em CMakeFiles retornou:

C: \ Arquivos de programas (x86) \ MSBuild \ Microsoft.Cpp \ v4.0 \ V140 \ Platforms \ x64 \ PlatformToolsets \ v140_xp \ Toolset.targets (36,5): aviso MSB8003: Não foi possível encontrar a variável WindowsSdkDir_71A no registro. TargetFrameworkVersion ou PlatformToolset pode ser definido com um número de versão inválido.

O erro significa que as ferramentas de compilação para XP (v140_xp) não estão instaladas. Para corrigi-lo, instalei o recurso adequado no instalador do Visual Studio 2019 na guia Componentes individuais:

insira a descrição da imagem aqui

Nathan Moinvaziri
fonte
0

Tive esse problema com o CMake GUI e o VS 21019 Community Edition. Acho que posso ter instalado o CMake antes do Visual Studio - certamente depois de atualizar o CMake 3.15.2 para 3.15.3 o problema foi embora.

Mike Pelton
fonte
0

Verifique se o nome da pasta é muito longo ou não.

user1633912
fonte
-3

Porque CMake não é capaz de encontrar seu compilador Visual Studio. Inicie qualquer projeto que baixe os compiladores necessários e o CMake deve ser capaz de encontrá-lo.

Kushal
fonte