Te komunikaty o błędach
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".
lub
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!
po prostu oznacza, że CMake nie mógł znaleźć kompilatora C / CXX, aby skompilować prosty program testowy (jedna z pierwszych rzeczy, które CMake próbuje podczas wykrywania twojego środowiska kompilacji).
Kroki prowadzące do znalezienia problemu zależą od środowiska kompilacji, które chcesz wygenerować. Poniższe samouczki są zbiorem odpowiedzi na temat przepełnienia stosu i niektórych moich własnych doświadczeń z CMake w systemie Microsoft Windows 7/8/10 i Ubuntu 14.04.
Warunki wstępne
- Zainstalowałeś kompilator / IDE i był w stanie skompilować raz dowolny inny program (bezpośrednio bez CMake)
- Masz najnowszą wersję CMake
- Masz prawa dostępu do dysku, na którym CMake ma wygenerować środowisko kompilacji
Masz czysty katalog kompilacji (ponieważ CMake buforuje rzeczy od ostatniej próby) np. Jako podkatalog twojego drzewa źródłowego
Windows cmd.exe
> rmdir /s /q VS2015
> mkdir VS2015
> cd VS2015
Bash shell
$ rm -rf MSYS
$ mkdir MSYS
$ cd MSYS
i upewnij się, że powłoka poleceń wskazuje na nowo utworzony katalog wyjściowy binarny.
Ogólne rzeczy, które możesz / powinieneś spróbować
Czy CMake może znaleźć i uruchomić z dowolnym / twoim domyślnym kompilatorem? Biegnij bez generatora
> cmake ..
-- Building for: Visual Studio 14 2015
...
Idealnie, jeśli prawidłowo określił generator do użycia - jak tutaj Visual Studio 14 2015
Co właściwie zawiodło?
W poprzednim katalogu wyjściowym kompilacji poszukaj CMakeFiles\CMakeError.log
wszelkich komunikatów o błędach, które mają dla Ciebie sens, lub spróbuj otworzyć / skompilować projekt testowy wygenerowany pod adresem CMakeFiles\[Version]\CompilerIdC
| CompilerIdCXX
bezpośrednio z wiersza poleceń (zgodnie z dziennikiem błędów).
CMake nie może znaleźć programu Visual Studio
Spróbuj wybrać odpowiednią wersję generatora :
> cmake --help
> cmake -G "Visual Studio 14 2015" ..
Jeśli to nie pomoże, spróbuj najpierw ustawić zmienne środowiskowe programu Visual Studio (ścieżka może się różnić):
> "c:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat"
> cmake ..
lub użyj Developer Command Prompt for VS2015
skrótu w menu Start systemu Windows pod All Programs
/ Visual Studio 2015
/ Visual Studio Tools
(dzięki @Antwane za podpowiedź).
Tło : CMake obsługuje wszystkie wersje i smaki programu Visual Studio (Express, Community, Professional, Premium, Test, Team, Enterprise, Ultimate itp.). Aby określić lokalizację kompilatora, wykorzystuje kombinację przeszukiwania rejestru (np. At HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\[Version];InstallDir
), systemowych zmiennych środowiskowych i - jeśli żaden z pozostałych czegoś nie wymyślił - po prostu próbuje wywołać kompilator.
CMake nie może znaleźć GCC (MinGW / MSys)
Uruchamiasz bash
powłokę MSys z msys.bat
i po prostu próbujesz bezpośrednio wywołaćgcc
$ gcc
gcc.exe: fatal error: no input files
compilation terminated.
Tutaj znalazł gcc
i narzeka, że nie podałem mu żadnych parametrów do pracy.
Więc powinno działać:
$ cmake -G "MSYS Makefiles" ..
-- The CXX compiler identification is GNU 4.8.1
...
$ make
Jeśli nie znaleziono GCC, wywołaj, export PATH=...
aby dodać ścieżkę kompilatora (zobacz Jak ustawić zmienną środowiskową PATH w skrypcie CMake? ) I spróbuj ponownie.
Jeśli nadal nie działa, spróbuj ustawić CXX
ścieżkę kompilatora bezpośrednio, eksportując ją (ścieżka może się różnić)
$ 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
Aby uzyskać więcej informacji, zobacz Jak określić nową ścieżkę GCC dla CMake
Uwaga : Korzystając z generatora „MinGW Makefiles” należy korzystać z mingw32-make
programu dystrybuowanego z MinGW
Wciąż nie działa? To jest dziwne. Upewnij się, że kompilator tam jest i ma prawa do wykonywania (zobacz także rozdział dotyczący warunków wstępnych powyżej).
W przeciwnym razie ostatnią deską ratunku CMake jest nie próbowanie przeszukiwania kompilatora samodzielnie i ustawianie zmiennych wewnętrznych CMake bezpośrednio przez
$ cmake -DCMAKE_C_COMPILER=/c/MinGW/bin/gcc.exe -DCMAKE_CXX_COMPILER=/c/MinGW/bin/g++.exe ..
Aby uzyskać więcej informacji, zobacz Cmake nie honoruje -D CMAKE_CXX_COMPILER = g ++ i kompilator ustawień błędów Cmake
Alternatywnie te zmienne można również ustawić cmake-gui.exe
w systemie Windows. Zobacz Cmake nie może znaleźć kompilatora
Tło : podobnie jak w przypadku programu Visual Studio. CMake obsługuje wszystkie rodzaje smaków GCC. Przeszukuje zmienne środowiskowe (CC, CXX itp.) Lub po prostu próbuje wywołać kompilator. Ponadto wykryje żadnych przedrostków (kiedy cross-kompilacji ) i stara się, aby dodać go do wszystkich binutils kompilatora GNU toolchain ( ar
, ranlib
, strip
, ld
, nm
, objdump
, i objcopy
).