CMake no encuentra el compilador de Visual C ++

118

Después de instalar Visual Studio 2015 y ejecutar CMake en un proyecto anterior, CMake errores indicando que no pudo encontrar el 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.

Busqué cl.exeen la carpeta de Visual Studio C:\Program Files\Microsoft Visual Studio 14.0, y no pude encontrarlo.

¿Cómo configuro CMake para que funcione en Windows con Visual Studio 2015?

Asher
fuente
1
¿Quizás la ruta de instalación de 2015 no es lo que CMake esperaba? ¿Qué versión de CMake usas? Además, no conozco la versión de Windows de CMake, pero es posible que CMake busque en el PATHpara encontrar el programa que necesita, por lo que si no está actualizado, entonces no puede encontrar el compilador.
Un tipo programador
1
Estoy usando cmake versión 3.2.3 que afirma tener soporte para Visual Studio 2015
Asher
1
Use la versión 3.2.x, encontré este problema cuando instalé Cmake antes de VS2015, así que reinstale cmake y solucione esto por mí
Andiana
A veces, simplemente se olvida de reiniciar su computadora, o no quiere hacerlo después de una instalación o actualización de Visual Studio. En ese caso, CMake no encontrará su compilador.
Noki

Respuestas:

124

He encontrado la solución. Aunque el IDE de Visual Studio se instaló correctamente, no instaló ninguna herramienta de compilación y, por lo tanto, no instaló el compilador de C ++.

Al intentar crear manualmente un proyecto de C ++ en la GUI de Visual Studio 2015 , pude solicitarle que descargara los paquetes de C ++. CMake pudo encontrar el compilador sin ninguna dificultad.

Asher
fuente
2
Genial, esta respuesta me dio la pista. Utilizo mi ISO VS2015 para instalar los componentes de C ++ y el problema se solucionó.
Peter Liang
También instalé usando la ISO VS2015 e instalé solo las partes básicas vb / c #. Tuve que lanzar ISO nuevamente para modificar e instalar otras cosas de C ++.
Abhinav Gauniyal
2
¿Exactamente qué paquetes / componentes / cosas instalaron ustedes? Creé un Visual C ++ / Win32Project, e instaló dos componentes y funcionó bien dentro de VS, pero cmake todavía se quejó como antes. Gracias. -S
ssimm
¡Eso es muy lindo!
user2434741
2
Esto también ha funcionado con vs 2017, ¡qué cosa más extraña! ¡Gracias por el consejo, amigo!
Steve Horvath
36

Aquí está la solución que funcionó para mí:

  1. Abra la herramienta de símbolo del sistema de Visual Studio (como administrador). En Windows 10, podría llamarse 'Símbolo del sistema para desarrolladores'.
  2. Navega hasta donde tienes el ejecutable de CMake
  3. Ejecute Cmake.exe
  4. Proceda como de costumbre para seleccionar la compilación y la carpeta de origen
  5. Seleccione el compilador de Visual Studio apropiado y presione el botón de configuración

Con suerte, debería funcionar sin problemas.

Fortuna
fuente
3
No creo que necesite ejecutar el símbolo del sistema VS como administrador. Pero ejecutar el indicador de comando VS pone todo lo que cmake está buscando en la ruta. Dependiendo de cómo instaló CMake (si lo puso en la ruta), también puede navegar a su directorio de compilación y ejecutar cmake ..desde allí. De todos modos, votó a favor, porque la terminal git-bash, por ejemplo, no pone todo automáticamente en su camino. ¡Esto me ayudó!
hetepeperfan
1
Esto parece más una solución que una solución, ya que normalmente, los generadores IDE no necesitan las diversas variables de entorno que se encuentran en el conjunto de solicitudes de comando dev (solo lo necesitaría si estuviera utilizando un generador de archivos MAKE o similar, como como Ninja)
Ryan Pavlik
2
actualización: en Windows 10, esto se llama Símbolo del sistema para desarrolladores
Mattijs
2
Explicación muy extraña: 1: No se llama símbolo del sistema de VS Studio 2: "navegar", ¿te refieres al comando "cd"? 3: ¿Quieres decir, ejecutar cmake-gui? Como dice en el paso 5 para "hacer clic" en un botón 4: ¿Continuar? te refieres a llenar? 5: En el cuadro desplegable de la ventana de configuración, puedo seleccionar el compilador VS, pero aún se desconocen los compiladores de C y C ++ ...
DrumM
1
Por cierto, simplemente escriba la búsqueda cmake y encontrará el cmake-gui
DrumM
31

Busqué en el archivo CMakeError.log y encontré un error sobre cannot run 'rc.exe'

Busqué y encontré esta respuesta para copiar RC.Exe y RcDll.Dll del contenedor de SDK de Microsoft al contenedor de VC, y luego CMake funcionó.


Editar: la respuesta principal a otra pregunta sugiere que es un problema de PATH, por lo que podría ser suficiente para asegurarse de que el contenedor de Microsoft SDK esté en su PATH.

Carl Walsh
fuente
15

Asegúrese de que está utilizando la versión correcta de Visual Studio en el generador. Había seleccionado Visual Studio 15 incorrectamente cuando se instaló Visual Studio 14.

Hrushikesh Kulkarni
fuente
3
Este también era mi problema. ¡Es confuso porque Visual Studios 2015 es la versión 14!
Paul Wintz
4
Tenga en cuenta que es posible que deba eliminar su caché para cambiar la versión de VS. Para hacer esto, haga clic en Archivo> Eliminar caché.
Paul Wintz
Esto ayudó ... ¡versionar en su mejor momento!
Noel Widmer
arrrrg, @PaulWintz gracias por ese recordatorio. Creo que en mi caso ejecuté cmake con un caché de cmake limpio, pero mientras VisualStudio esperaba que reiniciara la computadora para completar una actualización de VS, cmake guardó inteligentemente en caché la mala situación.
orion elenzil
13

Aquellos que tropiezan con esto en Visual Studio 2017: hay una característica relacionada con CMake que debe seleccionarse e instalarse junto con los conjuntos de herramientas del compilador relevantes. Vea la captura de pantalla a continuación.

Se deben instalar las herramientas Visaul C ++ para CMake

Vadim Berman
fuente
¿Qué pasa con la versión 2015? No pude encontrar esta casilla de verificación en la instalación de 2015. Una solución podría ser actualizar a 2017 ...
DrumM
1
@DrumM, esto es específicamente para Visual Studio 2017. No creo que la función exista en VS 2015.
Vadim Berman
¿Estás seguro de que esto es necesario? ¿No es solo para usar CMake desde Visual Studio?
Peter Mortensen
@PeterMortensen: me resolvió el problema. Nuevamente, Visual Studio 2017.
Vadim Berman
9

Si ninguna de las soluciones anteriores funcionó, deténgase y realice una verificación de cordura.

Me quemé usando la -G <config>cadena incorrecta y me dio este error engañoso.

Primero, ejecute desde el símbolo del sistema VS, no desde el símbolo del sistema normal. Puede encontrarlo en Start Menu -> Visual Studio 2015 -> MSBuild Command Prompt for VS2015Esto configura todas las rutas correctas a las herramientas VS, etc.

Ahora vea qué generadores están disponibles en 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". ...

Luego elija la cuerda apropiada con el [arco] agregado.

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

Ejecutar cmake en un subdirectorio hace que sea más fácil hacer una 'limpieza' ya que puede eliminar todo en ese directorio.

Actualicé a Visual Studio 15 pero no estaba prestando atención y estaba tratando de generar para 2012.

TrophyGeek
fuente
7

Para mí, revisé el CMakeError.logarchivo y encontré:

[...] error MSB8036: no se encontró la versión 8.1 del SDK de Windows. Instale la versión requerida del SDK de Windows o cambie la versión del SDK en las páginas de propiedades del proyecto o haciendo clic con el botón derecho en la solución y seleccionando "Retarget solution".

Esto es a pesar de usar Visual Studio 2017 en Windows 7. Por lo tanto, parece que CMake está intentando construir su proyecto de detección con el SDK de Windows 8.1.

Usé el instalador de Visual Studio para agregar ese componente y ahora CMake está feliz como una almeja.

chowey
fuente
4

Menú → Visual Studio 2015 → Símbolo del sistema de MSBuild para Visual Studio 2015. Luego, CMake puede encontrar cl.exe.

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

Cambie la ruta superior a donde está instalado su SDK de Windows.

CMake puede encontrar rc.exe.

cd a la ruta de CMakeLists.txty hacer:

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

-GCMake debe recuperar el parámetro posterior . Use --help; puede que tenga o no el generador.

Alen Wesker
fuente
Cuando tenga msvc 2015 y 2017 instalados e intente compilar con msvc 2015, detectará automáticamente el SDK de 10.0 al ejecutar el símbolo del sistema vs2015. Puede especificar la versión del SDK modificando el "Símbolo del sistema de las herramientas nativas de VS2015 x64" para forzar el sdk 8.1 agregando al final del parámetro de línea de comandos de esta manera; "% comspec% / k" "C: \ Archivos de programa (x86) \ msdev2015 \ VC \ vcvarsall.bat" "amd64 8.1"
kalmiya
¿Tengo que instalar 'MSBuild Command Prompt for Visual Studio 2015' por separado? Instalé msvc 2017 pero el símbolo del sistema para Visual Studio no está allí.
meen
2

Me encontré con el mismo problema y lo solucioné reiniciando la instalación de Visual Studio y marcando la siguiente opción:

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

Contiene los encabezados estándar de C ++ que se utilizan en la mayoría de las aplicaciones y, por lo tanto, a menudo es necesario instalarlo también.

Philippe Ferdinand
fuente
2

Tuve este problema en Windows 10 cuando usaba Visual Studio 2015 Professional, ¡mientras que Visual Studio 2015 Express funcionaba! En Windows 7, ambas versiones de Visual Studio solían funcionar.

Los nuevos proyectos creados a partir del IDE de Visual Studio 2015 Professional se compilan correctamente, pero CMake no puede encontrar los informes del compilador:

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

Actualicé CMake de 3.4.1 a 3.11.4, y ahora el problema desapareció.

jpo38
fuente
1

Si está en Visual Studio 2017, necesita al menos CMake 3.8.

Lars Bilke
fuente
1

Tuve un problema similar con el proyecto Visual Studio 2017 generado a través de CMake. Algunos de los paquetes faltaban al instalar Visual Studio en el desarrollo de escritorio con C ++. Ver instantánea:

Paquetes de Visual Studio 2017:

Paquetes de Visual Studio2017

Además, actualice CMake a la última versión.

vinodsaluja
fuente
0

En mi caso, había un conjunto de variables de entorno que fue el motivo de este error. El problema se resolvió después de eliminar cxx_flags de las variables de entorno.

Starger
fuente
0

Tuve este problema con CMake 3.12.1, después de una actualización de Visual Studio 2017. Simplemente volví a ejecutar CMake y funcionó.

0xF
fuente
0

En mi caso, pude ver en el CMakeError.logque CMake no pudo encontrar el SDK de Windows ( MSB8003: Could not find WindowsSDKDir variable from the registry).

La versión se puede especificar en la línea de comandos en la primera ejecución de CMake usando:

-DCMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION=

Llegué más lejos después de configurar eso, pero encontré más problemas más tarde (así que supongo que mi entorno está desordenado de alguna manera), pero tal vez ayude a alguien con este problema.

Zitrax
fuente
0

Un par de consejos:

  • Intente establecer la ruta manualmente marcando 'avanzado' y modificando CMAKE_LINKER y CMAKE_MAKE_PROGRAM
  • Elimine la caché: en CMake con GUI, vaya a: Archivo → Eliminar caché.

Mi problema fue una combinación de lo mencionado anteriormente: configuré la versión del compilador en 15 en lugar de 14 y cuando lo corrigí, tuve que eliminar la caché.

También inicié el símbolo del sistema de Visual Studio como administrador y desde allí ejecuté cmake-gui.exe

Entonces todo funcionó como se suponía.

Rarach
fuente
0

En mi caso, el problema fue que el proyecto principal, que incluye googletest a través de

add_subdirectory(gtest_dir)

fue definido como

PROJECT( projname CXX )

De alguna manera, CMake no reconoce

PROJECT(sub_project_name CXX C)

ya que el compilador de C no está configurado en el padre.

Resolví el problema usando

PROJECT( projname CXX C)

en mi CMakeLists.txtarchivo principal .

mojovski
fuente
0

Ninguna de las soluciones anteriores funcionó para mí. Sin embargo, noté que aunque instalé Visual Studio versión 15 (que no debe confundirse con Visual Studio 2015), el directorio creado en mi computadora era para Visual Studio 14.

Cuando especifiqué Visual Studio 14 cuando presioné el botón de configuración, funcionó.

Gamaliel
fuente
La numeración de la versión de Visual Studio es simplemente ... extraña. Visual Studio 14 es en realidad Visual Studio 2015, no existe Visual Studio 2014. Consulte la respuesta de trophygeek stackoverflow.com/a/40332976/1319284
kutschkem
0

Encontré esta solución en stackoverflow y trabajo para mí, aunque no trabajo en otras soluciones si tiene un sistema operativo Windows 10, seguir los siguientes pasos solucionará el problema:

1) vaya a C: \ Archivos de programa (x86) \ Microsoft SDKs \ Windows \ v7.1A \ Bin

2) luego copie RC.exe y RcDll de este archivo

3) vaya a C: \ Archivos de programa (x86) \ Microsoft Visual Studio 14.0 \ VC \ bin y pegue los dos archivos que ha copiado en él.

eso es todo, espero que sea de ayuda ...

tigre inteligente
fuente
0

Busque en Cmakelists.txt si encuentra ARM, necesita instalar C ++ para ARM y también vcvarsall.bat usar para la carpeta bin de ARM.

Son estos paquetes:

Plataforma universal de Windows C ++ para ARM64 "No se requiere"

Bibliotecas y compiladores de Visual C ++ para ARM "No es necesario"

Compiladores y bibliotecas de Visual C ++ para ARM64 "Muy probablemente necesario"

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

Entonces los problemas podrían desaparecer:

No se pudo encontrar CMAKE_C_COMPILER.

No se pudo encontrar CMAKE_CXX_COMPILER.

Si lo anterior no resuelve su problema?

Opcionalmente, puede eliminar las opciones C y CXX en cmakelists.txt configurando # delante de donde está enable_language (C). Y evite la compilación del procesador ARM de Android.

Dealazer
fuente
0

Resuelto agregando el componente faltante Modificar-> continuar agregando como sigue Reparar

ABDULRAHMAN ALKHAMEES
fuente
No se recomienda una respuesta de solo enlace.
Ṃųỻịgǻňạcểơửṩ
0

Tuve un problema relacionado: los generadores de Visual C ++ ni siquiera estaban en la lista cuando se ejecutaban cmake --help.

Corrí where cmakeen la consola y descubrí que cygwin también proporciona su propio archivo cmake.exe , que se estaba utilizando. Cambiar el orden de los directorios en PATH solucionó el problema.

Stgatilov
fuente
0

La comprobación de CMakeErrors.log en CMakeFiles devolvió:

C: \ Archivos de programa (x86) \ MSBuild \ Microsoft.Cpp \ v4.0 \ V140 \ Platforms \ x64 \ PlatformToolsets \ v140_xp \ Toolset.targets (36,5): advertencia MSB8003: No se pudo encontrar la variable WindowsSdkDir_71A en el registro. TargetFrameworkVersion o PlatformToolset pueden configurarse con un número de versión no válido.

El error significa que las herramientas de compilación para XP (v140_xp) no están instaladas. Para solucionarlo, instalé la función adecuada en el instalador de Visual Studio 2019 en la pestaña Componentes individuales:

ingrese la descripción de la imagen aquí

Nathan Moinvaziri
fuente
0

Tuve este problema con CMake GUI y VS 21019 Community Edition. Creo que he instalado CMake antes de Visual Studio; ciertamente, después de actualizar CMake 3.15.2 a 3.15.3, el problema desapareció.

Mike Pelton
fuente
0

Verifique la carpeta de nombres demasiado larga o no.

usuario1633912
fuente
-3

Porque CMake no puede encontrar su compilador de Visual Studio. Inicie cualquier proyecto que descargue los compiladores requeridos y CMake debe poder encontrarlo entonces.

Kushal
fuente