CMake nie znajduje kompilatora Visual C ++

118

Po zainstalowaniu programu Visual Studio 2015 i uruchomieniu CMake w poprzednim projekcie CMake wystąpił błąd informujący, że nie mógł znaleźć kompilatora C.

The C compiler identification is unknown
The CXX compiler identification is unknown
CMake Error at CMakeLists.txt:4 (PROJECT):
  No CMAKE_C_COMPILER could be found.

CMake Error at CMakeLists.txt:4 (PROJECT):
  No CMAKE_CXX_COMPILER could be found.

Szukałem cl.exew folderze Visual Studio C:\Program Files\Microsoft Visual Studio 14.0i nie mogłem go znaleźć.

Jak skonfigurować CMake do pracy w systemie Windows z programem Visual Studio 2015?

Asher
źródło
1
Może ścieżka instalacji z 2015 roku nie jest tym, czego oczekuje CMake? Z której wersji CMake korzystasz? Nie wiem również o wersji CMake dla systemu Windows, ale może się zdarzyć, że CMake szuka PATHprogramu, którego potrzebuje, więc jeśli nie jest zaktualizowany, nie może znaleźć kompilatora.
Jakiś programista,
1
Używam cmake w wersji 3.2.3, która twierdzi, że obsługuje program Visual Studio 2015
Asher
1
Użyj wersji 3.2.x, napotkałem ten problem podczas instalacji Cmake przed VS2015, więc zainstaluj ponownie cmake, napraw to dla mnie
Andiana
Czasami po prostu zapominasz o ponownym uruchomieniu komputera lub nie chcesz tego robić po instalacji lub aktualizacji programu Visual Studio. W takim przypadku CMake nie znajdzie kompilatora.
Noki,

Odpowiedzi:

124

Znalazłem rozwiązanie. Mimo pomyślnego zainstalowania środowiska IDE programu Visual Studio nie zainstalowano żadnych narzędzi do kompilacji i dlatego nie zainstalowano kompilatora C ++.

Próbując ręcznie utworzyć projekt C ++ w GUI Visual Studio 2015 , mogłem skłonić go do pobrania pakietów C ++. CMake był wtedy w stanie znaleźć kompilator bez żadnych trudności.

Asher
źródło
2
Fajnie, ta odpowiedź dała mi wskazówkę. Używam mojego VS2015 ISO do zainstalowania komponentów C ++ i rozwiązałem problem.
Peter Liang
Zainstalowałem również przy użyciu VS2015 ISO i zainstalowałem tylko podstawowe części vb / c #. Musiałem ponownie uruchomić ISO, aby zmodyfikować i zainstalować inne rzeczy C ++.
Abhinav Gauniyal,
2
Jakie dokładnie pakiety / komponenty / rzeczy zainstalowaliście? Stworzyłem Visual C ++ / Win32Project i zainstalowałem dwa komponenty i uruchomiłem OK w VS, ale cmake nadal narzekał jak poprzednio. Dzięki. -S
ssimm
To bardzo miłe!
user2434741
2
To zadziałało również w porównaniu z 2017 - co za dziwna rzecz! Dzięki za wskazówkę kolego!
Steve Horvath
36

Oto rozwiązanie, które zadziałało dla mnie:

  1. Otwórz narzędzie wiersza polecenia programu Visual Studio (jako administrator). W systemie Windows 10 może się nazywać „Wiersz polecenia programisty”.
  2. Przejdź do miejsca, w którym znajduje się plik wykonywalny CMake
  3. Uruchom Cmake.exe
  4. Postępuj jak zwykle, aby wybrać kompilację i folder źródłowy
  5. Wybierz odpowiedni kompilator programu Visual Studio i naciśnij przycisk Konfiguruj

Miejmy nadzieję, że powinno działać bez problemów.

Fortuna
źródło
3
Nie sądzę, że musisz uruchamiać wiersz polecenia VS jako administrator. Ale uruchomienie polecenia VS powoduje umieszczenie na ścieżce wszystkiego, czego szuka cmake. W zależności od tego, jak zainstalowałeś CMake (czy umieściłeś go na ścieżce), możesz również przejść do katalogu kompilacji i cmake ..stamtąd uruchomić . Mimo to głosowano za, ponieważ na przykład terminal git-bash nie umieszcza automatycznie wszystkiego na swojej drodze. To mi pomogło!
hetepeperfan
1
Wydaje się, że jest to bardziej obejściem niż rozwiązaniem, ponieważ zwykle generatory IDE nie potrzebują różnych zmiennych środowiskowych, które znajdują się w zestawie monitów poleceń dev (potrzebujesz tego tylko, jeśli używasz generatora makefile lub podobnego, takiego jako Ninja)
Ryan Pavlik
2
aktualizacja: w systemie Windows 10 nazywa się to wiersz polecenia dewelopera
Mattijs
2
Bardzo dziwne wyjaśnienie: 1: To nie nazywa się wiersz poleceń VS Studio 2: „nawiguj”, masz na myśli użycie polecenia „cd”? 3: Masz na myśli, uruchom cmake-gui? Jak powiesz w kroku 5, aby „kliknąć” przycisk 4: Kontynuuj? masz na myśli wypełnienie? 5: Z rozwijanej listy w oknie konfiguracyjnym, mogę wybrać kompilator VS, ale wciąż C & C ++ kompilatory są nieznane ...
Drumm
1
Przy okazji, po prostu wpisz w wyszukiwarce cmake, a znajdziesz cmake-gui
DrumM
31

Zajrzałem do pliku CMakeError.log i znalazłem błąd dotyczący cannot run 'rc.exe'

Przeszukałem i znalazłem tę odpowiedź, aby skopiować RC.Exe i RcDll.Dll z bin Microsoft SDKs do bin VC, a następnie CMake działał.


Edycja: Najlepsza odpowiedź na inne pytanie sugeruje, że jest to problem ze ŚCIEŻKĄ, więc może wystarczyć, aby upewnić się, że bin SDK firmy Microsoft znajduje się w PATH.

Carl Walsh
źródło
15

Upewnij się, że w generatorze używasz poprawnej wersji programu Visual Studio. Podczas instalacji programu Visual Studio 14 nieprawidłowo wybrałem program Visual Studio 15.

Hrushikesh Kulkarni
źródło
3
To też był mój problem. Jest to mylące, ponieważ Visual Studios 2015 to wersja 14!
Paul Wintz
4
Pamiętaj, że może być konieczne usunięcie pamięci podręcznej w celu zmiany wersji VS. Aby to zrobić, kliknij Plik> Usuń pamięć podręczną.
Paul Wintz
To pomogło ... wersjonowanie w najlepszym wydaniu!
Noel Widmer
arrrrg, @PaulWintz dziękuję za to przypomnienie. Myślę, że w moim przypadku uruchomiłem cmake z czystą pamięcią podręczną cmake, ale podczas gdy VisualStudio czekało na ponowne uruchomienie komputera w celu ukończenia aktualizacji VS, a następnie cmake sprytnie zapisał w pamięci podręcznej złą sytuację.
orion elenzil
13

Ci, którzy potykają się z tym w programie Visual Studio 2017: istnieje funkcja związana z CMake, którą należy wybrać i zainstalować wraz z odpowiednimi zestawami narzędzi kompilatora. Zobacz zrzut ekranu poniżej.

Muszą być zainstalowane narzędzia Visaul C ++ dla CMake

Vadim Berman
źródło
A co z wersją 2015? Nie mogłem znaleźć tego pola wyboru w instalacji 2015. Jednym z rozwiązań mogłaby być aktualizacja do 2017 ...
DrumM
1
@DrumM, to jest przeznaczone specjalnie dla programu Visual Studio 2017. Nie wierzę, że ta funkcja istnieje w VS 2015.
Vadim Berman
Czy na pewno jest to konieczne? Czy to nie tylko do używania CMake z poziomu programu Visual Studio?
Peter Mortensen
@PeterMortensen: rozwiązało problem za mnie. Ponownie, Visual Studio 2017.
Vadim Berman
9

Jeśli żadne z powyższych rozwiązań nie zadziałało, zatrzymaj się i przeprowadź kontrolę poczytalności.

Zostałem spalony przy użyciu niewłaściwego -G <config>sznurka i dał mi ten błąd.

Najpierw uruchom z wiersza polecenia VS, a nie zwykłego wiersza polecenia. Możesz go znaleźć w Start Menu -> Visual Studio 2015 -> MSBuild Command Prompt for VS2015To ustawia wszystkie prawidłowe ścieżki do narzędzi VS, itp.

Teraz zobacz, jakie generatory są dostępne w cmake ...

cmake -help

...<snip>... The following generators are available on this platform: Visual Studio 15 [arch] = Generates Visual Studio 15 project files. Optional [arch] can be "Win64" or "ARM". Visual Studio 14 2015 [arch] = Generates Visual Studio 2015 project files. Optional [arch] can be "Win64" or "ARM". Visual Studio 12 2013 [arch] = Generates Visual Studio 2013 project files. Optional [arch] can be "Win64" or "ARM". Visual Studio 11 2012 [arch] = Generates Visual Studio 2012 project files. Optional [arch] can be "Win64" or "ARM". Visual Studio 10 2010 [arch] = Generates Visual Studio 2010 project files. Optional [arch] can be "Win64" or "IA64". ...

Następnie wybierz odpowiedni ciąg z dodanym [arch].

mkdir _build cd _build cmake .. -G "Visual Studio 15 Win64"

Uruchomienie cmake w podkatalogu ułatwia „wyczyszczenie”, ponieważ można po prostu usunąć wszystko w tym katalogu.

Uaktualniłem do Visual Studio 15, ale nie zwracałem uwagi i próbowałem wygenerować na 2012 rok.

TrophyGeek
źródło
7

U mnie sprawdziłem CMakeError.logplik i znalazłem:

Błąd [...] MSB8036: Nie znaleziono zestawu Windows SDK w wersji 8.1. Zainstaluj wymaganą wersję zestawu Windows SDK lub zmień wersję zestawu SDK na stronach właściwości projektu lub klikając prawym przyciskiem myszy rozwiązanie i wybierając opcję „Ponownie kieruj rozwiązanie”.

Dzieje się tak pomimo używania programu Visual Studio 2017 w systemie Windows 7. Wygląda więc na to, że CMake próbuje zbudować swój projekt wykrywania za pomocą zestawu SDK systemu Windows 8.1.

Użyłem instalatora Visual Studio, aby dodać ten składnik, a teraz CMake jest szczęśliwy jak małżonek.

chowey
źródło
4

Menu → Visual Studio 2015 → MSBuild Command Prompt for Visual Studio 2015. Następnie CMake może znaleźć cl.exe.

set PATH="c:\Program Files (x86)\Windows Kits\10\bin\10.0.16299.0\x64\";%PATH%

Zmień górną ścieżkę do miejsca, w którym jest zainstalowany zestaw Windows SDK.

CMake może znaleźć rc.exe.

cd do ścieżki CMakeLists.txti wykonaj:

md .build
cd .build
cmake .. -G "Visual Studio 14 2015 Win64" -DCMAKE_BUILD_TYPE=Release
cmake --build .

Parametr po -Gpowinien zostać pobrany przez CMake. Użyj --help; możesz mieć generator lub nie.

Alen Wesker
źródło
Po zainstalowaniu msvc 2015 i 2017 i próbie kompilacji za pomocą msvc 2015 automatycznie wykryje zestaw SDK 10.0 podczas uruchamiania wiersza polecenia vs2015. Możesz określić wersję zestawu SDK, modyfikując „Wiersz polecenia narzędzi natywnych VS2015 x64”, aby wymusić zestaw SDK w wersji 8.1, dodając na końcu parametru wiersza polecenia w następujący sposób; "% comspec% / k" "C: \ Program Files (x86) \ msdev2015 \ VC \ vcvarsall.bat" "amd64 8.1"
kalmiya
Czy muszę oddzielnie instalować „Wiersz polecenia programu MSBuild dla programu Visual Studio 2015”? Zainstalowałem msvc 2017, ale nie ma wiersza poleceń dla programu Visual Studio.
meen
2

Napotkałem ten sam problem i naprawiłem go, ponownie uruchamiając instalację programu Visual Studio i sprawdzając następującą opcję:

Windows and Web Development/ Universal Windows App Development Tools/Windows 10 SDK

Zawiera standardowe nagłówki C ++ używane w większości aplikacji i dlatego często konieczne jest również jego zainstalowanie.

Philippe Ferdinand
źródło
2

Miałem ten problem pod Windows 10 podczas korzystania z Visual Studio 2015 Professional, podczas gdy Visual Studio 2015 Express działało! W systemie Windows 7 działały obie wersje programu Visual Studio.

Nowe projekty utworzone z Visual Studio 2015 Professional IDE pomyślnie kompilują się, ale CMake nie może znaleźć raportowania kompilatora:

The C compiler identification is unknown
The CXX compiler identification is unknown

Zaktualizowałem CMake z 3.4.1 do 3.11.4 i teraz problem zniknął.

jpo38
źródło
1

Jeśli korzystasz z programu Visual Studio 2017, potrzebujesz co najmniej CMake 3.8!

Lars Bilke
źródło
1

Podobny problem miałem z projektem Visual Studio 2017 wygenerowanym przez CMake. Brakowało niektórych pakietów podczas instalowania programu Visual Studio w programie Desktop w języku C ++. Zobacz migawkę:

Pakiety programu Visual Studio 2017:

Pakiety Visual Studio 2017

Zaktualizuj CMake do najnowszej wersji.

vinodsaluja
źródło
0

W moim przypadku była ustawiona zmienna środowiskowa, która była przyczyną tego błędu. Problem został rozwiązany po usunięciu cxx_flags ze zmiennych środowiskowych.

Starger
źródło
0

Mam ten problem z CMake 3.12.1 po aktualizacji Visual Studio 2017. Po prostu ponownie uruchomiłem CMake i zadziałało.

0xF
źródło
0

W moim przypadku widziałem, CMakeError.logże CMake nie może znaleźć zestawu Windows SDK ( MSB8003: Could not find WindowsSDKDir variable from the registry).

Wersję można określić w wierszu polecenia przy pierwszym uruchomieniu CMake za pomocą:

-DCMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION=

Po ustawieniu tego poszedłem dalej, ale później napotkałem więcej problemów (więc zakładam, że moje środowisko jest w jakiś sposób pomieszane), ale może to pomoże komuś z tym problemem.

Zitrax
źródło
0

Kilka wskazówek:

  • Spróbuj ustawić ścieżkę ręcznie, zaznaczając „zaawansowane” i modyfikując CMAKE_LINKER i CMAKE_MAKE_PROGRAM
  • Usuń pamięć podręczną - w CMake z GUI przejdź do: Plik → Usuń pamięć podręczną.

Mój problem był kombinacją wcześniej stwierdzonych: Ustawiłem wersję kompilatora na 15 zamiast 14 i po poprawieniu musiałem usunąć pamięć podręczną.

Jako administrator uruchomiłem również wiersz poleceń programu Visual Studio i stamtąd uruchomiłem cmake-gui.exe

Wtedy wszystko działało tak, jak powinno.

Rarach
źródło
0

W moim przypadku problem polegał na tym, że projekt nadrzędny, który zawiera googletest via

add_subdirectory(gtest_dir)

został zdefiniowany jako

PROJECT( projname CXX )

W jakiś sposób CMake nie rozpoznaje

PROJECT(sub_project_name CXX C)

ponieważ kompilator C nie jest ustawiony w rodzicu.

Rozwiązałem problem za pomocą

PROJECT( projname CXX C)

w moim głównym CMakeLists.txtpliku.

mojovski
źródło
0

Żadne z poprzednich rozwiązań nie zadziałało. Jednak zauważyłem, że chociaż zainstalowałem Visual Studio w wersji 15 (nie mylić z Visual Studio 2015), katalog utworzony na moim komputerze był przeznaczony dla Visual Studio 14.

Kiedy określiłem Visual Studio 14, po naciśnięciu przycisku konfiguracji zadziałało.

Gamaliel
źródło
Numeracja wersji programu Visual Studio jest po prostu ... nieparzysta. Visual Studio 14 to w rzeczywistości Visual Studio 2015, nie ma Visual Studio 2014. Zobacz odpowiedź
trophygeek
0

Znalazłem to rozwiązanie w stackoverflow i pracuję dla mnie, chociaż nie działają inne rozwiązania, jeśli masz system operacyjny Windows 10, wykonanie następujących kroków rozwiąże problem:

1) przejdź do C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v7.1A \ Bin

2) następnie skopiuj RC.exe i RcDll z tego pliku

3) przejdź do C: \ Program Files (x86) \ Microsoft Visual Studio 14.0 \ VC \ bin i wklej do niego dwa skopiowane pliki.

to wszystko, mam nadzieję, że to pomoże ...

sprytny tygrys
źródło
0

Poszukaj w Cmakelists.txt, jeśli znajdziesz ARM, musisz zainstalować C ++ dla ARM, a także vcvarsall.bat użyć dla folderu bin 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)

Wtedy problemy mogą zniknąć:

Nie znaleziono CMAKE_C_COMPILER.

Nie znaleziono CMAKE_CXX_COMPILER.

Jeśli powyższe nie rozwiąże Twojego problemu?

Opcjonalnie możesz usunąć opcje C i CXX w cmakelists.txt, ustawiając # infront miejsca, w którym znajduje się enable_language (C). I unikaj kompilacji procesora Android ARM.

Dealazer
źródło
0

Rozwiązanie rozwiązane przez dodanie brakującego komponentu Modyfikuj-> kontynuuj dodawanie w następujący sposób Naprawić

ABDULRAHMAN ALKHAMEES
źródło
Nie zaleca się odpowiedzi obejmującej tylko łącze.
Ṃųỻịgǻňạcểơửṩ
0

Miałem podobny problem: generatorów Visual C ++ nie było nawet na liście podczas pracy cmake --help.

Uruchomiłem where cmakew konsoli i odkryłem, że cygwin udostępnia również swój własny plik cmake.exe , który był używany. Zmiana kolejności katalogów w PATH rozwiązała problem.

stgatilov
źródło
0

Sprawdzanie CMakeErrors.log w CMakeFiles zwróciło:

C: \ Program Files (x86) \ MSBuild \ Microsoft.Cpp \ v4.0 \ V140 \ Platforms \ x64 \ PlatformToolsets \ v140_xp \ Toolset.targets (36,5): ostrzeżenie MSB8003: Nie można znaleźć zmiennej WindowsSdkDir_71A w rejestrze. Element TargetFrameworkVersion lub PlatformToolset może mieć ustawiony nieprawidłowy numer wersji.

Błąd oznacza, że ​​narzędzia do budowania dla XP (v140_xp) nie są zainstalowane. Aby to naprawić, zainstalowałem odpowiednią funkcję w instalatorze programu Visual Studio 2019 w zakładce poszczególne składniki:

wprowadź opis obrazu tutaj

Nathan Moinvaziri
źródło
0

Miałem ten problem z GUI CMake i VS 21019 Community Edition. Myślę, że mogłem zainstalować CMake przed Visual Studio - z pewnością po zaktualizowaniu CMake 3.15.2 do 3.15.3 problem zniknął.

Mike Pelton
źródło
0

Sprawdź, czy folder z nazwą jest za długi, czy nie.

user1633912
źródło
-3

Ponieważ CMake nie może znaleźć kompilatora programu Visual Studio. Uruchom dowolny projekt, który pobierze wymagane kompilatory, a CMake musi być w stanie go wtedy znaleźć.

Kushal
źródło