tutorial gui c++ visual-studio visual-c++ cmake visual-studio-2017

c++ - gui - Problemas generando solución para VS 2017 con CMake.



cmake gui (4)

Así que instalé Visual Studio 2017 ayer. También instalé CMake 3.7.2 que soporta VS 2017.

Mi instalación de VS es con el Game development with C++ del Game development with C++ flujo de trabajo Game development with C++ + algunos otros componentes:

También agregué las cosas de CMake (pero no creo que lo necesitara, ya que estoy usando CMake como herramienta independiente para generar las soluciones de VS) y MSBuild (tuve msbuild.exe incluso antes de agregar ese componente - así que no estoy seguro de qué hace exactamente ese componente adicional).

Con VS 2015 pude ejecutar cmake . desde una línea de comandos normal para una solución.

Con VS 2017 los cambios en el flujo de trabajo: he leído esta publicación de Microsoft .

Así que intenté lo siguiente:

  • Abrí la Developer Command Prompt for VS 2017 del Developer Command Prompt for VS 2017 y desde allí ejecuté cmake . -G "NMake Makefiles" cmake . -G "NMake Makefiles" . Luego ejecutando cmake --build . compilado todo correctamente.
  • Cuando intenté lo siguiente en el prompt: cmake . -G "Visual Studio 15 2017 Win64" cmake . -G "Visual Studio 15 2017 Win64" para forzar la creación de una solución obtuve los siguientes errores:

    -- The C compiler identification is unknown -- The CXX compiler identification is unknown CMake Error at CMakeLists.txt:3 (project): No CMAKE_C_COMPILER could be found. CMake Error at CMakeLists.txt:3 (project): No CMAKE_CXX_COMPILER could be found. -- Configuring incomplete, errors occurred!

También intenté configurar el entorno usando vswhere.exe y ejecutando vcvarsall.bat así:

"C: / Archivos de programa (x86) / Microsoft Visual Studio / 2017 / Community / VC / Auxiliary / Build / vcvarsall.bat" amd64

y otra vez solo pude generar archivos NMake y no una solución.

Entonces, ¿cómo puedo obtener una solución?

¿Y por qué cl.exe informa la Version 19.10.25017 cuando está en VC/Tools/MSVC/14.10.25017/bin ?


Estoy usando Windows 7 ... Y después de que @Florian me dijo en los comentarios que CMakeFiles/CMakeError.log ¡logré solucionar el problema!

Aquí está el primer registro:

Compiling the C compiler identification source file "CMakeCCompilerId.c" failed. Compiler: Build flags: Id flags: The output was: 1 Microsoft (R) Build Engine version 15.1.548.43366 Copyright (C) Microsoft Corporation. All rights reserved. Build started 3/10/2017 11:05:24 AM. Project "D:/doctest/build/CMakeFiles/3.8.0-rc2/CompilerIdC/CompilerIdC.vcxproj" on node 1 (default targets). C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/Common7/IDE/VC/VCTargets/Platforms/x64/PlatformToolsets/v141/Toolset.targets(36,5): error MSB8036: The Windows SDK version 8.1 was not found. Install the required version of Windows SDK or change the SDK version in the project property pages or by right-clicking the solution and selecting "Retarget solution". [D:/doctest/build/CMakeFiles/3.8.0-rc2/CompilerIdC/CompilerIdC.vcxproj] Done Building Project "D:/doctest/build/CMakeFiles/3.8.0-rc2/CompilerIdC/CompilerIdC.vcxproj" (default targets) -- FAILED. Build FAILED. "D:/doctest/build/CMakeFiles/3.8.0-rc2/CompilerIdC/CompilerIdC.vcxproj" (default target) (1) -> (Desktop_PlatformPrepareForBuild target) -> C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/Common7/IDE/VC/VCTargets/Platforms/x64/PlatformToolsets/v141/Toolset.targets(36,5): error MSB8036: The Windows SDK version 8.1 was not found. Install the required version of Windows SDK or change the SDK version in the project property pages or by right-clicking the solution and selecting "Retarget solution". [D:/doctest/build/CMakeFiles/3.8.0-rc2/CompilerIdC/CompilerIdC.vcxproj] 0 Warning(s) 1 Error(s) Time Elapsed 00:00:00.28 Compiling the CXX compiler identification source file "CMakeCXXCompilerId.cpp" failed. Compiler: Build flags: Id flags: The output was: 1 Microsoft (R) Build Engine version 15.1.548.43366 Copyright (C) Microsoft Corporation. All rights reserved. Build started 3/10/2017 11:05:24 AM. Project "D:/doctest/build/CMakeFiles/3.8.0-rc2/CompilerIdCXX/CompilerIdCXX.vcxproj" on node 1 (default targets). C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/Common7/IDE/VC/VCTargets/Platforms/x64/PlatformToolsets/v141/Toolset.targets(36,5): error MSB8036: The Windows SDK version 8.1 was not found. Install the required version of Windows SDK or change the SDK version in the project property pages or by right-clicking the solution and selecting "Retarget solution". [D:/doctest/build/CMakeFiles/3.8.0-rc2/CompilerIdCXX/CompilerIdCXX.vcxproj] Done Building Project "D:/doctest/build/CMakeFiles/3.8.0-rc2/CompilerIdCXX/CompilerIdCXX.vcxproj" (default targets) -- FAILED. Build FAILED. "D:/doctest/build/CMakeFiles/3.8.0-rc2/CompilerIdCXX/CompilerIdCXX.vcxproj" (default target) (1) -> (Desktop_PlatformPrepareForBuild target) -> C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/Common7/IDE/VC/VCTargets/Platforms/x64/PlatformToolsets/v141/Toolset.targets(36,5): error MSB8036: The Windows SDK version 8.1 was not found. Install the required version of Windows SDK or change the SDK version in the project property pages or by right-clicking the solution and selecting "Retarget solution". [D:/doctest/build/CMakeFiles/3.8.0-rc2/CompilerIdCXX/CompilerIdCXX.vcxproj] 0 Warning(s) 1 Error(s) Time Elapsed 00:00:00.13

Parecía que necesitaba Windows SDK version 8.1 así que lo instalé como un componente (solo tenía la versión 10 instalada). Pero luego hubo otro error:

Compiling the C compiler identification source file "CMakeCCompilerId.c" failed. Compiler: Build flags: Id flags: The output was: 1 Microsoft (R) Build Engine version 15.1.548.43366 Copyright (C) Microsoft Corporation. All rights reserved. Build started 3/10/2017 11:17:21 AM. Project "D:/doctest/build/CMakeFiles/3.8.0-rc2/CompilerIdC/CompilerIdC.vcxproj" on node 1 (default targets). PrepareForBuild: Creating directory "Debug/". Creating directory "Debug/CompilerIdC.tlog/". InitializeBuildStatus: Creating "Debug/CompilerIdC.tlog/unsuccessfulbuild" because "AlwaysCreate" was specified. ClCompile: C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Tools/MSVC/14.10.25017/bin/HostX86/x64/CL.exe /c /nologo /W0 /WX- /diagnostics:classic /Od /D _MBCS /Gm- /EHsc /RTC1 /MDd /GS /fp:precise /Zc:wchar_t /Zc:forScope /Zc:inline /Fo"Debug//" /Fd"Debug/vc141.pdb" /Gd /TC /errorReport:queue CMakeCCompilerId.c CMakeCCompilerId.c Link: C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Tools/MSVC/14.10.25017/bin/HostX86/x64/link.exe /ERRORREPORT:QUEUE /OUT:"./CompilerIdC.exe" /INCREMENTAL:NO /NOLOGO kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /MANIFEST /MANIFESTUAC:"level=''asInvoker'' uiAccess=''false''" /manifest:embed /PDB:"./CompilerIdC.pdb" /SUBSYSTEM:CONSOLE /TLBID:1 /DYNAMICBASE /NXCOMPAT /IMPLIB:"./CompilerIdC.lib" /MACHINE:X64 Debug/CMakeCCompilerId.obj LINK : fatal error LNK1104: cannot open file ''ucrtd.lib'' [D:/doctest/build/CMakeFiles/3.8.0-rc2/CompilerIdC/CompilerIdC.vcxproj] Done Building Project "D:/doctest/build/CMakeFiles/3.8.0-rc2/CompilerIdC/CompilerIdC.vcxproj" (default targets) -- FAILED. Build FAILED. "D:/doctest/build/CMakeFiles/3.8.0-rc2/CompilerIdC/CompilerIdC.vcxproj" (default target) (1) -> (Link target) -> LINK : fatal error LNK1104: cannot open file ''ucrtd.lib'' [D:/doctest/build/CMakeFiles/3.8.0-rc2/CompilerIdC/CompilerIdC.vcxproj] 0 Warning(s) 1 Error(s) Time Elapsed 00:00:01.04 Compiling the CXX compiler identification source file "CMakeCXXCompilerId.cpp" failed. Compiler: Build flags: Id flags: The output was: 1 Microsoft (R) Build Engine version 15.1.548.43366 Copyright (C) Microsoft Corporation. All rights reserved. Build started 3/10/2017 11:17:22 AM. Project "D:/doctest/build/CMakeFiles/3.8.0-rc2/CompilerIdCXX/CompilerIdCXX.vcxproj" on node 1 (default targets). PrepareForBuild: Creating directory "Debug/". Creating directory "Debug/CompilerIdCXX.tlog/". InitializeBuildStatus: Creating "Debug/CompilerIdCXX.tlog/unsuccessfulbuild" because "AlwaysCreate" was specified. ClCompile: C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Tools/MSVC/14.10.25017/bin/HostX86/x64/CL.exe /c /nologo /W0 /WX- /diagnostics:classic /Od /D _MBCS /Gm- /EHsc /RTC1 /MDd /GS /fp:precise /Zc:wchar_t /Zc:forScope /Zc:inline /Fo"Debug//" /Fd"Debug/vc141.pdb" /Gd /TP /errorReport:queue CMakeCXXCompilerId.cpp CMakeCXXCompilerId.cpp Link: C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Tools/MSVC/14.10.25017/bin/HostX86/x64/link.exe /ERRORREPORT:QUEUE /OUT:"./CompilerIdCXX.exe" /INCREMENTAL:NO /NOLOGO kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /MANIFEST /MANIFESTUAC:"level=''asInvoker'' uiAccess=''false''" /manifest:embed /PDB:"./CompilerIdCXX.pdb" /SUBSYSTEM:CONSOLE /TLBID:1 /DYNAMICBASE /NXCOMPAT /IMPLIB:"./CompilerIdCXX.lib" /MACHINE:X64 Debug/CMakeCXXCompilerId.obj LINK : fatal error LNK1104: cannot open file ''ucrtd.lib'' [D:/doctest/build/CMakeFiles/3.8.0-rc2/CompilerIdCXX/CompilerIdCXX.vcxproj] Done Building Project "D:/doctest/build/CMakeFiles/3.8.0-rc2/CompilerIdCXX/CompilerIdCXX.vcxproj" (default targets) -- FAILED. Build FAILED. "D:/doctest/build/CMakeFiles/3.8.0-rc2/CompilerIdCXX/CompilerIdCXX.vcxproj" (default target) (1) -> (Link target) -> LINK : fatal error LNK1104: cannot open file ''ucrtd.lib'' [D:/doctest/build/CMakeFiles/3.8.0-rc2/CompilerIdCXX/CompilerIdCXX.vcxproj] 0 Warning(s) 1 Error(s) Time Elapsed 00:00:00.60

Entonces LINK : fatal error LNK1104: cannot open file ''ucrtd.lib'' suena como si necesitara instalar más componentes, y así lo hice:

  • Visual C++ runtime for UWP
  • Windows Universal CRT SDK

Y después de eso el problema se ha ido!


Para mí, instalé vs2015 antes, y el compilador c 2015 funciona antes, cuando instalo vs2017, obtengo el mismo error can''t find compiler . Y cuando ejecuto cmake .. en el comando de desarrollador vs2017, funciona. Y puedo especificar generetor para vs2015 o vs2017, todo funciona.


Si tiene instalado el SDK de actualización del creador de Windows 10, no instala los binarios del escritorio de manera predeterminada para mantener el tamaño de instalación bajo. CMake siempre intentará usar el último SDK cuando se compile, lo que fallará, ya que faltarán archivos binarios como "gdi32.lib" (ese es el primer error que ocurre para mí).

Microsoft incluye esto como un "problema conocido", vea Problemas conocidos de Visual C ++ Desktop .

El SDK de actualización de creadores de Windows 10 se ha rediseñado para reducir la huella de instalación de forma predeterminada. Cuando instala este SDK a través de la carga de trabajo de UWP, no instalará los encabezados / libs necesarios para los Proyectos de Escritorio Win32 C ++.

Para solucionar el problema, debe modificar la instalación de Visual Studio para incluir el Windows 10 SDK (10.0.15063.0) para el componente de escritorio.


Convertir mis comentarios en una respuesta.

El error -- The CXX compiler identification is unknown - No CMAKE_CXX_COMPILER could be found. básicamente significa que CMake no pudo compilar un programa de prueba simple (que siempre lo hace como parte de la identificación / validación del compilador).

Puede echar un vistazo a CMakeFiles/CMakeError.log (en relación con su directorio de salida binario), el motivo del error debería estar allí.

Dos posibles razones que encontré hasta ahora:

  1. Falta de derechos de administrador. Puede intentar ejecutar esto nuevamente desde un shell que tenga derechos administrativos para realizar una verificación cruzada si su Visual Studio fue configurado con la necesidad de derechos de administrador.

  2. Falta el SDK de Windows. Verifique la instalación de su SDK, por ejemplo, verifique que tenga instalado algún compilador de recursos. Debería estar en un camino similar a:

    C:/Program Files (x86)/Microsoft SDKs/Windows/v[some version]/bin/RC.Exe

Instalación de Visual Studio 2017

Tenga en cuenta que Visual Studio puede no instalar todos los paquetes de C ++ necesarios, incluso cuando selecciona uno de los paquetes predefinidos de C ++ (ya que, por ejemplo, he utilizado el Desktop development with C++ y luego agregué más paquetes en la pestaña Individual Components ).

Aquí está la selección que funcionó para mí (VS2017 Community Edition, Windows 10):

Si tiene proyectos que utilizan bibliotecas MFC / ATL, debe agregarlos en la subcategoría SDKs, libraries, and frameworks :

Referencias