Bauen mit CMake, Ninja und Clang unter Windows

9

Sehr geehrte Kollegen, C ++ - Programmierer,

Nachdem ich die Visual Studio Toolchain für eine Weile auf Windows verwendet habe, habe ich beschlossen, Clang 5 eine Chance zu geben.

Ich habe die LLVM 5.0.0 Binaries, die Ninja Build-Umgebung, die VS 2017 Tools und CMake 3.9.3 installiert. Das letzte Ziel ist es, C- und C ++ - Anwendungen für Windows mit VS-Code mit der CMake-Integration als "IDE" und Clang mit LLD als Compiler und Linker kompilieren zu können.

Die Kompilierung und Ausführung eines einfachen Programms funktionierte einwandfrei ( Screenshot des jeweiligen Terminalverlaufs ). Clang hat automatisch die Standardbibliothek für Windows in den VS Tools-Verzeichnissen erkannt und eine ausführbare Ausgabe erstellt.

Der nächste Schritt war das Erstellen eines einfachen Builds mit Ninja ( Screenshot der Datei ninja.build und des Terminalverlaufs ) ). Der Build-Prozess funktionierte wie erwartet und erzeugte eine funktionierende ausführbare Datei, genau wie zuvor.

Die Probleme begannen, als ich anfing CMake in den Prozess zu integrieren. Meine Erwartung ist, dass CMake eine Ninja-Build-Datei erstellt und sie ausführt, richtig? Ich habe die folgende CMakeLists-Datei

ausprobiert %Vor%

und aufgerufen CMake mit cmake -G Ninja . Die resultierende Ausgabe war enttäuschend und ich verstehe nicht genug, um das Problem selbst zu lösen bzw. zu lösen.

%Vor%

Ich nehme an, dass das Problem damit zusammenhängt, dass CMake calling mit VS-Style-Optionen aufruft, die einen Schrägstrich anstelle eines Minuszeichens verwenden, wie es der Clam erfordert.

Danke, dass ihr mir geholfen habt, Leute, ich weiß es zu schätzen: -)

Bitte hinterlassen Sie mir einen Kommentar, wenn Sie weitere Informationen benötigen.

Antwort auf Florians Beitrag

Ich habe versucht Florians Befehl, aber den Weg zu Ninja für eine kürzere Schreibweise weggelassen und es erwies sich als gut funktionieren.

%Vor%

CMake hat eine Ninja-Build-Datei erstellt.

Ich habe ninja all ausgeführt, um die ausführbare Datei als Test zu erstellen. Ich habe ihn in Test.exe umbenannt und das Programm wurde glücklich ausgeführt. Bis jetzt ... Erfolg !!! Aber viel komplizierter als ich erwartet hatte.

    
Simon 03.10.2017, 21:07
quelle

3 Antworten

1

Ich habe endlich einen Weg gefunden, meine bevorzugten Werkzeuge so einzusetzen, wie es mir gefällt. Es ist nicht perfekt, aber es funktioniert besser als Florians Ansatz mit dem Systemnamen auf Generic (was ich schon seit einiger Zeit verwende)

Ich habe zuerst VS-Code eingerichtet, um das VS-Entwicklerterminal als Standardterminal zu verwenden. Ich habe dies getan, indem ich die folgende Zeile zu den VS-Code-Einstellungen hinzugefügt habe

"terminal.integrated.shell.windows": "C:\MeineProgramme\Visual_Studio\2017\BuildTools\Common7\Tools\LaunchDevCmd.bat"

Nachdem ich das Terminal innerhalb von VS Code gestartet habe, muss ich die entsprechende Batch-Datei aufrufen, die die benötigten Umgebungsvariablen setzt (in meinem Fall vcvars64.bat ). Diese finden Sie in

C:\MeineProgramme\Visual_Studio17\BuildTools\VC\Auxiliary\Build

Nachdem ich zu meinem Build-Verzeichnis navigiert habe, starte ich CMake mit den folgenden Optionen

cmake .. -G Ninja -DCMAKE_CXX_COMPILER:PATH="C:\MeineProgramme\LLVM\bin\clang-cl.exe" -DCMAKE_LINKER:PATH="C:\MeineProgramme\LLVM\bin\lld-link.exe"

Dies ermutigt CMake, alle meine installierten LLVM-Tools zu verwenden. Nicht nur clang und lld (stellen Sie sicher, lld-link zu verwenden, das die Optionen unterstützt, die von / angeführt werden), sondern auch llvm-ar und llvm-ranlib . Das einzige MS Build Tool ist der Resource Compiler, den ich momentan nicht benutze.

Bisher Erfolg, denke ich.

Zögern Sie nicht, mich zu kontaktieren oder kommentieren Sie unten, wenn Sie weitere Fragen haben.

    
Simon 23.11.2017, 23:43
quelle
2

Inspiriert von den "Möglichkeiten zum Kompilieren mit Clang unter Windows" > Blogpost von @Unspongeful und nach einigen ausführlichen Tests funktionierte die folgende Befehlszeile für mich (und ja, es ist ein großer Befehl, den ich zur besseren Lesbarkeit einfach in mehrere Zeilen aufgeteilt habe):

%Vor%

Hier einige Hintergrundinformationen:

Im Moment scheint es, als müssten Sie viele automatische Checks von CMake umgehen, damit es funktioniert. Informieren Sie sich wahrscheinlich beim CMake-Team oder melden Sie ein Problem , um dieses Szenario offiziell zu unterstützen.

Und der letzte Teil mit einem Generic System ist wahrscheinlich nicht die beste Wahl, weil Windows spezifische Einstellungen wie das .exe Suffix übersprungen werden.

Aber es war die einzige Konstellation, die tatsächlich funktionierte:

%Vor%     
Florian 05.10.2017 19:21
quelle
0

Ich stieß auf ähnliche Probleme, wenn ich versuchte, clang cmake und msvc 2017 zusammen zu verwenden. Zumindest für ein sehr einfaches Testprojekt war ich in der Lage, alles in Gang zu bringen, aber ich bin ziemlich neu in diesem Bereich, also wird meine Lösung vielleicht nicht Ihre Probleme lösen.

Wie auch immer. Soweit ich weiß, sollten Sie clang-cl.exe anstatt clang.exe mit VS verwenden. Jedoch ist das Erstellen in x86-Konfigurationen immer noch fehlgeschlagen, da einige Linker-Probleme bezüglich x86- und x64-Bibliothek-Inkompatibilitäten aufgetreten sind.

Also hier ist meine Lösung, um beide, x64 und x86-Konfigurationen, in VS 2017 zu bauen.

  1. Laden Sie BEIDE Windows-Clang / llvm-Installationsprogramme von Ссылка herunter und installieren Sie sie. Sie müssen sie nicht zum Pfad hinzufügen, da wir den Pfad später explizit angeben.
  2. Erstellen Sie einen Ordner mit CMakeLists.txt und öffnen Sie diesen in VS über den Dialog Open Folder .
  3. Wählen Sie im Menü CMake Change CMake Settings > CMakeLists.txt . Dies erzeugt ein CMakeSettings.json mit Einstellungen für alle Build-Konfigurationen.
  4. Geben Sie die Pfade der x64 / x86-cmake-Compiler in cmakeCommandArgs für alle Konfigurationen an. Meins sieht so aus:

    %Vor%

    }

Nun sollten Sie in der Lage sein, sowohl x64- als auch x86-Konfigurationen ohne Fehler zu erstellen.

    
florestan 27.10.2017 09:43
quelle

Tags und Links