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?


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.


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.


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.


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.


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


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.


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.


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.


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.


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.


1

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


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.


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.


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.


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.


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.


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 .



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.


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


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.



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.


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


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.



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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.