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
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
Qu'est-ce qui a réellement échoué?
Dans le répertoire de sortie de la version précédente, recherchez CMakeFiles\CMakeError.log
tout message d'erreur pertinent pour vous ou essayez d'ouvrir / compiler le projet de test généré à CMakeFiles\[Version]\CompilerIdC
| CompilerIdCXX
directement à partir de la ligne de commande (comme indiqué dans le journal des erreurs).
CMake ne trouve pas Visual Studio
Essayez de sélectionner la bonne version du générateur :
> cmake --help
> cmake -G "Visual Studio 14 2015" ..
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 VS2015
raccourci 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)
Vous démarrez le bash
shell MSys avec msys.bat
et essayez simplement d'appeler directementgcc
$ gcc
gcc.exe: fatal error: no input files
compilation terminated.
Ici, il a trouvé gcc
et 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.
Si cela ne fonctionne toujours pas, essayez de définir le CXX
chemin 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-make
programme distribué avec MinGW
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.exe
Windows. 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
, objdump
et objcopy
).