web-dev-qa-db-fra.com

Problèmes générant une solution pour VS 2017 avec CMake

J'ai donc installé Visual Studio 2017 hier. J'ai également installé CMake 3.7.2 qui prend en charge VS 2017.

Mon installation VS est avec le Game development with C++ workflow + quelques autres composants:

individual_components

J'ai également ajouté les outils CMake (mais je ne pense même pas en avoir besoin, car j'utilise CMake en tant qu'outil autonome pour générer uniquement les solutions VS) et MSBuild (j'avais msbuild.exe même avant d’ajouter ce composant - ne savez donc pas exactement ce que fait ce composant supplémentaire).

Avec VS 2015, je pouvais simplement exécuter cmake . à partir d'une commande normale Demander une solution.

Avec VS 2017, les changements de flux de travail - j'ai lu ce message de Microsoft .

J'ai donc essayé ce qui suit:

  • J'ai ouvert le Developer Command Prompt for VS 2017 et à partir de là j'ai couru cmake . -G "NMake Makefiles". Puis en cours d'exécution cmake --build . tout compilé correctement.
  • Quand j'ai essayé ce qui suit dans l'invite: cmake . -G "Visual Studio 15 2017 Win64" pour forcer la création d’une solution, j’ai eu les erreurs suivantes:

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

J'ai également essayé de configurer l'environnement en utilisant vswhere.exe et en exécutant vcvarsall.bat comme ça:

"C:\Fichiers de programme (x86)\Microsoft Visual Studio\2017\Communauté\VC\Auxiliary\Build\vcvarsall.bat" AMD64

et encore une fois, je ne pouvais générer que des fichiers NMake et non une solution.

Alors, comment puis-je obtenir une solution?

Et pourquoi cl.exe rapport Version 19.10.25017 quand il est dans VC\Tools\MSVC\14.10.25017\bin?

22
onqtam

Transformer mes commentaires en réponse

L'erreur -- The CXX compiler identification is unknown - No CMAKE_CXX_COMPILER could be found. signifie fondamentalement que CMake n’a pas été en mesure de compiler un programme de test simple (ce qu’il fait toujours dans le cadre de l’identification/validation du compilateur).

Vous pouvez jeter un coup d'œil sur CMakeFiles\CMakeError.log _ (par rapport à votre répertoire de sortie binaire), la raison de l’erreur devrait y figurer.

Deux raisons possibles que j'ai rencontrées jusqu'à présent:

  1. Droits d'administrateur manquants. Vous pouvez essayer de réexécuter cette opération à partir d'un shell disposant de droits d'administration pour vérifier si votre Visual Studio a été configuré avec le besoin de droits d'administrateur.

  2. Kit de développement logiciel Windows manquant. Vérifiez votre installation de SDK, par exemple. vérifiez que vous avez installé un compilateur de ressources. Il devrait être dans un chemin similaire à:

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

Installation de Visual Studio 2017

Veuillez noter que Visual Studio peut pas installer tous les packages C++ nécessaires même lorsque vous sélectionnez l'un des packages prédéfinis C++ (comme par exemple, j'ai utilisé Desktop development with C++ puis ajouté d'autres paquets sous le Individual Components onglet).

Voici quelle sélection a fonctionné pour moi (VS2017 Community Edition, Windows 10):

enter image description here

Si vous avez des projets utilisant des bibliothèques MFC/ATL, vous devez l’ajouter sous SDKs, libraries, and frameworks sous-catégorie:

enter image description here

Références

22
Florian

J'utilise Windows 7 .... Et après @ Florian m'a dit dans les commentaires de regarder dans CMakeFiles/CMakeError.log J'ai réussi à résoudre le problème!

Voici le premier journal:

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

Il me semblait que j'avais besoin de Windows SDK version 8.1 donc je l'ai installé en tant que composant (seule la version 10 était installée). Mais alors il y avait une autre erreur:

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

Alors LINK : fatal error LNK1104: cannot open file 'ucrtd.lib' Cela ressemble beaucoup à la nécessité d'installer plus de composants - et c'est ce que j'ai fait:

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

Et après cela, le problème a disparu!

6
onqtam

Si le kit de développement logiciel de mise à jour de Windows 10 Creator est installé, il n'installe pas les fichiers binaires du bureau par défaut afin de limiter la taille de l'installation. CMake essaiera toujours d'utiliser le dernier SDK lors de la compilation, ce qui échouera car il manquera des fichiers binaires tels que "gdi32.lib" (c'est la première erreur qui se produit pour moi).

Microsoft liste ce problème en tant que "problème connu", voir Problèmes connus liés à Visual C++ Desktop .

Le kit de développement logiciel de mise à jour Windows 10 Creators a été remanié afin de réduire l'encombrement de l'installation par défaut. Lorsque vous installez ce SDK via le workload UWP, les en-têtes/libs requis pour les projets de bureau Win32 C++ ne seront pas installés.

Pour résoudre ce problème, vous devez modifier l'installation de Visual Studio afin d'inclure le composant Windows 10 SDK (10.0.15063.0) for Desktop.

Install Creator's Update SDK for Desktop

2
Mark Ingram

Pour moi, j'ai déjà installé vs2015 avant, et le compilateur c 2015 fonctionne avant, lorsque j'installe vs2017, je reçois la même erreur can't find compiler. Et quand je cours cmake .. dans la commande de développeur vs2017, cela fonctionne. Et je peux spécifier generetor à vs2015 ou vs2017, tout fonctionne.

0
aboutqx

Windows 10.0.17134 Build 17134; Communauté Visual Studio 2017 (15.9.7)

Tous les composants requis sont installés

Dans mon cas ( construction de Wireshark ), une erreur était dans le mauvais ensemble d'outils. CMake détermine v141 alors que la version actuelle est v140 .

cmake -G "Visual Studio 15 2017" -T v140,Host=x64 ..
0
slinkin

J'ai rencontré un problème similaire.

Le problème a été résolu en désélectionnant d'abord "Développement de bureau avec C++", puis en revérifiant "Développement de bureau avec C++".

0
DennisWu