Quei messaggi di errore
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".
o
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!
Significa solo che CMake non è stato in grado di trovare il compilatore C / CXX per compilare un semplice programma di test (una delle prime cose che CMake prova durante il rilevamento dell'ambiente di compilazione).
I passaggi per individuare il problema dipendono dall'ambiente di compilazione che si desidera generare. I seguenti tutorial sono una raccolta di risposte qui su Stack Overflow e alcune delle mie esperienze con CMake su Microsoft Windows 7/8/10 e Ubuntu 14.04.
Presupposti
- Hai installato il compilatore / IDE ed è stato in grado di compilare una volta qualsiasi altro programma (direttamente senza CMake)
- Hai l'ultima versione di CMake
- Hai i diritti di accesso sull'unità in cui desideri che CMake generi il tuo ambiente di compilazione
Hai una directory di compilazione pulita (perché CMake memorizza nella cache le cose dall'ultimo tentativo) ad es. Come sottodirectory dell'albero dei sorgenti
Windows cmd.exe
> rmdir /s /q VS2015
> mkdir VS2015
> cd VS2015
Bash shell
$ rm -rf MSYS
$ mkdir MSYS
$ cd MSYS
e assicurati che la shell dei comandi punti alla directory di output binario appena creata.
Cose generali che puoi / dovresti provare
CMake è in grado di trovare ed eseguire con qualsiasi / il tuo compilatore predefinito? Corri senza dare un generatore
> cmake ..
-- Building for: Visual Studio 14 2015
...
Perfetto se ha determinato correttamente il generatore da utilizzare, come qui Visual Studio 14 2015
Che cosa ha effettivamente fallito?
Nella directory di output della build precedente, cerca CMakeFiles\CMakeError.log
qualsiasi messaggio di errore che abbia senso per te o prova ad aprire / compilare il progetto di test generato in CMakeFiles\[Version]\CompilerIdC
| CompilerIdCXX
direttamente dalla riga di comando (come si trova nel registro degli errori).
CMake non riesce a trovare Visual Studio
Prova a selezionare la versione del generatore corretta :
> cmake --help
> cmake -G "Visual Studio 14 2015" ..
Se ciò non aiuta, prova prima a impostare le variabili di ambiente di Visual Studio (il percorso potrebbe variare):
> "c:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat"
> cmake ..
o usa la Developer Command Prompt for VS2015
scorciatoia nel menu Start di Windows in All Programs
/ Visual Studio 2015
/ Visual Studio Tools
(grazie a @Antwane per il suggerimento).
Background : CMake supporta tutte le versioni e le versioni di Visual Studio (Express, Community, Professional, Premium, Test, Team, Enterprise, Ultimate, ecc.). Per determinare la posizione del compilatore utilizza una combinazione di ricerca nel registro (ad esempio in HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\[Version];InstallDir
), variabili di ambiente di sistema e, se nessuno degli altri ha trovato qualcosa, prova semplicemente a chiamare il compilatore.
CMake non riesce a trovare GCC (MinGW / MSys)
Avvii la bash
shell MSys con msys.bat
e provi a chiamare direttamentegcc
$ gcc
gcc.exe: fatal error: no input files
compilation terminated.
Qui ha trovato gcc
e si lamenta che non gli ho fornito alcun parametro con cui lavorare.
Quindi dovrebbe funzionare quanto segue:
$ cmake -G "MSYS Makefiles" ..
-- The CXX compiler identification is GNU 4.8.1
...
$ make
Se GCC non è stato trovato, chiama export PATH=...
per aggiungere il percorso del tuo compilatore (vedi Come impostare la variabile d'ambiente PATH nello script CMake? ) E riprova.
Se ancora non funziona, prova a impostare CXX
direttamente il percorso del compilatore esportandolo (il percorso può variare)
$ 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
Per maggiori dettagli, vedi Come specificare un nuovo percorso GCC per CMake
Nota : quando si utilizza il generatore "MinGW Makefiles" è necessario utilizzare il mingw32-make
programma distribuito con MinGW
Continua a non funzionare? Quello è strano. Assicurati che il compilatore sia presente e disponga dei diritti eseguibili (vedi anche il capitolo precondizioni sopra).
Altrimenti l'ultima risorsa di CMake è non provare alcuna ricerca del compilatore e impostare le variabili interne di CMake direttamente da
$ cmake -DCMAKE_C_COMPILER=/c/MinGW/bin/gcc.exe -DCMAKE_CXX_COMPILER=/c/MinGW/bin/g++.exe ..
Per maggiori dettagli vedere Cmake non rispetta -D CMAKE_CXX_COMPILER = g ++ e Cmake error setting compiler
In alternativa, queste variabili possono essere impostate anche tramite cmake-gui.exe
su Windows. Vedere Cmake non riesce a trovare il compilatore
Sfondo : molto simile a Visual Studio. CMake supporta tutti i tipi di versioni di GCC. Cerca nelle variabili d'ambiente (CC, CXX, ecc.) O semplicemente prova a chiamare il compilatore. Inoltre rileverà eventuali prefissi (quando cross-compilazione ) e tenta di aggiungere a tutti i binutils toolchain del compilatore GNU ( ar
, ranlib
, strip
, ld
, nm
, objdump
, e objcopy
).