web-dev-qa-db-fra.com

CMake ne trouve pas le compilateur Visual C++

Après l’installation de Visual Studio 2015 et l’exécution de CMake sur un projet précédent, une erreur CMake indique qu’elle ne peut pas trouver le compilateur 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.

Je suis allé chercher cl.exe dans le dossier Visual Studio, C:\Program Files\Microsoft Visual Studio 14.0 et je ne l'ai pas trouvé. 

Comment configurer CMake pour qu'il fonctionne sous Windows avec Visual Studio 2015?

101
Asher

J'ai trouvé la solution. Bien que Visual Studio IDE ait été installé avec succès, aucun outil de construction n’a été installé ni par conséquent, le compilateur C++.

En essayant manuellement de créer un projet C++ dans l'interface graphique de Visual Studio 2015 , j'ai pu l'inviter à télécharger les packages C++. CMake a ensuite pu trouver le compilateur sans aucune difficulté.

113
Asher

Voici la solution qui a fonctionné pour moi:

  1. Ouvrez l'outil d'invite de commande de Visual Studio (en tant qu'administrateur)
  2. Naviguez jusqu'à l'endroit où vous avez l'exécutable CMake
  3. Exécuter Cmake.exe
  4. Procédez comme d'habitude pour sélectionner le dossier source et le build
  5. Sélectionnez le compilateur Visual Studio approprié et cliquez sur le bouton Configurer.

Espérons que cela fonctionne sans problèmes.

29
Ochi Fortune

J'ai regardé dans le fichier CMakeError.log et trouvé une erreur à propos de cannot run 'rc.exe'

J'ai cherché et trouvé cette réponse pour copier RC.Exe et RcDll.Dll du bac Microsoft SDK vers le bac VC, puis CMake a fonctionné.


Edit: La réponse principale à une autre question suggère que c'est un problème PATH, donc cela pourrait être suffisant pour vous assurer que le dossier du SDK de Microsoft est dans votre PATH.

28
Carl Walsh

Assurez-vous que vous utilisez la version correcte de Visual Studio dans le générateur. J'avais mal sélectionné Visual Studio 15 lors de l'installation de Visual Studio 14. 

14

Ceux qui trébuchent avec ceci sur Visual Studio 2017: une fonctionnalité liée à CMake doit être sélectionnée et installée avec les jeux d'outils appropriés du compilateur. Voir la capture d'écran ci-dessous.

 Visaul C++ tools for CMake must be installed

9
Vadim Berman

Pour moi, j'ai vérifié le fichier CMakeError.log et trouvé:

[...] erreur MSB8036: la version 8.1 du SDK Windows était introuvable. Installez la version requise du SDK Windows ou modifiez la version du SDK dans les pages de propriétés du projet ou en cliquant avec le bouton droit de la souris sur la solution et en sélectionnant "Solution Retarget".

Ceci malgré l'utilisation de Visual Studio 2017 sur Windows 7. Il semble donc que CMake tente de générer son projet de détection avec le SDK Windows 8.1.

J'ai utilisé le programme d'installation de Visual Studio pour ajouter ce composant et maintenant, CMake est heureux comme une palourde.

6
chowey

Si aucune des solutions ci-dessus ne fonctionne, arrêtez-vous et effectuez un contrôle de cohérence. 

Je me suis fait graver en utilisant la mauvaise chaîne -G <config> et cela m'a donné cette erreur trompeuse.

Tout d’abord, lancez à partir de l’invite de commande VS pas l’invite de commande standard. Vous pouvez le trouver dans Start Menu -> Visual Studio 2015 -> MSBuild Command Prompt for VS2015 Ceci configure tous les chemins corrects vers les outils VS, etc.

Maintenant, voyez quels générateurs sont disponibles chez 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". ...

Puis choisissez la chaîne appropriée avec le [Arch] ajouté.

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

L'exécution de cmake dans un sous-répertoire facilite la tâche de "nettoyage", car vous pouvez simplement supprimer tout ce qui se trouve dans ce répertoire.

Je suis passé à Visual Studio 15, mais je ne faisais pas attention et je tentais de générer pour 2012. 

6
TrophyGeek

Menu → Visual Studio 2015 → Invite de commandes MSBuild pour Visual Studio 2015. Ensuite, CMake peut trouver cl.exe.

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

Modifiez le chemin supérieur vers l'emplacement où votre SDK Windows est installé.

CMake peut trouver rc.exe.

allez dans le chemin de CMakeLists.txt et faites:

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

Le paramètre après -G devrait être récupéré par CMake. Utilisez --help; vous pouvez ou non avoir le générateur.

4
Alen Wesker

Comme alternative à la réponse acceptée, vous pouvez installer C++ directement comme décrit ici

1
Jthorpe

Si vous utilisez Visual Studio 2017, vous avez besoin d'au moins CMake 3.8!

1
Lars Bilke

J'avais ce problème sous Windows 10 lors de l'utilisation de Visual Studio 2015 Professional, alors que Visual Studio 2015 Express fonctionnait! Sous Windows 7, les deux versions de Visual Studio fonctionnaient auparavant.

Les nouveaux projets créés à partir de Visual Studio 2015 Professional IDE sont correctement compilés, mais CMake ne parvient pas à trouver les rapports de compilation:

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

J'ai mis à jour CMake de 3.4.1 à 3.11.4 et le problème est maintenant résolu.

1
jpo38

Dans mon cas, le problème était que le projet parent, qui inclut googletest via

add_subdirectory(gtest_dir)

a été défini comme

PROJECT( projname CXX )

En quelque sorte, CMake ne reconnaît pas

PROJECT(sub_project_name CXX C)

puisque le compilateur C n'est pas défini dans le parent.

J'ai résolu le problème en utilisant

PROJECT( projname CXX C)

dans mon fichier CMakeLists.txt principal.

0
mojovski

Regardez dans le fichier Cmakelists.txt si vous trouvez ARM, vous devez installer C++ pour ARM et utiliser également vcvarsall.bat pour le dossier ARM bin.

Ce sont ces forfaits:

Plate-forme Windows universelle C++ pour ARM64 "non requise"

Compilateurs et bibliothèques Visual C++ pour ARM "non requis"

Compilateurs Visual C++ et bibliothèques pour ARM64 "très probablement requis"

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

Alors les problèmes pourraient disparaître:

Aucun CMAKE_C_COMPILER n'a pu être trouvé.

CMAKE_CXX_COMPILER introuvable.

Si ci-dessus ne résout pas votre problème?

Si vous le souhaitez, vous pouvez supprimer les options C et CXX dans cmakelists.txt en définissant # en face de l'emplacement de enable_language (C). Et évitez la compilation de processeurs Android ARM.

0
Dealazer

Quelques conseils:

  • Essayez de définir le chemin manuellement en cochant la case "avancé" et en modifiant CMAKE_LINKER et CMAKE_MAKE_PROGRAM.
  • Supprimer le cache - dans CMake avec l'interface graphique, accédez à: Fichier → Supprimer le cache.

Mon problème était une combinaison des énoncés précédents: j'ai défini la version du compilateur sur 15 au lieu de 14 et une fois corrigé, j'ai dû supprimer le cache. 

J'ai également lancé l'invite de commande Visual Studio en tant qu'administrateur et à partir de là, j'ai exécuté cmake-gui.exe.

Ensuite, tout a fonctionné comme prévu.

0
Rarach

Résolu en ajoutant le composant manquant Modifier -> continuer ajouter comme suit Fix

0

J'ai rencontré le même problème et je l'ai corrigé en relançant l'installation de Visual Studio et en cochant l'option suivante:

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

Il contient les en-têtes C++ standard utilisés dans la plupart des applications et il est donc souvent nécessaire de l'installer également.

0

Cela pourrait être une autre solution pour ceux avec la dernière version de Windows 10 créateur:

Dépassement de pile après Erreur irrécupérable LNK1104: impossible d'ouvrir le fichier 'gdi32.lib'

0
alanwsx

Dans mon cas, il y avait un ensemble de variables d'environnement qui était la raison de cette erreur . Le problème a été résolu après la suppression de cxx_flags des variables d'environnement.

0
Starger

Aucune des solutions précédentes n'a fonctionné pour moi. Cependant, j'ai remarqué que même si j'avais installé Visual Studio version 15 (à ne pas confondre avec Visual Studio 2015), le répertoire créé sur mon ordinateur était destiné à Visual Studio 14. 

Lorsque j'ai spécifié Visual Studio 14 lorsque j'ai appuyé sur le bouton de configuration, cela a fonctionné.

0
Gamaliel

J'ai eu ce problème avec CMake 3.12.1, après une mise à jour de Visual Studio 2017. J'ai simplement relancé CMake et cela a fonctionné.

0
0xF

J'ai eu un problème similaire avec le projet Visual Studio 2017 généré par CMake. Certains des packages étaient manquants lors de l'installation de Visual Studio dans le développement Desktop avec C++. Voir l'instantané:

Packages Visual Studio 2017:

 Visual Studio2017 Packages

Mettez également CMake à niveau avec la dernière version.

0
vinodsaluja

Dans mon cas, je pouvais voir dans le CMakeError.log que CMake ne pouvait pas trouver le SDK Windows (MSB8003: Could not find WindowsSDKDir variable from the registry).

La version peut être spécifiée sur la ligne de commande lors de la première exécution de CMake à l'aide de:

-DCMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION=

Je suis allé plus loin après avoir défini cela, mais j'ai rencontré plus de problèmes plus tard (donc je suppose que mon environnement est en quelque sorte gâché), mais peut-être que cela aidera quelqu'un avec ce problème.

0
Zitrax

j'ai trouvé cette solution chez stackoverflow et je travaille pour moi, même si je ne travaille pas avec d'autres solutions si vous avez un système d'exploitation Windows 10, procédez comme suit pour résoudre le problème:

1) Accédez à C:\Program Files (x86)\Microsoft SDK\Windows\v7.1A\Bin.

2) puis copiez RC.exe et RcDll à partir de ce fichier

3) allez dans C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin et collez-y les deux fichiers que vous avez copiés.

c’est tout ce que j’espère être utile ...

0
clever tiger

Vérifier CMakeErrors.log dans CMakeFiles a renvoyé:

C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Platforms\x64\PlatformToolsets\v140_xp\Toolset.targets (36,5): warning MSB8003: Impossible de trouver la variable WindowsSdkDir_71A dans le registre. TargetFrameworkVersion ou PlatformToolset peuvent être définis sur un numéro de version non valide.

L'erreur signifie que les outils de construction pour XP (v140_xp) ne sont pas installés. Pour résoudre ce problème, j'ai installé la fonctionnalité appropriée dans le programme d'installation de Visual Studio 2019 sous l'onglet Composants individuels:

enter image description here

0
Nathan Moinvaziri

J'ai eu un problème connexe: les générateurs Visual C++ n'étaient même pas dans la liste lors de l'exécution de cmake --help.

J'ai exécuté where cmake dans la console et constaté que cygwin fournissait également son propre fichier cmake.exe, qui était utilisé. Changer l’ordre des répertoires dans PATH a résolu le problème.

0
stgatilov