Solution de génération de problèmes pour VS 2017 avec CMake

donc j'ai installé Visual Studio 2017 hier. J'ai aussi installé CMake 3.7.2 qui supporte VS 2017.

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

individual_components

j'ai aussi ajouté le truc CMake (mais je ne pense pas que j'en avais besoin - puisque J'utilise CMake comme un outil autonome pour juste générer les solutions VS) et MSBuild (j'ai eu msbuild.exe même avant d'ajouter ce composant - donc pas sûr de ce que fait exactement ce composant supplémentaire).

avec VS 2015 j'ai été capable d'exécuter cmake . à partir d'une invite de commande normale pour une solution.

avec VS 2017 les changements de flux de travail - j'ai lu ce post de Microsoft .

donc j'ai essayé la suivante:

  • j'ai ouvert le Developer Command Prompt for VS 2017 et d'elle j'ai couru cmake . -G "NMake Makefiles" . Puis l'exécution de cmake --build . a compilé tout correctement.
  • quand j'ai essayé ce qui suit dans le prompt: 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 tournant vcvarsall.bat comme ceci:

"C:Program Dossiers (x86)Microsoft Visual Studio2017CommunautaireVCAuxiliaireBuildvcvarsall.chauve-souris" amd64

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

alors comment puis-je obtenir une solution?

et pourquoi cl.exe déclare Version 19.10.25017 alors que c'est dans VCToolsMSVC.10.25017bin ?

20
demandé sur onqtam 2017-03-09 19:51:20

4 réponses

transformer mes commentaires en réponse

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

vous pouvez jeter un oeil dans CMakeFiles\CMakeError.log (relatif à votre répertoire de sortie binaire), la raison de l'erreur devrait être là.

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

  1. Manquant de droits d'administrateur. Vous pouvez essayer d'exécuter ceci de nouveau à partir d'un shell qui a les droits administratifs de recouper si votre studio visuel a été configuré avec le besoin de droits d'administrateur.

  2. Manquantes de Windows SDK. Vérifiez votre installation SDK, par exemple, vérifiez que vous avez n'importe quel compilateur de ressources installé. Il devrait être dans une voie semblable à:

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

Visual Studio 2017 Installation

s'il vous Plaît note Visual Studio peut pas installer tout le nécessaire en C++ paquets, même lorsque vous sélectionnez l'un des C++ pré-définis paquets (comme je l'ai par exemple utilisé Desktop development with C++ et a ajouté plus de paquets en vertu de la Individual Components de l'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

17
répondu Florian 2017-05-23 12:10:02

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

voici le premier log:

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.8.0-rc2\CompilerIdC\CompilerIdC.vcxproj" on node 1 (default targets).
C:\Program Files (x86)\Microsoft Visual Studio17\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.8.0-rc2\CompilerIdC\CompilerIdC.vcxproj]
Done Building Project "D:\doctest\build\CMakeFiles.8.0-rc2\CompilerIdC\CompilerIdC.vcxproj" (default targets) -- FAILED.

Build FAILED.

"D:\doctest\build\CMakeFiles.8.0-rc2\CompilerIdC\CompilerIdC.vcxproj" (default target) (1) ->
(Desktop_PlatformPrepareForBuild target) -> 
  C:\Program Files (x86)\Microsoft Visual Studio17\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.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.8.0-rc2\CompilerIdCXX\CompilerIdCXX.vcxproj" on node 1 (default targets).
C:\Program Files (x86)\Microsoft Visual Studio17\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.8.0-rc2\CompilerIdCXX\CompilerIdCXX.vcxproj]
Done Building Project "D:\doctest\build\CMakeFiles.8.0-rc2\CompilerIdCXX\CompilerIdCXX.vcxproj" (default targets) -- FAILED.

Build FAILED.

"D:\doctest\build\CMakeFiles.8.0-rc2\CompilerIdCXX\CompilerIdCXX.vcxproj" (default target) (1) ->
(Desktop_PlatformPrepareForBuild target) -> 
  C:\Program Files (x86)\Microsoft Visual Studio17\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.8.0-rc2\CompilerIdCXX\CompilerIdCXX.vcxproj]

    0 Warning(s)
    1 Error(s)

Time Elapsed 00:00:00.13

il semblait que j'avais besoin de Windows SDK version 8.1 donc je l'ai installé comme un composant (avec seulement la version 10 installée). Mais il y a eu 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.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 Studio17\Community\VC\Tools\MSVC.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 Studio17\Community\VC\Tools\MSVC.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.8.0-rc2\CompilerIdC\CompilerIdC.vcxproj]
Done Building Project "D:\doctest\build\CMakeFiles.8.0-rc2\CompilerIdC\CompilerIdC.vcxproj" (default targets) -- FAILED.

Build FAILED.

"D:\doctest\build\CMakeFiles.8.0-rc2\CompilerIdC\CompilerIdC.vcxproj" (default target) (1) ->
(Link target) -> 
  LINK : fatal error LNK1104: cannot open file 'ucrtd.lib' [D:\doctest\build\CMakeFiles.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.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 Studio17\Community\VC\Tools\MSVC.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 Studio17\Community\VC\Tools\MSVC.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.8.0-rc2\CompilerIdCXX\CompilerIdCXX.vcxproj]
Done Building Project "D:\doctest\build\CMakeFiles.8.0-rc2\CompilerIdCXX\CompilerIdCXX.vcxproj" (default targets) -- FAILED.

Build FAILED.

"D:\doctest\build\CMakeFiles.8.0-rc2\CompilerIdCXX\CompilerIdCXX.vcxproj" (default target) (1) ->
(Link target) -> 
  LINK : fatal error LNK1104: cannot open file 'ucrtd.lib' [D:\doctest\build\CMakeFiles.8.0-rc2\CompilerIdCXX\CompilerIdCXX.vcxproj]

    0 Warning(s)
    1 Error(s)

Time Elapsed 00:00:00.60

donc LINK : fatal error LNK1104: cannot open file 'ucrtd.lib' sonne un peu comme si j'avais besoin d'installer plus de composants - et donc j'ai fait:

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

et après ça le problème est parti!

6
répondu onqtam 2017-03-10 11:33:53

si vous avez le SDK de mise à jour de Windows 10 Creator installé, il n'installe pas les binaires de bureau par défaut, afin de garder la taille d'installation faible. CMake va toujours essayer d'utiliser le dernier SDK quand il compilera, ce qui échouera car il manquera des binaires tels que "gdi32.lib" (c'est la première erreur qui se produit pour moi).

Microsoft liste de ce comme un "Problème Connu", voir Visual C++ Bureau des Problèmes Connus .

la mise à jour des créateurs Windows 10 SDK a été remaniée pour réduire encombrement de l'installation par défaut. Lorsque vous installez ce SDK via le UWP charge de travail, il ne sera pas installer les en-têtes / libs nécessaires pour Win32 C++ Projets De Bureau.

pour corriger le problème, vous devez modifier L'installation de Visual Studio pour inclure le Windows 10 SDK (10.0.15063.0) pour le composant de bureau.

Install Creator's Update SDK for Desktop

2
répondu Mark Ingram 2017-07-25 10:12:40

pour moi ,j'ai installé vs2015 avant,et le C compiler 2015 travailler avant,quand j'installe vs2017, obtenir la même erreur can't find compiler . Et quand j'exécute cmake .. dans la commande VS2017 developer,ça marche. Et je peux spécifier generetor à vs2015 ou vs2017,tout fonctionne.

0
répondu aboutqx 2018-06-11 07:46:48