CMake ne trouve pas le compilateur Visual C ++

118

Après avoir installé Visual Studio 2015 et exécuté CMake sur un projet précédent, des erreurs CMake indiquent qu'il n'a pas pu 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.

J'ai cherché cl.exedans le dossier Visual Studio C:\Program Files\Microsoft Visual Studio 14.0et je ne l' ai pas trouvé.

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

Asher
la source
1
Peut-être que le chemin d'installation de 2015 n'est pas ce à quoi CMake s'attend? Quelle version de CMake utilisez-vous? De plus, je ne connais pas la version Windows de CMake, mais il est possible que CMake cherche dans le PATHpour trouver le programme dont il a besoin, donc s'il n'est pas mis à jour, il ne peut pas trouver le compilateur.
Un mec programmeur du
1
J'utilise cmake version 3.2.3 qui prétend prendre en charge Visual Studio 2015
Asher
1
Utilisez la version 3.2.x, j'ai rencontré ce problème lorsque j'installe Cmake avant VS2015, alors réinstallez cmake
corrigez-le
Parfois, vous oubliez simplement de redémarrer votre ordinateur ou vous ne le souhaitez pas après une installation ou une mise à jour de Visual Studio. Dans ce cas, CMake ne trouvera pas votre compilateur.
Noki

Réponses:

124

J'ai trouvé la solution. Bien que l'IDE de Visual Studio soit installé avec succès, il n'a installé aucun outil de génération et n'a donc pas installé le compilateur C ++.

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

Asher
la source
2
Cool, cette réponse m'a donné l'indice. J'utilise mon ISO VS2015 pour installer les composants C ++ et résoudre le problème.
Peter Liang
J'ai également installé à l'aide de l'ISO VS2015 et il a installé les pièces de base vb / c # uniquement. J'ai dû lancer à nouveau ISO pour modifier et installer d'autres éléments c ++.
Abhinav Gauniyal
2
Quels packages / composants / trucs avez-vous installés exactement? J'ai créé un Visual C ++ / Win32Project, et il a installé deux composants et exécuté OK dans VS, mais cmake s'est toujours plaint comme avant. Merci. -S
ssimm
C'est très gentil!
user2434741
2
Cela a également fonctionné avec vs 2017 - quelle chose étrange! Merci pour la pointe, mon pote!
Steve Horvath
36

Voici la solution qui a fonctionné pour moi:

  1. Ouvrez l'outil d'invite de commandes Visual Studio (en tant qu'administrateur). Sur Windows 10, il peut être appelé «Invite de commande du développeur».
  2. Accédez à l'emplacement où vous avez l'exécutable CMake
  3. Exécutez Cmake.exe
  4. Procédez comme d'habitude pour sélectionner la version et le dossier source
  5. Sélectionnez le compilateur Visual Studio approprié et cliquez sur le bouton Configurer

Espérons qu'il devrait fonctionner sans problème.

Fortune
la source
3
Je ne pense pas que vous deviez exécuter l'invite de commande VS en tant qu'administrateur. Mais exécuter la commande VS promt met tout ce que cmake recherche sur le chemin. En fonction de la façon dont vous avez installé CMake (que vous le placiez sur le chemin), vous pouvez également accéder à votre répertoire de construction et exécuter à cmake ..partir de là. De toute façon voté, car le terminal git-bash par exemple ne met pas automatiquement tout sur son chemin. Cela m'a aidé!
hetepeperfan
1
Cela ressemble plus à une solution de contournement qu'à une solution, car normalement, les générateurs IDE n'ont pas besoin des différentes variables d'environnement trouvées dans l'ensemble d'invites de commande de développement (vous n'en auriez besoin que si vous utilisiez un générateur de makefile ou similaire, tel comme Ninja)
Ryan Pavlik
2
mise à jour: sur Windows 10, cela s'appelle l' invite de commande
Mattijs
2
Explication très étrange: 1: Cela ne s'appelle pas l'invite de commande VS Studio 2: "naviguer", vous voulez dire en utilisant la commande "cd"? 3: Vous voulez dire, exécutez cmake-gui? Comme vous le dites à l'étape 5 pour "cliquer" sur un bouton 4: Continuer ?? vous voulez dire remplir? 5: Dans la liste déroulante de la fenêtre de configuration, je peux sélectionner le compilateur VS, mais les compilateurs C & C ++ sont toujours inconnus ...
DrumM
1
Btw, tapez simplement la recherche cmake et vous trouverez le cmake-gui
DrumM
31

J'ai regardé dans le fichier CMakeError.log et j'ai trouvé une erreur sur cannot run 'rc.exe'

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


Edit: La première réponse à une autre question suggère qu'il s'agit d'un problème PATH, donc cela pourrait suffire à garantir que le bac du SDK Microsoft est dans votre PATH.

Carl Walsh
la source
15

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.

Hrushikesh Kulkarni
la source
3
C'était aussi mon problème. C'est déroutant car Visual Studios 2015 est la version 14!
Paul Wintz
4
Notez que vous devrez peut-être supprimer votre cache pour changer la version de VS. Pour ce faire, cliquez sur Fichier> Supprimer le cache.
Paul Wintz
Cela a aidé ... le versionnage à son meilleur!
Noel Widmer
arrrrg, @PaulWintz merci pour ce rappel. Je pense que dans mon cas, j'ai exécuté cmake avec un cache cmake propre mais pendant que VisualStudio attendait que je redémarre l'ordinateur pour terminer une mise à jour VS, puis cmake a intelligemment mis en cache la mauvaise situation.
orion elenzil le
13

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

Les outils Visaul C ++ pour CMake doivent être installés

Vadim Berman
la source
Et la version 2015? Je n'ai pas trouvé cette case à cocher dans l'installation de 2015. Une solution pourrait être de mettre à jour vers 2017 ...
DrumM
1
@DrumM, ceci est spécifiquement pour Visual Studio 2017. Je ne crois pas que la fonctionnalité existe dans VS 2015.
Vadim Berman
Êtes-vous sûr que cela est nécessaire? N'est-ce pas uniquement pour utiliser CMake à partir de Visual Studio?
Peter Mortensen
@PeterMortensen: cela a résolu le problème pour moi. Encore une fois, Visual Studio 2017.
Vadim Berman
9

Si aucune des solutions ci-dessus ne fonctionne, arrêtez-vous et effectuez une vérification de cohérence.

J'ai été brûlé en utilisant la mauvaise -G <config>chaîne et cela m'a donné cette erreur trompeuse.

Tout d'abord, exécutez à partir de l'invite de commande VS et non de l'invite de commande normale. Vous pouvez le trouver dans Start Menu -> Visual Studio 2015 -> MSBuild Command Prompt for VS2015Ceci 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". ...

Ensuite, choisissez la chaîne appropriée avec le [arch] ajouté.

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

Exécuter cmake dans un sous-répertoire facilite le «nettoyage» puisque vous pouvez simplement supprimer tout ce qui se trouve dans ce répertoire.

J'ai mis à niveau vers Visual Studio 15 mais je n'y prêtais pas attention et j'essayais de générer pour 2012.

TrophyGeek
la source
7

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

[...] erreur MSB8036: la version 8.1 du SDK Windows est 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 sur la solution et en sélectionnant «Retarget solution».

Ceci malgré l'utilisation de Visual Studio 2017 sur Windows 7. Il semble donc que CMake tente de créer 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.

Chowey
la source
4

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 d'accès supérieur vers l'emplacement d'installation de votre SDK Windows.

CMake peut trouver rc.exe.

cd sur le chemin de CMakeLists.txtet faites:

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

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

Alen Wesker
la source
Lorsque msvc 2015 et 2017 est installé et que vous essayez de créer avec msvc 2015, il détecte automatiquement le SDK 10.0 lors de l'exécution de l'invite de commande vs2015. Vous pouvez spécifier la version du SDK en modifiant "l'invite de commande des outils natifs VS2015 x64" pour forcer le SDK 8.1 en ajoutant à la fin du paramètre de ligne de commande comme celui-ci; "% comspec% / k" "C: \ Program Files (x86) \ msdev2015 \ VC \ vcvarsall.bat" "amd64 8.1"
kalmiya
Dois-je installer séparément 'MSBuild Command Prompt for Visual Studio 2015'? J'ai installé msvc 2017 mais l'invite de commande pour Visual Studio n'est pas là.
meen
2

J'ai rencontré le même problème et je l'ai résolu 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.

Philippe Ferdinand
la source
2

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

Les nouveaux projets créés à partir de l'IDE Visual Studio 2015 Professional se compilent avec succès, mais CMake ne parvient pas à trouver le rapport du compilateur:

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

J'ai mis à niveau CMake de 3.4.1 à 3.11.4, et maintenant le problème a disparu.

jpo38
la source
1

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

Lars Bilke
la source
1

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

Packages Visual Studio 2017:

Visual Studio2017 Packages

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

vinodsaluja
la source
0

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.

Starger
la source
0

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

0xF
la source
0

Dans mon cas, je pouvais voir dans le CMakeError.logque 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 en utilisant:

-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 perturbé), mais cela aidera peut-être quelqu'un à résoudre ce problème.

Zitrax
la source
0

Quelques conseils:

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

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

J'ai également démarré 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.

Rarach
la source
0

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 )

D'une manière ou d'une autre, 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 CMakeLists.txtdossier principal .

Mojovski
la source
0

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

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

Gamaliel
la source
La numérotation des versions de Visual Studio est juste ... étrange. Visual Studio 14 est en réalité Visual Studio 2015, il n'y a pas de Visual Studio 2014. Voir la réponse de trophygeek stackoverflow.com/a/40332976/1319284
kutschkem
0

J'ai trouvé cette solution à stackoverflow et je travaille pour moi bien que je ne travaille pas avec d'autres solutions si vous avez un système d'exploitation Windows 10, les étapes suivantes résoudront le problème:

1) allez dans C: \ Program Files (x86) \ Microsoft SDKs \ 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 que c'est utile ...

tigre intelligent
la source
0

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

Ce sont ces packages:

Plateforme Windows universelle C ++ pour ARM64 "Non requise"

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

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

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

Ensuite, les problèmes pourraient disparaître:

Aucun CMAKE_C_COMPILER n'a pu être trouvé.

Aucun CMAKE_CXX_COMPILER n'a pu être trouvé.

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

Vous pouvez éventuellement 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 du processeur Android ARM.

Dealazer
la source
0

Résolu en ajoutant le composant manquant Modifier-> continuer d'ajouter comme suit Réparer

ALKHAMEES ABDULRAHMAN
la source
Une réponse par lien uniquement n'est pas recommandée.
Ṃųỻịgǻňạcểơửṩ
0

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

J'ai couru where cmakedans la console et j'ai trouvé que cygwin fournit également son propre fichier cmake.exe , qui était utilisé. La modification de l'ordre des répertoires dans PATH a résolu le problème.

Stgatilov
la source
0

La vérification de 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): avertissement MSB8003: Impossible de trouver la variable WindowsSdkDir_71A dans le registre. TargetFrameworkVersion ou PlatformToolset peut être défini sur un numéro de version non valide.

L'erreur signifie que les outils de génération 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:

entrez la description de l'image ici

Nathan Moinvaziri
la source
0

J'ai eu ce problème avec l'interface graphique CMake et l'édition communautaire VS 21019. Je pense que j'ai peut-être installé CMake avant Visual Studio - certainement après la mise à jour de CMake 3.15.2 à 3.15.3, le problème a disparu.

Mike Pelton
la source
0

Vérifiez le dossier de noms trop longtemps ou non.

user1633912
la source
-3

Parce que CMake ne parvient pas à trouver votre compilateur Visual Studio. Démarrez n'importe quel projet qui téléchargera les compilateurs requis et CMake doit alors pouvoir le trouver.

Kushal
la source