CMake error en CMakeLists.txt:30 (proyecto):No se pudo encontrar CMAKE_C_COMPILER

 C Programming >> Programación C >  >> Tags >> CMake
CMake error en CMakeLists.txt:30 (proyecto):No se pudo encontrar CMAKE_C_COMPILER

Esos mensajes de error

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

o

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!

solo significa que CMake no pudo encontrar su compilador C/CXX para compilar un programa de prueba simple (una de las primeras cosas que intenta CMake mientras detecta su entorno de compilación).

Los pasos para encontrar su problema dependen del entorno de compilación que desea generar. Los siguientes tutoriales son una colección de respuestas aquí en Stack Overflow y algunas de mis propias experiencias con CMake en Microsoft Windows 7/8/10 y Ubuntu 14.04.

Condiciones previas

  • Ha instalado el compilador/IDE y pudo compilar una vez cualquier otro programa (directamente sin CMake)
    • Tú, p. puede tener el IDE, pero es posible que no haya instalado el compilador o el marco de soporte como se describe en Solución de generación de problemas para VS 2017 con CMake o ¿Cómo le digo a CMake que use Clang en Windows?
  • Tienes la última versión de CMake
  • Tiene derechos de acceso en la unidad en la que desea que CMake genere su entorno de compilación
  • Tiene un directorio de compilación limpio (porque CMake almacena en caché las cosas del último intento), p. como subdirectorio de su árbol de fuentes

    Windows cmd.exe

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

    Concha bash

    $ rm -rf MSYS
    $ mkdir MSYS
    $ cd MSYS
    

    y asegúrese de que su shell de comandos apunte a su directorio de salida binaria recién creado.

Cosas generales que puede/debe probar

  1. ¿CMake puede encontrar y ejecutar con cualquiera de sus compiladores predeterminados? Ejecutar sin dar un generador

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

    Perfecto si determinó correctamente el generador a usar, como aquí Visual Studio 14 2015

  2. ¿Qué fue lo que realmente falló?

    En el directorio de salida de compilación anterior, mire CMakeFiles\CMakeError.log para cualquier mensaje de error que tenga sentido para usted o intente abrir/compilar el proyecto de prueba generado en CMakeFiles\[Version]\CompilerIdC |CompilerIdCXX directamente desde la línea de comando (como se encuentra en el registro de errores).

CMake no puede encontrar Visual Studio

  1. Intente seleccionar la versión correcta del generador:

    > cmake --help
    > cmake -G "Visual Studio 14 2015" ..
    
  2. Si eso no ayuda, intente establecer primero las variables de entorno de Visual Studio (la ruta puede variar):

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

    o usa el Developer Command Prompt for VS2015 acceso directo en el menú Inicio de Windows en All Programs /Visual Studio 2015 /Visual Studio Tools (gracias a @Antwane por la pista).

Antecedentes :CMake admite todas las versiones y versiones de Visual Studio (Express, Community, Professional, Premium, Test, Team, Enterprise, Ultimate, etc.). Para determinar la ubicación del compilador, utiliza una combinación de búsqueda en el registro (por ejemplo, en HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\[Version];InstallDir ), las variables de entorno del sistema y, si ninguno de los otros encontró algo, simplemente intente llamar al compilador.

CMake no puede encontrar GCC (MinGW/MSys)

  1. Inicias el MSys bash shell con msys.bat e intenta llamar directamente al gcc

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

    Aquí encontró gcc y se queja de que no le di ningún parámetro con el que trabajar.

    Así que lo siguiente debería funcionar:

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

    Si no se encontró GCC, llame al export PATH=... para agregar la ruta de sus compiladores (vea ¿Cómo configurar la variable de entorno PATH en el script CMake? ) y vuelva a intentarlo.

  2. Si aún no funciona, intente configurar el CXX ruta del compilador directamente exportándola (la ruta puede 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 obtener más detalles, consulte Cómo especificar una nueva ruta GCC para CMake

    Nota :Al usar el generador "MinGW Makefiles", debe usar el mingw32-make programa distribuido con MinGW

  3. ¿Sigue sin funcionar? Eso es raro. Asegúrese de que el compilador esté allí y tenga derechos de ejecución (consulte también el capítulo de condiciones previas anterior).

    De lo contrario, el último recurso de CMake es no intentar ninguna búsqueda del compilador y establecer las variables internas de CMake directamente

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

    Para obtener más detalles, consulte Cmake no respeta -D CMAKE_CXX_COMPILER=g++ y compilador de configuración de errores de Cmake

    Alternativamente, esas variables también se pueden configurar a través de cmake-gui.exe en Windows Ver Cmake no puede encontrar el compilador

Antecedentes :Muy parecido a Visual Studio. CMake es compatible con todo tipo de versiones de GCC. Busca las variables de entorno (CC, CXX, etc.) o simplemente intenta llamar al compilador. Además, detectará cualquier prefijo (al compilar de forma cruzada) e intentará agregarlo a todos los binutils de la cadena de herramientas del compilador GNU (ar , ranlib , strip , ld , nm , objdump y objcopy ).


Para Ubuntu, instale lo siguiente:

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

Esto me sucedió después de instalar Visual Studio 15 2017.

El compilador de C++ para Visual Studio 14 2015 no fue el problema. Parecía ser un problema con el SDK de Windows 10.

Agregar los SDK de Windows 10 a Visual Studio 14 2015 me resolvió el problema.

Ver captura de pantalla adjunta.