Erreur CMake à CMakeLists.txt: 30 (projet): aucun CMAKE_C_COMPILER n'a pu être trouvé

105

J'essaie de créer une solution Visual Studio avec CMake pour compiler la dernière version d'Aseprite et CMake ne cesse de me donner:

No CMAKE_C_COMPILER could be found.
No CMAKE_CXX_COMPILER could be found.

J'ai déjà téléchargé GCC et j'utilise Visual Studio 2015 .

Je suis ce tutoriel:

https://github.com/aseprite/aseprite/blob/master/INSTALL.md

Caio Fontes
la source
Vous pouvez configurer le projet pour Visual studio avec son compilateur ou pour Makefiles avec gcc. Quelle méthode avez-vous essayée?
Tsyvarev du
Quelle est la commande cmake que vous entrez?
bames53
Utilisez-vous la dernière version de CMake? Quel générateur avez-vous utilisé? Avez-vous exécuté les commandes à partir de l'invite de commandes Visual Studio 2015 (les variables d'environnement du compilateur sont-elles définies)?
drescherjm le
1
@ bames53 Je voulais juste ajouter aux lignes de commande correspondantes pour @Caio Fontes à essayer: cmake .. -G "Visual Studio 14 2015"ou cmake .. -G "MSYS Makefiles"(si cela gccsignifie MinGW). Et j'ai beaucoup vu ces questions (comme ici , ici ou ici ) et je pense qu'il nous manque une réponse combinée / tutorielle sur SO.
Florian le
1
Possibilité de duplication de la solution de génération de problèmes pour VS 2017 avec CMake
Mark Ingram

Réponses:

97

Ces messages d'erreur

CMake Error at ... (project):
    No CMAKE_C_COMPILER could be found.
-- Configuring incomplete, errors occurred!
See also ".../CMakeFiles/CMakeOutput.log".
See also ".../CMakeFiles/CMakeError.log".

ou

CMake Error: your CXX compiler: "CMAKE_CXX_COMPILER-NOTFOUND" was not found.
Please set CMAKE_CXX_COMPILER to a valid compiler path or name.
...
-- Configuring incomplete, errors occurred!

signifie simplement que CMake n'a pas pu trouver votre compilateur C / CXX pour compiler un programme de test simple (l'une des premières choses que CMake essaie lors de la détection de votre environnement de construction).

Les étapes de recherche de votre problème dépendent de l'environnement de génération que vous souhaitez générer. Les didacticiels suivants sont une collection de réponses ici sur Stack Overflow et certaines de mes propres expériences avec CMake sur Microsoft Windows 7/8/10 et Ubuntu 14.04.

Conditions préalables

  • Vous avez installé le compilateur / IDE et il a pu une fois compiler n'importe quel autre programme (directement sans CMake)
  • Vous avez la dernière version de CMake
  • Vous disposez des droits d'accès sur le lecteur sur lequel CMake doit générer votre environnement de build
  • Vous avez un répertoire de construction propre (car CMake met en cache les choses du dernier essai), par exemple en tant que sous-répertoire de votre arborescence source

    Windows cmd.exe

    > rmdir /s /q VS2015
    > mkdir VS2015
    > cd VS2015

    Coque Bash

    $ rm -rf MSYS
    $ mkdir MSYS
    $ cd MSYS

    et assurez-vous que votre shell de commande pointe vers votre répertoire de sortie binaire nouvellement créé.

Choses générales que vous pouvez / devriez essayer

  1. CMake peut-il trouver et exécuter avec n'importe quel / votre compilateur par défaut? Courir sans donner de générateur

    > cmake ..
    -- Building for: Visual Studio 14 2015
    ...

    Parfait s'il a correctement déterminé le générateur à utiliser - comme ici Visual Studio 14 2015

  2. Qu'est-ce qui a réellement échoué?

    Dans le répertoire de sortie de la version précédente, recherchez CMakeFiles\CMakeError.logtout message d'erreur pertinent pour vous ou essayez d'ouvrir / compiler le projet de test généré à CMakeFiles\[Version]\CompilerIdC| CompilerIdCXXdirectement à partir de la ligne de commande (comme indiqué dans le journal des erreurs).

CMake ne trouve pas Visual Studio

  1. Essayez de sélectionner la bonne version du générateur :

    > cmake --help
    > cmake -G "Visual Studio 14 2015" ..
  2. Si cela ne résout pas le problème, essayez d'abord de définir les variables d'environnement Visual Studio (le chemin peut varier):

    > "c:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat"
    > cmake ..

    ou utilisez le Developer Command Prompt for VS2015raccourci dans votre menu Démarrer de Windows sous All Programs/ Visual Studio 2015/ Visual Studio Tools(merci à @Antwane pour l'indication).

Contexte : CMake prend en charge toutes les versions et versions de Visual Studio (Express, Community, Professional, Premium, Test, Team, Enterprise, Ultimate, etc.). Pour déterminer l'emplacement du compilateur, il utilise une combinaison de recherche dans le registre (par exemple à HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\[Version];InstallDir), les variables d'environnement système et - si aucun des autres n'a trouvé quelque chose - il essaie simplement d'appeler le compilateur.

CMake ne trouve pas GCC (MinGW / MSys)

  1. Vous démarrez le bashshell MSys avec msys.batet essayez simplement d'appeler directementgcc

    $ gcc
    gcc.exe: fatal error: no input files
    compilation terminated.

    Ici, il a trouvé gccet se plaint que je ne lui ai donné aucun paramètre avec lequel travailler.

    Donc, ce qui suit devrait fonctionner:

    $ cmake -G "MSYS Makefiles" ..
    -- The CXX compiler identification is GNU 4.8.1
    ...
    $ make

    Si GCC n'a pas été trouvé, appelez export PATH=...pour ajouter le chemin de votre compilateur (voir Comment définir la variable d'environnement PATH dans le script CMake? ) Et réessayez.

  2. Si cela ne fonctionne toujours pas, essayez de définir le CXXchemin du compilateur directement en l'exportant (le chemin peut varier)

    $ export CC=/c/MinGW/bin/gcc.exe
    $ export CXX=/c/MinGW/bin/g++.exe
    $ cmake -G "MinGW Makefiles" ..
    -- The CXX compiler identification is GNU 4.8.1
    ...
    $ mingw32-make

    Pour plus de détails, voir Comment spécifier un nouveau chemin GCC pour CMake

    Remarque : Lorsque vous utilisez le générateur "MinGW Makefiles", vous devez utiliser le mingw32-makeprogramme distribué avec MinGW

  3. Ne fonctionne toujours pas? C'est bizarre. Veuillez vous assurer que le compilateur est là et qu'il a des droits exécutables (voir aussi le chapitre sur les conditions préalables ci-dessus).

    Sinon, le dernier recours de CMake est de ne pas essayer de recherche de compilateur lui-même et de définir les variables internes de CMake directement en

    $ cmake -DCMAKE_C_COMPILER=/c/MinGW/bin/gcc.exe -DCMAKE_CXX_COMPILER=/c/MinGW/bin/g++.exe ..

    Pour plus de détails, voir Cmake ne respecte pas -D CMAKE_CXX_COMPILER = g ++ et le compilateur de paramétrage d'erreur Cmake

    Alternativement, ces variables peuvent également être définies via cmake-gui.exeWindows. Voir Cmake ne trouve pas le compilateur

Contexte : identique à celui de Visual Studio. CMake prend en charge toutes sortes de saveurs GCC. Il recherche les variables d'environnement (CC, CXX, etc.) ou essaie simplement d'appeler le compilateur. En outre , il détecte tous les préfixes (lors de la compilation croisée ) et tente d'ajouter à tous les binutils du compilateur GNU toolchain ( ar, ranlib, strip, ld, nm, objdumpet objcopy).

Florian
la source
1
À titre informatif, certains des liens de documentation cmake pointent vers une version vraiment ancienne de CMake, n'oubliez pas d'utiliser le sélecteur de version pour correspondre à la version que vous avez sur votre ordinateur (par exemple, si vous ne voyez pas de plate-forme plus récente répertoriée vous avez besoin).
jrh
42

Pour Ubuntu, veuillez installer les éléments ci-dessous:

sudo apt-get update && sudo apt-get install build-essential
Vishnu
la source
21

Cela m'est arrivé après avoir installé Visual Studio 15 2017.

Le compilateur C ++ pour Visual Studio 14 2015 n'était pas le problème. Cela semblait être un problème avec le SDK Windows 10.

L'ajout des SDK Windows 10 à Visual Studio 14 2015 a résolu le problème pour moi.

Voir la capture d'écran ci-jointe.

Entrez la description de l'image ici

Wim Vanhenden
la source
13

J'ai également rencontré cette erreur en travaillant avec CMake:

No CMAKE_C_COMPILER could be found.
No CMAKE_CXX_COMPILER could be found.

La zone `` avertissement '' dans l'article de la bibliothèque MSDN Visual C ++ dans Visual Studio 2015 m'a donné l'aide dont j'avais besoin.

Visual Studio 2015 n'est pas fourni avec C ++ installé par défaut. Ainsi, la création d'un nouveau projet C ++ vous invitera à télécharger les composants C ++ nécessaires.

Natalie Cottrill
la source
9

Cela fonctionne pour moi dans Ubuntu 17.10 (Artful Aardvark):

apt-get update
apt-get install build-essential
purval_patel
la source
5

J'ai rencontré ce problème lors de la construction de libgit2-0.23.4. Pour moi , le problème était que les paquets de compilateur et connexes C ne sont pas installés avec VS2015, donc « C: \ Program Files (x86) \ Microsoft Visual Studio 14.0 \ VC \ vcvarsall.bat » le fichier était absent et Cmake n'a pas pu trouver le compilateur.

J'ai essayé de créer manuellement un projet C ++ dans l'interface graphique de Visual Studio 2015 ( C: \ Program Files (x86) \ Microsoft Visual Studio 14.0 \ Common7 \ IDE \ devenv.exe ) et lors de la création du projet, j'ai reçu une invite pour télécharger le C ++ & packages associés.

Après avoir téléchargé les packages requis, j'ai pu voir vcvarsall.bat et Cmake a pu trouver le compilateur et exécuté avec succès avec le journal suivant:

C:\Users\aksmahaj\Documents\MyLab\fritzing\libgit2\build64>cmake ..
-- Building for: Visual Studio 14 2015
-- The C compiler identification is MSVC 19.0.24210.0
-- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual        
Studio 14.0/VC/bin/cl.exe
-- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual  
Studio 14.0/VC/bin/cl.exe -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Could NOT find PkgConfig (missing:  PKG_CONFIG_EXECUTABLE)
-- Could NOT find ZLIB (missing:  ZLIB_LIBRARY ZLIB_INCLUDE_DIR)
-- zlib was not found; using bundled 3rd-party sources.
-- LIBSSH2 not found. Set CMAKE_PREFIX_PATH if it is installed outside of 
the default search path.
-- Looking for futimens
-- Looking for futimens - not found
-- Looking for qsort_r
-- Looking for qsort_r - not found
-- Looking for qsort_s
-- Looking for qsort_s - found
-- Looking for clock_gettime in rt
-- Looking for clock_gettime in rt - not found
-- Found PythonInterp: C:/csvn/Python25/python.exe (found version "2.7.1")
-- Configuring done
-- Generating done
-- Build files have been written to:    
C:/Users/aksmahaj/Documents/MyLab/fritzing/libgit2/build64
Aksh1801
la source
1
Cela a fonctionné pour moi. La création manuelle d'un projet C ++ pour installer les packages nécessaires a fait l'affaire.
Melaz
5

J'ai eu les mêmes erreurs avec CMake. Dans mon cas, j'ai utilisé la mauvaise version de Visual Studio dans la boîte de dialogue CMake initiale où nous devons sélectionner le compilateur Visual Studio.

Ensuite, je l'ai changé en "Visual Studio 11 2012" et les choses ont fonctionné. (J'ai la version Visual Studio Ultimate 2012 sur mon PC). En général, essayez de saisir une ancienne version de la version de Visual Studio dans la boîte de dialogue de configuration initiale de CMake.

TSac
la source
4

Pour moi, ce problème a disparu sous Windows lorsque j'ai déplacé mon projet vers un répertoire parent moins profond, c'est-à-dire vers:

C:\Users\spenc\Desktop\MyProjectDirectory

au lieu de

C:\Users\spenc\Desktop\...\MyProjectDirectory.

Je pense que la source du problème était que MSBuild a une restriction de longueur de chemin de fichier à 260 caractères. Cela provoque le test de base du compilateur que CMake effectue pour générer un projet appelé CompilerIdCXX.vcxprojà échouer avec l'erreur:

C1083: Cannot open source file: 'CMakeCXXCompilerId.cpp'

parce que la longueur du chemin du fichier, par exemple

C:\Users\spenc\Desktop\...\MyProjectDirectory\build\CMakeFiles\...\CMakeCXXCompilerId.cpp

dépasse la restriction MAX_PATH.

CMake conclut alors qu'il n'y a pas de compilateur CXX.

spenceryue
la source
2

Assurez-vous que vous avez sélectionné la version correcte de Visual Studio. C'est plus compliqué qu'il n'y paraît, car Visual Studio 2015 est en fait Visual Studio 14, et de même Visual Studio 2012 est Visual Studio 11. J'avais mal sélectionné Visual Studio 15 qui est en fait Visual Studio 2017, lorsque 2015 était installé.

Aryaman Gupta
la source
1

Aucune des solutions ici ne résout mon problème - uniquement lorsque j'installe Windows Update pour le runtime C universel.

Maintenant CMake fonctionne et plus aucun lien ne se bloque à partir de Visual Studio.

Mise à jour pour Universal C Runtime sous Windows

Meir Gerenstadt
la source
1

Vous pouvez également vous assurer que vous êtes l'utilisateur sudo et que vous avez un accès LECTURE / ÉCRITURE sur le répertoire sur lequel vous travaillez. J'ai eu un problème similaire sur OS X, et je l'ai résolu simplement en entrant en mode sudo.

Daniel Rubambura
la source
1

Juste au cas où cela aiderait quelqu'un comme moi à l'avenir:

J'ai ce problème depuis 24 heures maintenant, sur 3 machines 64 bits différentes (Win7, VM Windows 8.1 et ordinateur portable WIn 8.1) - tout en essayant de créer WebKit avec VS 2017.

Le problème simple ici est que le compilateur VC ++ (c'est-à-dire cl.exe et ses DLL dépendantes) n'est pas visible par CMake. Facile. En rendant les dossiers VC ++ contenant ces binaires visibles par CMake et votre invite de commande de travail (si vous exécutez Cmake à partir d'une invite de commande), voila! (En plus des points clés soulevés par d'autres, ci-dessus)

Quoi qu'il en soit, après toutes sortes de correctifs - comme indiqué sur ces nombreux forums - j'ai découvert qu'il s'agissait SIMPLEMENT de s'assurer que le contenu de la variable PATH ne soit pas encombré de plusieurs chemins BIN Visual Studio, etc. et à la place, indique:

a) l'emplacement de votre compilateur (c'est-à-dire cl.exe pour votre version préférée de Visual Studio), qui dans mon cas (ciblant une plate-forme 64 bits et se développant sur un hôte 64 bits) est: C: \ Program Files (x86 ) \ Microsoft Visual Studio \ 2017 \ Community \ VC \ Tools \ MSVC \ 14.15.26726 \ bin \ Hostx64 \ x64

b) et en plus, le dossier contenant une DLL dépendante appelée (dont cl.exe dépend): api-ms-win-crt-runtime-l1-1-0.dll - qui sur ma machine est:

C: \ Program Files (x86) \ Microsoft Visual Studio \ 2017 \ Community \ Common7 \ IDE \ Remote Debugger \ x64

Ces deux répertoires ajoutés à une variable de chemin système simplifié et CUSTOM (fonctionnant sous une invite de commande à privilèges Admin), ont éliminé mon "Aucun CMAKE_C_COMPILER n'a pu être trouvé" et "Aucun CMAKE_CXX_COMPILER n'a pu être trouvé." les erreurs.

J'espère que ça aide quelqu'un.

GreatCentralSun
la source
1

J'obtiens exactement l'erreur signalée si ccache est activé, lors de l'utilisation du générateur Xcode de CMake . La désactivation de ccache a résolu le problème pour moi. Ci-dessous, je présente un correctif / vérification qui fonctionne pour MacOS, mais devrait fonctionner de la même manière sur d'autres plates-formes.

Apparemment, il est possible d'utiliser le générateur Xcode de CMake (et d'autres) également en combinaison avec ccache, comme décrit ici . Mais je ne l'ai jamais essayé moi-même.

# 1) To check if ccache is enabled:
echo $CC
echo $CXX
# This prints something like the following: 
#     ccache clang -Qunused-arguments -fcolor-diagnostics. 
# CC or CXX are typically set in the `.bashrc` or `.zshrc` file.

# 2) To disable ccache, use the following:
CC=clang
CXX=clang++

# 3) Then regenerate the cmake project
cmake -G Xcode <path/to/CMakeLists.txt>
normanius
la source
1
J'ai pu résoudre le même problème en m'assurant que la sortie de "xcode-select -p" pointe vers mon installation Xcode. Dans mon cas, installer Xcode et exécuter "xcode-select -r" suffisait.
TomTasche
0

J'ai mis à jour la mise à jour 2 de Visual Studio 2015 vers la mise à jour 3 de Visual Studio 2015 et cela a résolu mon problème.

TripleS
la source
Cette solution était requise chez moi au travail après avoir poussé une mise à jour du système d'exploitation Windows. J'ai utilisé au moins 2 des solutions de cette page pour corriger l'erreur. L'erreur peut survenir dans un certain nombre de conditions, c'est pourquoi il existe plusieurs réponses différentes, mais réalisables.
Natalie Cottrill
0

J'ai eu le même problème avec cmake-gui ( No CMAKE_CXX_COMPILER could be found.), alors que l'exécution de CMake à partir de la ligne de commande fonctionnait bien. Après avoir ajouté manuellement les entrées

C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin

C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin

à la variable d'environnement PATH cela a fonctionné pour moi.

Helmken
la source
0

Pour moi, cela a fonctionné d'utiliser l'invite de commande du développeur fournie avec Visual Studio, puis simplement cdde l' your/jcef/direxécutercmake -G "Visual Studio 14 Win64" ..

Marc Dirven
la source
0

J'ai eu le même problème.

J'essayais d'installer dlib sur ma machine et cela m'a donné cette erreur. Le tutoriel mentionné dans la question conduit au téléchargement de Visual Studio 2017. J'ai résolu ce problème en désinstallant VS 2017 et en installant VS 2015

On peut installer VS 2015 via ce thread stackoverflow: Comment télécharger Visual Studio Community Edition 2015 (pas 2017)

Aprajita Verma
la source
0

Je sais que cette question concerne Visual Studio 2015. J'ai rencontré ce problème avec Visual Studio 2017. Lors d'une recherche sur google, j'ai atterri sur cette page. Après avoir regardé les 2,3 premières réponses, j'ai réalisé que c'était le problème avec l'installation de vc ++. L'installation de la charge de travail «Développement de bureau avec C ++» a résolu le problème.

Développement de bureau avec C ++

Asad
la source
0

Regardez dans le Cmakelists.txt si vous trouvez ARM dont vous avez besoin pour installer C ++ pour ARM

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)

Puis les problèmes

Aucun CMAKE_C_COMPILER n'a pu être trouvé.

Aucun CMAKE_CXX_COMPILER n'a pu être trouvé.

Peut disparaître à moins que vous ne spécifiiez un compilateur c comme clang, et peut-être que l'installation de clang fonctionnera en une autre faveur.

Vous pouvez avec l'option remove dans cmakelists.txt à la fois avec # avant enable_language si vous ne compilez pas pour ARM.

Dealazer
la source