CMake-Fehler bei CMakeLists.txt: 30 (Projekt): Es wurde kein CMAKE_C_COMPILER gefunden

104

Ich versuche, mit CMake eine Visual Studio-Lösung zu erstellen, um die neueste Version von aseprite zu kompilieren, und CMake gibt mir weiterhin Folgendes:

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

Ich habe GCC bereits heruntergeladen und verwende Visual Studio 2015 .

Ich folge diesem Tutorial:

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

Caio Fontes
quelle
Sie können das Projekt entweder für Visual Studio mit seinem Compiler oder für Makefiles mit gcc konfigurieren. Welche Methode haben Sie versucht?
Tsyvarev
Was ist der Befehl cmake, den Sie eingeben?
Bames53
Verwenden Sie den neuesten CMake? Welchen Generator haben Sie verwendet? Haben Sie die Befehle an der Visual Studio 2015-Eingabeaufforderung ausgeführt (daher sind die Compiler-Umgebungsvariablen festgelegt)?
Drescherjm
1
@ bames53 Ich wollte nur zu den entsprechenden Befehlszeilen hinzufügen, damit @Caio Fontes versucht: cmake .. -G "Visual Studio 14 2015"oder cmake .. -G "MSYS Makefiles"(wenn gccMittel MinGW). Und ich habe diese Fragen oft gesehen (wie hier , hier oder hier ) und ich denke, wir vermissen eine kombinierte / Tutorial-Antwort auf SO.
Florian

Antworten:

97

Diese Fehlermeldungen

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

oder

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!

bedeuten nur, dass CMake Ihren C / CXX-Compiler zum Kompilieren eines einfachen Testprogramms nicht finden konnte (eines der ersten Dinge, die CMake beim Erkennen Ihrer Build-Umgebung versucht).

Die Schritte zum Auffinden Ihres Problems hängen von der Build-Umgebung ab, die Sie generieren möchten. Die folgenden Tutorials sind eine Sammlung von Antworten auf Stack Overflow und einige meiner eigenen Erfahrungen mit CMake unter Microsoft Windows 7/8/10 und Ubuntu 14.04.

Voraussetzungen

  • Sie haben den Compiler / die IDE installiert und es konnte einmal jedes andere Programm kompiliert werden (direkt ohne CMake).
  • Sie haben die neueste CMake-Version
  • Sie haben Zugriffsrechte auf dem Laufwerk, auf dem CMake Ihre Build-Umgebung generieren soll
  • Sie haben ein sauberes Build-Verzeichnis (weil CMake die Dinge vom letzten Versuch zwischenspeichert), z. B. als Unterverzeichnis Ihres Quellbaums

    Windows cmd.exe

    > rmdir /s /q VS2015
    > mkdir VS2015
    > cd VS2015
    

    Bash Shell

    $ rm -rf MSYS
    $ mkdir MSYS
    $ cd MSYS
    

    und stellen Sie sicher, dass Ihre Befehlsshell auf Ihr neu erstelltes binäres Ausgabeverzeichnis verweist.

Allgemeine Dinge, die Sie versuchen können / sollten

  1. Kann CMake einen beliebigen Standard-Compiler finden und ausführen? Laufen Sie ohne Generator

    > cmake ..
    -- Building for: Visual Studio 14 2015
    ...
    

    Perfekt, wenn der zu verwendende Generator richtig bestimmt wurde - wie hier Visual Studio 14 2015

  2. Was ist eigentlich gescheitert?

    Suchen Sie im vorherigen Build-Ausgabeverzeichnis nach CMakeFiles\CMakeError.logFehlern, die für Sie sinnvoll sind, oder versuchen Sie, das unter CMakeFiles\[Version]\CompilerIdC| generierte Testprojekt zu öffnen / kompilieren CompilerIdCXXdirekt von der Kommandozeile (wie im Fehlerprotokoll gefunden).

CMake kann Visual Studio nicht finden

  1. Versuchen Sie, die richtige Generatorversion auszuwählen :

    > cmake --help
    > cmake -G "Visual Studio 14 2015" ..
    
  2. Wenn dies nicht hilft, versuchen Sie zuerst, die Visual Studio-Umgebungsvariablen festzulegen (der Pfad kann variieren):

    > "c:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat"
    > cmake ..
    

    oder verwenden Sie die VerknüpfungDeveloper Command Prompt for VS2015 in Ihrem Windows-Startmenü unter All Programs/ Visual Studio 2015/ Visual Studio Tools(danke bei @Antwane für den Hinweis).

Hintergrund : CMake unterstützt alle Visual Studio-Versionen und -Varianten (Express, Community, Professional, Premium, Test, Team, Enterprise, Ultimate usw.). Um den Speicherort des Compilers zu bestimmen, wird eine Kombination aus Durchsuchen der Registrierung (z. B. at HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\[Version];InstallDir), Systemumgebungsvariablen und - falls keiner der anderen etwas gefunden hat - einfach versucht, den Compiler aufzurufen.

CMake kann GCC (MinGW / MSys) nicht finden

  1. Sie starten die MSys- bashShell mit msys.batund versuchen einfach, direkt aufzurufengcc

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

    Hier hat es gefunden gccund beschwert sich, dass ich ihm keine Parameter zum Arbeiten gegeben habe.

    Also sollte folgendes funktionieren:

    $ cmake -G "MSYS Makefiles" ..
    -- The CXX compiler identification is GNU 4.8.1
    ...
    $ make
    

    Wenn GCC nicht gefunden wurde, rufen Sie export PATH=...auf, um den Compilerpfad hinzuzufügen (siehe Festlegen der Umgebungsvariablen PATH im CMake-Skript? ), Und versuchen Sie es erneut.

  2. Wenn es immer noch nicht funktioniert, versuchen Sie, den CXXCompilerpfad direkt durch Exportieren festzulegen (Pfad kann variieren).

    $ 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
    

    Weitere Informationen finden Sie unter Festlegen eines neuen GCC-Pfads für CMake

    Hinweis : Wenn Sie den Generator "MinGW Makefiles" verwenden, müssen Sie das mingw32-makemit MinGW verteilte Programm verwenden

  3. Funktioniert immer noch nicht? Das ist komisch. Stellen Sie sicher, dass der Compiler vorhanden ist und über ausführbare Rechte verfügt (siehe auch Kapitel über die Voraussetzungen oben).

    Andernfalls besteht der letzte Ausweg von CMake darin, keine Compilersuche selbst durchzuführen und die internen Variablen von CMake direkt von festzulegen

    $ cmake -DCMAKE_C_COMPILER=/c/MinGW/bin/gcc.exe -DCMAKE_CXX_COMPILER=/c/MinGW/bin/g++.exe ..

    Weitere Informationen finden Sie unter Cmake berücksichtigt -D CMAKE_CXX_COMPILER = g ++ und den Compiler für die Fehlereinstellung von Cmake nicht

    Alternativ können diese Variablen auch über cmake-gui.exeWindows festgelegt werden. Siehe Cmake kann den Compiler nicht finden

Hintergrund : Ähnlich wie bei Visual Studio. CMake unterstützt alle Arten von GCC-Aromen. Es durchsucht die Umgebungsvariablen (CC, CXX usw.) oder versucht einfach, den Compiler aufzurufen. Darüber hinaus wird es keine Präfixe erkennen (wenn Cross-Kompilierung ) und versucht , es zu allen binutils der GNU Compiler Toolchain hinzufügen ( ar, ranlib, strip, ld, nm, objdump, und objcopy).

Florian
quelle
1
Nur als Heads-up verweisen einige der Links zu cmake-Dokumenten auf eine wirklich alte Version von CMake. Denken Sie daran, die Versionsauswahl zu verwenden, um der Version auf Ihrem Computer zu entsprechen (z. B. wenn Sie keine neuere Plattform sehen, die dies auflistet du brauchst).
jrh
39

Für Ubuntu installieren Sie bitte die folgenden Dinge:

sudo apt-get update && sudo apt-get install build-essential
Vishnu
quelle
21

Dies ist mir passiert, nachdem ich Visual Studio 15 2017 installiert habe.

Der C ++ - Compiler für Visual Studio 14 2015 war nicht das Problem. Es schien ein Problem mit dem Windows 10 SDK zu sein.

Das Hinzufügen der Windows 10-SDKs zu Visual Studio 14 2015 hat das Problem für mich gelöst.

Siehe beigefügten Screenshot.

Geben Sie hier die Bildbeschreibung ein

Wim Vanhenden
quelle
13

Dieser Fehler trat auch bei der Arbeit mit CMake auf:

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

Das Warnfeld im MSDN-Bibliotheksartikel Visual C ++ in Visual Studio 2015 gab mir die Hilfe, die ich brauchte.

In Visual Studio 2015 ist C ++ nicht standardmäßig installiert. Wenn Sie also ein neues C ++ - Projekt erstellen, werden Sie aufgefordert, die erforderlichen C ++ - Komponenten herunterzuladen.

Natalie Cottrill
quelle
8

Dies funktioniert für mich in Ubuntu 17.10 (Artful Aardvark):

apt-get update
apt-get install build-essential
purval_patel
quelle
5

Ich bin auf dieses Problem gestoßen, als ich libgit2-0.23.4 erstellt habe. Für mich war das Problem, dass der C ++ - Compiler und verwandte Pakete nicht mit VS2015 installiert wurden, daher fehlte die Datei "C: \ Programme (x86) \ Microsoft Visual Studio 14.0 \ VC \ vcvarsall.bat" und Cmake konnte sie nicht finden der Compiler.

Ich habe versucht, ein C ++ - Projekt manuell in der Visual Studio 2015-Benutzeroberfläche ( C: \ Programme (x86) \ Microsoft Visual Studio 14.0 \ Common7 \ IDE \ devenv.exe ) zu erstellen, und beim Erstellen des Projekts wurde ich aufgefordert, C ++ herunterzuladen & verwandte Pakete.

Nach dem Herunterladen der erforderlichen Pakete konnte ich sehen, dass vcvarsall.bat & Cmake den Compiler finden konnte und erfolgreich mit folgendem Protokoll ausgeführt wurde:

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
Aksh1801
quelle
1
Das hat bei mir funktioniert. Das manuelle Erstellen eines C ++ - Projekts zur Installation der erforderlichen Pakete hat den Trick getan.
Melaz
5

Ich hatte die gleichen Fehler mit CMake. In meinem Fall habe ich im ersten CMake-Dialogfeld, in dem wir den Visual Studio-Compiler auswählen müssen, die falsche Visual Studio-Version verwendet.

Dann habe ich es in "Visual Studio 11 2012" geändert und es hat funktioniert. (Ich habe Visual Studio Ultimate 2012 Version auf meinem PC). Versuchen Sie im Allgemeinen, eine ältere Version der Visual Studio-Version im anfänglichen CMake-Konfigurationsdialog einzugeben.

TSac
quelle
4

Für mich verschwand dieses Problem unter Windows, als ich mein Projekt in ein flacheres übergeordnetes Verzeichnis verschob, dh in:

C:\Users\spenc\Desktop\MyProjectDirectory

anstatt

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

Ich denke, die Ursache des Problems war, dass MSBuild eine Beschränkung der Dateipfadlänge auf 260 Zeichen hat. Dies führt dazu, dass der grundlegende Compilertest, den CMake durchführt, ein Projekt erstellt CompilerIdCXX.vcxproj, das mit dem folgenden Fehler fehlschlägt:

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

weil die Länge des Dateipfads z

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

überschreitet die MAX_PATH-Einschränkung.

CMake kommt dann zu dem Schluss, dass es keinen CXX-Compiler gibt.

spenceryue
quelle
2

Stellen Sie sicher, dass Sie die richtige Version von Visual Studio ausgewählt haben. Dies ist schwieriger als es scheint, da Visual Studio 2015 tatsächlich Visual Studio 14 ist und Visual Studio 2012 auch Visual Studio 11. Ich hatte Visual Studio 15, das tatsächlich Visual Studio 2017 ist, falsch ausgewählt, als ich 2015 installiert hatte.

Aryaman Gupta
quelle
1

Keine der hier aufgeführten Lösungen löst mein Problem - nur wenn ich Windows Update für die universelle C-Laufzeit installiere.

Jetzt funktioniert CMake und es hängt kein Link mehr von Visual Studio.

Update für Universal C Runtime unter Windows

Meir Gerenstadt
quelle
1

Sie können auch sicherstellen, dass Sie der Sudo-Benutzer sind und READ / WRITE-Zugriff auf das Verzeichnis haben, in dem Sie arbeiten. Ich hatte ein ähnliches Problem unter OS X und habe es behoben, indem ich einfach in den Sudo-Modus gegangen bin.

Daniel Rubambura
quelle
1

Nur für den Fall, dass es jemandem wie mir in Zukunft hilft:

Ich habe dieses Problem seit 24 Stunden auf 3 verschiedenen 64-Bit-Computern (Win7, Windows 8.1 VM und WIn 8.1-Laptop) - beim Versuch, WebKit mit VS 2017 zu erstellen.

Das einfache Problem hierbei ist, dass der VC ++ - Compiler (dh cl.exe und seine abhängigen DLLs) für CMake nicht sichtbar ist. Einfach. Indem Sie die VC ++ - Ordner mit diesen Binärdateien für CMake und Ihre funktionierende Eingabeaufforderung sichtbar machen (wenn Sie Cmake über eine Eingabeaufforderung ausführen), können Sie voila! (Zusätzlich zu den wichtigsten Punkten, die von anderen oben angesprochen wurden)

Wie auch immer, nach allen Arten von Korrekturen - wie in diesen vielen Foren veröffentlicht - stellte ich fest, dass es EINFACH darum ging, sicherzustellen, dass der Inhalt der PATH-Variablen nicht mit mehreren Visual Studio-BIN-Pfaden usw. überfüllt ist. und verweist stattdessen auf:

a) Der Speicherort Ihres Compilers (dh cl.exe für Ihre bevorzugte Version von Visual Studio), der in meinem Fall (auf eine 64-Bit-Plattform ausgerichtet und auf einem 64-Bit-Host entwickelt) wie folgt lautet: C: \ Programme (x86) ) \ Microsoft Visual Studio \ 2017 \ Community \ VC \ Tools \ MSVC \ 14.15.26726 \ bin \ Hostx64 \ x64

b) und zusätzlich den Ordner mit einer abhängigen DLL namens (von der cl.exe abhängig ist): api-ms-win-crt-runtime-l1-1-0.dll - was auf meinem Computer ist:

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

Diese beiden Verzeichnisse, die einer vereinfachten und CUSTOM-Systempfadvariablen hinzugefügt wurden (die unter einer von Admin privilegierten Eingabeaufforderung arbeiten), beseitigten mein "Kein CMAKE_C_COMPILER konnte gefunden werden" und "Kein CMAKE_CXX_COMPILER konnte gefunden werden". Fehler.

Hoffe es hilft jemandem.

GreatCentralSun
quelle
1

Ich erhalte genau den gemeldeten Fehler, wenn ccache aktiviert ist, wenn ich den Xcode-Generator von CMake verwende . Das Deaktivieren von ccache hat das Problem für mich behoben. Im Folgenden stelle ich einen Fix / Check vor, der für MacOS funktioniert, aber auf anderen Plattformen ähnlich funktionieren sollte.

Offenbar ist es möglich , CMake Xcode Generator (und andere) auch in Kombination mit ccache zu verwenden, wie beschrieben hier . Aber ich habe es nie selbst ausprobiert.

# 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>
normanius
quelle
1
Ich konnte das gleiche Problem beheben, indem ich sicherstellte, dass die Ausgabe von "xcode-select -p" auf meine Xcode-Installation verweist. In meinem Fall war es ausreichend, Xcode zu installieren und "xcode-select -r" auszuführen.
TomTasche
0

Ich habe Visual Studio 2015 Update 2 auf Visual Studio 2015 Update 3 aktualisiert und mein Problem behoben.

TripleS
quelle
Diese Lösung wurde an meinem Arbeitsplatz benötigt, nachdem ein Windows-Betriebssystem-Update veröffentlicht wurde. Ich habe mindestens 2 der Lösungen auf dieser Seite verwendet, um den Fehler zu beheben. Der Fehler kann unter einer beliebigen Anzahl von Bedingungen auftreten. Aus diesem Grund gibt es mehrere unterschiedliche, aber praktikable Antworten.
Natalie Cottrill
0

Ich hatte das gleiche Problem mit cmake-gui ( No CMAKE_CXX_COMPILER could be found.), während das Ausführen von CMake über die Befehlszeile einwandfrei funktionierte. Nach dem manuellen Hinzufügen der Einträge

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

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

Für die Umgebungsvariable PATH hat es bei mir funktioniert.

Helmken
quelle
0

Für mich hat es funktioniert, die mit Visual Studio gelieferte Developer Command Prompt zu verwenden und dann einfach cdzu your/jcef/dirstartencmake -G "Visual Studio 14 Win64" ..

Marc Dirven
quelle
0

Ich hatte das gleiche Problem.

Ich habe versucht, dlib auf meinem Computer zu installieren, und es gab mir diesen Fehler. Das in der Frage erwähnte Tutorial führt zum Herunterladen von Visual Studio 2017. Ich habe dieses Problem gelöst, indem ich VS 2017 deinstalliert und VS 2015 installiert habe

Sie können VS 2015 über diesen Stackoverflow-Thread installieren: So laden Sie Visual Studio Community Edition 2015 herunter (nicht 2017)

Aprajita Verma
quelle
0

Ich weiß, dass es sich bei dieser Frage um Visual Studio 2015 handelt. Ich habe dieses Problem mit Visual Studio 2017 festgestellt. Bei der Suche auf Google bin ich auf diese Seite gelangt. Nachdem ich mir die ersten 2,3 Antworten angesehen hatte, stellte ich fest, dass dies das Problem bei der Installation von vc ++ ist. Durch die Installation der Workload "Desktop-Entwicklung mit C ++" wurde das Problem behoben.

Desktop-Entwicklung mit c ++

Asad
quelle
0

Suchen Sie in der Datei Cmakelists.txt nach ARM, um C ++ für ARM zu installieren

Es sind diese Pakete:

C ++ Universal Windows Platform für ARM64 "Nicht erforderlich"

Visual C ++ - Compiler und -Bibliotheken für ARM "Nicht erforderlich"

Visual C ++ - Compiler und -Bibliotheken für ARM64 "Sehr wahrscheinlich erforderlich"

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

Dann die Probleme

Es wurde kein CMAKE_C_COMPILER gefunden.

Es wurde kein CMAKE_CXX_COMPILER gefunden.

Kann verschwinden, es sei denn, Sie geben einen c-Compiler wie clang an, und möglicherweise funktioniert die Installation von clang zu einem anderen Vorteil.

Sie können optional in cmakelists.txt beide mit # vor enable_language entfernen, wenn Sie nicht für ARM kompilieren.

Dealazer
quelle