Błąd CMake w CMakeLists.txt: 30 (projekt): nie można znaleźć CMAKE_C_COMPILER


105

Próbuję stworzyć rozwiązanie Visual Studio z CMake, aby skompilować najnowszą wersję aseprite, a CMake ciągle daje mi:

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

Pobrałem już GCC i używam Visual Studio 2015 .

Śledzę ten samouczek:

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


Możesz skonfigurować projekt dla programu Visual Studio z jego kompilatorem lub dla plików Makefiles z gcc. Jakiej metody próbowałeś?
Tsyvarev

Jakie jest polecenie cmake, które wprowadzasz?
bames53

Czy używasz najnowszego CMake? Z jakiego generatora korzystałeś? Czy uruchomiłeś polecenia z wiersza polecenia programu Visual Studio 2015 (więc ma ustawione zmienne środowiskowe kompilatora)?
drescherjm

1
@ bames53 Chciałem tylko dodać do odpowiednich linii poleceń dla @Caio Fontes, aby spróbować: cmake .. -G "Visual Studio 14 2015"lub cmake .. -G "MSYS Makefiles"(jeśli gccto znaczy MinGW). Często widziałem te pytania (jak tutaj , tutaj lub tutaj ) i myślę, że brakuje nam połączonej / samouczkowej odpowiedzi na SO.
Florian

Odpowiedzi:


97

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ć

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

  2. Co właściwie zawiodło?

    W poprzednim katalogu wyjściowym kompilacji poszukaj CMakeFiles\CMakeError.logwszelkich komunikatów o błędach, które mają dla Ciebie sens, lub spróbuj otworzyć / skompilować projekt testowy wygenerowany pod adresem CMakeFiles\[Version]\CompilerIdC| CompilerIdCXXbezpośrednio z wiersza poleceń (zgodnie z dziennikiem błędów).

CMake nie może znaleźć programu Visual Studio

  1. Spróbuj wybrać odpowiednią wersję generatora :

    > cmake --help
    > cmake -G "Visual Studio 14 2015" ..
  2. 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 VS2015skró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)

  1. Uruchamiasz bashpowłokę MSys z msys.bati po prostu próbujesz bezpośrednio wywołaćgcc

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

    Tutaj znalazł gcci 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.

  2. 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-makeprogramu dystrybuowanego z MinGW

  3. 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.exew 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).


1
Na wszelki wypadek niektóre linki do dokumentów cmake wskazują na naprawdę starą wersję CMake, pamiętaj, aby użyć selektora wersji, aby dopasować wersję, którą masz na swoim komputerze (np. Jeśli nie widzisz na liście nowszej platformy potrzebujesz).
jrh

42

W przypadku Ubuntu zainstaluj poniższe rzeczy:

sudo apt-get update && sudo apt-get install build-essential

21

Zdarzyło mi się to po zainstalowaniu programu Visual Studio 15 2017.

Kompilator C ++ dla programu Visual Studio 14 2015 nie był problemem. Wydawało się, że jest to problem z zestawem SDK systemu Windows 10.

Dodanie zestawów SDK systemu Windows 10 do programu Visual Studio 14 2015 rozwiązało problem.

Zobacz załączony zrzut ekranu.

Tutaj wprowadź opis obrazu


13

Podczas pracy z CMake również wystąpił ten błąd:

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

Pole „Ostrzeżenie” w artykule biblioteki MSDN Visual C ++ w programie Visual Studio 2015 dało mi potrzebną pomoc.

Program Visual Studio 2015 nie jest dostarczany z C ++ zainstalowanym domyślnie. Tak więc podczas tworzenia nowego projektu C ++ pojawi się monit o pobranie niezbędnych komponentów C ++.



5

Napotkałem ten problem podczas tworzenia biblioteki libgit2-0.23.4. Dla mnie problem polegał na tym, że kompilator C ++ i powiązane pakiety nie zostały zainstalowane z VS2015, dlatego brakowało pliku „C: \ Program Files (x86) \ Microsoft Visual Studio 14.0 \ VC \ vcvarsall.bat” i Cmake nie mógł znaleźć kompilator.

Próbowałem ręcznie stworzyć projekt C ++ w GUI Visual Studio 2015 ( C: \ Program Files (x86) \ Microsoft Visual Studio 14.0 \ Common7 \ IDE \ devenv.exe ) i podczas tworzenia projektu dostałem monit o pobranie C ++ i powiązane pakiety.

Po pobraniu wymaganych pakietów mogłem zobaczyć, że vcvarsall.bat & Cmake był w stanie znaleźć kompilator i pomyślnie wykonać z następującym dziennikiem:

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

1
To zadziałało dla mnie. Ręczne utworzenie projektu w C ++ w celu zainstalowania niezbędnych pakietów załatwiło sprawę.
Melaz

5

Miałem te same błędy z CMake. W moim przypadku użyłem niewłaściwej wersji Visual Studio w początkowym oknie dialogowym CMake, w którym musimy wybrać kompilator Visual Studio.

Potem zmieniłem go na „Visual Studio 11 2012” i wszystko działało. (Mam wersję Visual Studio Ultimate 2012 na moim komputerze). Ogólnie spróbuj wprowadzić starszą wersję programu Visual Studio w początkowym oknie dialogowym konfiguracji CMake.


4

U mnie ten problem zniknął w systemie Windows, kiedy przeniosłem projekt do płytszego katalogu nadrzędnego, tj. Do:

C:\Users\spenc\Desktop\MyProjectDirectory

zamiast

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

Myślę, że źródłem problemu było to MSBuild ma ograniczenie długości ścieżki pliku do 260 znaków. Powoduje to, że CMake wykonuje podstawowy test kompilatora, aby skompilować projekt wywoływany CompilerIdCXX.vcxprojniepowodzeniem z błędem:

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

ponieważ długość ścieżki do pliku np

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

przekracza ograniczenie MAX_PATH.

Następnie CMake stwierdza, że ​​nie ma kompilatora CXX.


2

Upewnij się, że wybrano poprawną wersję programu Visual Studio. Jest to trudniejsze, niż się wydaje, ponieważ Visual Studio 2015 to w rzeczywistości Visual Studio 14, a podobnie Visual Studio 2012 to Visual Studio 11. Podczas instalacji 2015 nieprawidłowo wybrałem Visual Studio 15, czyli w rzeczywistości Visual Studio 2017.



1

Możesz także upewnić się, że jesteś użytkownikiem sudo i masz dostęp do odczytu / zapisu w katalogu, w którym pracujesz. Miałem podobny problem na OS X i naprawiłem go po prostu wchodząc w tryb sudo.


1

Na wypadek, gdyby pomogło to komuś takiemu jak ja w przyszłości:

Mam ten problem od 24 godzin na 3 różnych 64-bitowych maszynach (Win7, Windows 8.1 VM i laptop WIn 8.1) - podczas próby zbudowania WebKit z VS 2017.

Prosty problem polega na tym, że kompilator VC ++ (tj. Cl.exe i zależne od niego biblioteki DLL) nie jest widoczny dla CMake. Prosty. Udostępniając foldery VC ++ zawierające te pliki binarne dla CMake i działającego wiersza poleceń (jeśli uruchamiasz Cmake z wiersza poleceń), voila! (Oprócz kluczowych kwestii podniesionych przez innych powyżej)

W każdym razie, po wszelkiego rodzaju poprawkach - jak opublikowano na tych wielu forach - odkryłem, że chodziło PO PROSTU o upewnienie się, że zawartość zmiennej PATH nie jest zaśmiecona wieloma ścieżkami BIN programu Visual Studio itp.; zamiast tego wskazuje na:

a) lokalizacja kompilatora (np. cl.exe dla preferowanej wersji programu Visual Studio), która w moim przypadku (przeznaczona dla platformy 64-bitowej i programowana na hoście 64-bitowym) to: C: \ Program Files (x86 ) \ Microsoft Visual Studio \ 2017 \ Community \ VC \ Tools \ MSVC \ 14.15.26726 \ bin \ Hostx64 \ x64

b) a ponadto folder zawierający zależną bibliotekę DLL o nazwie (od której zależy cl.exe): api-ms-win-crt-runtime-l1-1-0.dll - który na moim komputerze to:

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

Dodanie tych dwóch katalogów do uproszczonej zmiennej CUSTOM Ścieżki systemowej (działającej pod poleceniem uprzywilejowanym przez administratora) wyeliminowało „Nie znaleziono CMAKE_C_COMPILER” i „Nie można znaleźć CMAKE_CXX_COMPILER”. błędy.

Mam nadzieję, że to komuś pomoże.


1

Otrzymuję dokładnie zgłoszony błąd, jeśli pamięć podręczna jest włączona, podczas korzystania z generatora Xcode CMake . Wyłączenie ccache rozwiązało problem. Poniżej przedstawiam poprawkę / sprawdzenie, które działa na MacOS, ale powinno działać podobnie na innych platformach.

Najwyraźniej możliwe jest użycie generatora Xcode CMake (i innych) również w połączeniu z ccache, jak opisano tutaj . Ale sam nigdy tego nie wypróbowałem.

# 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>

1
Udało mi się rozwiązać ten sam problem, upewniając się, że wynik polecenia „xcode-select -p” wskazuje na moją instalację Xcode. W moim przypadku wystarczyła instalacja Xcode i uruchomienie "xcode-select -r".
TomTasche

0

Zaktualizowałem aktualizację 2 programu Visual Studio 2015 do wersji 3 programu Visual Studio 2015 i rozwiązałem problem.


To rozwiązanie było wymagane w moim miejscu pracy po tym, jak wypchnęli aktualizację systemu operacyjnego Windows. Użyłem co najmniej 2 rozwiązań na tej stronie, aby naprawić błąd. Błąd może pojawić się w dowolnej liczbie warunków, dlatego jest kilka różnych, ale wykonalnych odpowiedzi.
Natalie Cottrill,

0

Miałem ten sam problem z cmake-gui ( No CMAKE_CXX_COMPILER could be found.), podczas gdy uruchomienie CMake z wiersza poleceń działało dobrze. Po ręcznym dodaniu wpisów

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

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

do zmiennej środowiskowej PATH, to zadziałało.


0

Dla mnie to działało w użyciu autora wiersza polecenia, które pochodzi z programu Visual Studio, a potem po prostu cdsię your/jcef/diri metęcmake -G "Visual Studio 14 Win64" ..



0

Wiem, że to pytanie dotyczy Visual Studio 2015. Napotkałem ten problem w Visual Studio 2017. Podczas wyszukiwania w Google trafiłem na tę stronę. Po przejrzeniu pierwszych 2,3 odpowiedzi stwierdziłem, że jest to problem z instalacją vc ++. Zainstalowanie obciążenia „Programowanie pulpitu w języku C ++” rozwiązało problem.

Tworzenie desktopów w C ++


0

Zajrzyj do Cmakelists.txt, jeśli znajdziesz ARM, musisz zainstalować C ++ dla ARM

To te pakiety:

C ++ Universal Windows Platform for ARM64 „niewymagane”

Kompilatory Visual C ++ i biblioteki dla ARM „niewymagane”

Kompilatory Visual C ++ i biblioteki dla ARM64 „bardzo prawdopodobne wymagane”

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

Potem problemy

Nie znaleziono CMAKE_C_COMPILER.

Nie znaleziono CMAKE_CXX_COMPILER.

Może zniknąć, chyba że określisz kompilator c, taki jak clang, a może zainstalowanie clang będzie działać na inną korzyść.

Możesz opcjonalnie usunąć w cmakelists.txt zarówno z # przed enable_language, jeśli nie kompilujesz dla ARM.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.