CompileOnWindows – Reduzierung des Speicherplatzbedarfs
Hier findet man Techniken, um den für die Erstellung von FreeCAD unter Windows erforderlichen Speicherplatz zu reduzieren. Dies kann für diejenigen nützlich sein, die nur über begrenzten Speicherplatz verfügen (z. B. aufgrund einer SSD), und für diejenigen, die die Installation des kompletten Visual Studio vermeiden möchten.
Es wird empfohlen, dass man sich vor dem Versuch mit der Praxis vertraut macht, wie man mit Qt Creator unter Windows kompiliert.
Einrichten des MSVC2013-Compilers ohne Installation von Visual Studio
Anforderungen:
- Ein weiterer Computer, auf dem Visual Studio vollständig installiert ist/installiert werden kann (theoretisch kann dies durch Entpacken der VS-Installationsprogramme erreicht werden, aber dazu gibt es hier keine Anweisungen).
Den Compiler besorgen
0. Um die Compiler-Dateien zu erhalten, geht man zu einem anderen Computer und sucht den eigentlichen Compiler. Beispiel für den Pfad zum Compiler: Laufwerk:\Pfad\zu\Visual\Studio\VC\bin.
1. Die Compiler-Binärdateien und Standardbibliotheken auf einen anderen Computer kopieren. Dazu die folgenden Ordner nach C:\Qt\msvc12rip kopieren:
- Laufwerk:\Pfad\zu\Visual\Studio\VC\bin
- Laufwerk:\Pfad\zu\Visual\Studio\VC\lib
- Laufwerk:\Pfad\zu\Visual\Studio\VC\include
2. Das Windows SDK installieren. Für diejenigen, die es nicht wissen: Es handelt sich um eine Reihe von Headern, Bibliotheken und Tools zum Kompilieren von Windows-Programmen. Man beachte, wo es installiert wird. Beispielpfad: C:\Program Files (x86)\Windows Kits\8.1
3. CMake und Qt Creator (nur den Creator, d. h. die Umgebung, nicht das eigentliche Qt, um Speicherplatz zu sparen) installieren.
4. Einen benutzerdefinierten Compiler in Qt Creator einrichten. Weiter unten lesen, um zu erfahren, wie das geht.
Compiler in Qt Creator
32-bit
Die Einstellung des Compilers für 32 Bit ist recht einfach.
4.1. Den Compiler unter der Registerkarte Compiler in den Einstellungen einrichten: Einen benutzerdefinierten Compiler hinzufügen:
- Name = msvcrip (der Name spielt keine Rolle, man kann ihn frei wählen)
- Compiler-Pfad: C:\Qt\msvc12rip\VC\bin\cl.exe
- Make-Pfad: C:\Qt\msvc12rip\VC\bin\nmake.exe
- ABI: x86-windows-msvc2013-pe-32bit
- Header-Pfade – nichts
- Fehlerparser: MSVC
4.2. Unter der Registerkarte Kits habe ich ein Kit hinzugefügt und es wie folgt eingerichtet:
- Name: FreeCAD32 (auch hier wieder nach Belieben)
- Gerätetyp: Desktop
- Gerät: Lokaler PC
- Compiler: msvcrip (oder wie auch immer man ihn in Schritt 1 benannt hat)
- Umgebung: (die Pfade zu der Einrichtung korrigieren)
INCLUDE=C:\Program Files (x86)\Windows Kits\8.1\Include\um\;C:\Qt\msvc12rip\VC\include\
LIB=C:\Qt\msvc12rip\VC\lib\;C:\Program Files (x86)\Windows Kits\8.1\Lib\winv6.3\um\x86\
LIBPATH=C:\Qt\msvc12rip\VC\lib\;C:\Program Files (x86)\Windows Kits\8.1\Lib\winv6.3\um\x86\
PATH=C:\Qt\msvc12rip\VC\bin\;C:\Program Files (x86)\Windows Kits\8.1\bin\x86\;C:\Qt\git\bin\
Den Pfad zu git.exe in PATH beachten. Dies ist optional, aber wenn es nicht angegeben wird, sind die Versionsinformationen in FreeCADs Über unvollständig.
- Debugger: (optional) auf 32-Bit (x86) einstellen
- Qt-Version: Keine
Der Teil der Einstellungen, der sich auf die Umgebung bezieht, bereitete mir die größten Schwierigkeiten bei der Konfiguration.
64-bit
Dies ist etwas komplizierter als beim 32-Bit-Compiler. Das Hauptproblem bestand darin, dass es keine nmake-Ausführungsdatei in C:\Qt\msvc12rip\VC\bin\x86_amd64 gibt und nmake weiterhin den 32-Bit-Compiler verwendet. Um dieses Problem zu beheben, erstellt man einen speziellen Ordner "C:\Qt\msvc12rip\VC\bin\x86_amd64_sa", in dem nmake und 64-Bit-cl kombiniert sind. Weiterlesen, um eine Schritt-für-Schritt-Anleitung zu erhalten.
4.1. In C:\Qt\msvc12rip\VC\bin einen Ordner mit dem Namen x86_amd64_sa erstellen (sa steht für Stand-Alone, man kann einen beliebigen Namen verwenden).
4.2. Den Inhalt des Ordners C:\Qt\msvc12rip\VC\bin in den Ordner x86_amd64_sa kopieren (jetzt hat man dort einen 32-Bit-Compiler).
4.3. Den Inhalt des Ordners x86_amd64 in x86_amd64_sa kopieren und dabei die Dateien ersetzen. Jetzt hat man dort einen 64-Bit-Compiler mit nmake.
4.4. Den Compiler unter der Registerkarte Compiler in den Einstellungen einrichten: Einen benutzerdefinierten Compiler hinzufügen:
- Name = msvcrip64 (der Name spielt keine Rolle, man kann ihn frei wählen)
- Compiler-Pfad: C:\Qt\msvc12rip\VC\bin\x86_amd64_sa\cl.exe
- Make-Pfad: C:\Qt\msvc12rip\VC\bin\x86_amd64_sa\nmake.exe
- ABI: x86-windows-msvc2013-pe-64bit
- Header-Pfade – nichts
- Fehlerparser: MSVC
4.5. FUnter der Registerkarte Kits ein Kit hinzufügen und es wie folgt einrichten:
- Name: FreeCAD64 (auch hier wieder nach Belieben)
- Gerätetyp: Desktop
- Gerät: Lokaler PC
- Compiler: msvcrip64 (oder wie auch immer man ihn in Schritt 4.4 benannt hat)
- Umgebung: (die Pfade zu der Konfiguration korrigieren) (im Vergleich zu 32-Bit ist amd64/x64 an mehreren Stellen aufgetaucht oder hat x86 ersetzt)
INCLUDE=C:\Program Files (x86)\Windows Kits\8.1\include\shared\;C:\Program Files (x86)\Windows Kits\8.1\include\um\;C:\Qt\msvc12rip\VC\include
LIB=C:\Program Files (x86)\Windows Kits\8.1\lib\winv6.3\um\x64\;C:\Qt\msvc12rip\VC\lib\amd64\
LIBPATH=C:\Program Files (x86)\Windows Kits\8.1\References\CommonConfiguration\Neutral\
PATH=C:\Qt\msvc12rip\VC\bin\x86_amd64_sa\;C:\Program Files (x86)\Windows Kits\8.1\bin\x64\;C:\Qt\git\bin\
Den Pfad zu git.exe in PATH beachten. Dies ist optional, aber wenn es nicht angegeben wird, sind die Versionsinformationen in FreeCADs Über unvollständig.
- Debugger: (optional) auf 64-Bit (x64) einstellen
- Qt-Version: Keine
Tipp: Ein weiteres Kit+Compiler-Paar für die Verwendung von jom anstelle von nmake einrichten, um Multicore-Builds zu ermöglichen. Die Konfiguration ist identisch mit der 64-Bit-Konfiguration mit nmake, außer dass Make in der Registerkarte Compiler auf jom.exe verweisen sollte. Beispielpfad zu jom: C:\Qt\Qt542\Tools\QtCreator\bin\jom.exe (Man sollte jom unter dem Installationsort des Qt Creators finden können).
Der Rest entspricht der normalen Vorgehensweise beim Kompilieren von FreeCAD.
Compiler testen und FreeCAD erstellen
Anforderungen:
- FreeCAD-Quellcode (siehe Kompilieren unter Windows)
- Korrektes libpack, extrahiert. ("Korrekt" bedeutet, dass es mit dem Compiler und der Bit-Tiefe übereinstimmen muss) (siehe Kompilieren unter Windows)
FreeCAD (CMakeLists.txt) mit Qt Creator öffnen, woraufhin man aufgefordert wird, cmake auszuführen. Es ausführen. CMake erstellt ein Testprogramm, um zu überprüfen, ob der Compiler funktioniert. Wenn der Compiler nicht funktioniert, wird eine Fehlermeldung angezeigt, die genau dies angibt und die Build-Ausgabe auflistet. Die Build-Ausgabe sollte helfen, den Fehler zu identifizieren. Hier ist eine kleine Liste typischer Fehler:
- Can't open Kernel32.lib – Es liegt ein Problem mit den Umgebungsvariablen LIB oder LIBPATH vor (Hinweis: Diese werden unter der Registerkarte Kits in Qt festgelegt, nicht in Windows!).
- Can't resolve external symbol - Es gibt ein Problem mit LIB oder LIBPATH (sie verweisen wahrscheinlich auf .lib-Dateien mit falscher Bitanzahl).
- Manifest-related error – PATH verweist nicht auf einen Speicherort, an dem sich ein Ressourcencompiler (rc.exe) mit der richtigen Bitanzahl befindet.
- Can't locate include – Die Include-Speicherortliste sollte den Pfad zu den Standard-Headern enthalten (auf meinem Rechner C:\Qt\msvc12rip\VC\include).
Um FreeCAD mit dem Typ "Debug" auszuführen, müssen Debug-Versionen der MSVC2013-Redistributable-Bibliotheken (msvcp120d.dll, msvcr120d.dll) an einem Ort vorhanden sein, der über PATH (diesmal systemweit) erreichbar ist.
Diese DLLs können von dem anderen Computer bezogen werden, auf dem sich Visual Studio befindet, von dem man den Compiler kopiert hat. Alternativ können diese DLLs auch direkt aus dem Visual Studio-Installationsprogramm extrahiert werden, was sehr einfach ist:
- Das heruntergeladene .iso-Image als Laufwerk einbinden (auf meinem System Laufwerk D:).
- Die folgenden Dateien suchen:
- D:\packages\vc_librarycore86\cab3.cab/F_REDIST_DLL_APPLOCAL_msvcp120d_x64 (<- oder x86, wenn man 32-Bit erstellt)
- D:\packages\vc_librarycore86\cab3.cab/F_REDIST_DLL_APPLOCAL_msvcr120d_x64
- Die Dateien extrahieren und "msvcp120d.dll" und "msvcr120d.dll" umbenennen.
- Die Dateien in den Ordner libpack im Verzeichnis bin kopieren.
Das Kopieren von libpack-Dateien vermeiden, um FreeCAD zu starten
Anforderungen:
- Windows Vista und höher
- NTFS-Dateisystem (? vielleicht auch nicht...)
Die Idee ist ganz einfach: Anstatt Dateien zu kopieren, erstellt man Links. Unter Windows stehen dafür symbolische Links zur Verfügung. Ein Link lässt die verknüpfte Datei so erscheinen, als befände sie sich an der Stelle des Links, tatsächlich ist die Datei jedoch an einem anderen Ort gespeichert. Links können mit dem Batch-Befehl mklink erstellt werden.
Da es viel zu viele Dateien gibt, um die Links manuell zu erstellen, sollte ein Batch-Skript verwendet werden. Hier ist ein Beispiel für ein solches Skript:
links_libpack.bat:
@set libpackpath=C:\_vt\dev\PC\Qt\FreeCAD\libpack\active
@set builddir=%1
pushd %libpackpath%\bin
for %%i in (*) do mklink "%builddir%\bin\%%i" "%libpackpath%\bin\%%i"
for /D %%s in (*) do mklink /d "%builddir%\bin\%%s" "%libpackpath%\bin\%%s"
popd
pause
Die erste for-Schleife erstellt Links zu Dateien, die zweite Schleife Links zu Ordnern. Der Pfad zu libpack muss entsprechend dem Pfad angepasst werden. Absolute Pfade verwenden. Dann den Pfad zum FreeCAD-Build-Ordner (vollständiger Pfad!) als Argument in das Skript eingeben.
Dieser Batch muss mit Administratorrechten ausgeführt werden (oder Sie können in den lokalen Sicherheitseinstellungen von Windows festlegen, dass Benutzer mklink verwenden dürfen). Der Batch kann fehlschlagen, wenn die Pfade Leerzeichen enthalten (er kann funktionieren, wurde jedoch nicht getestet). Tipp: Eine Verknüpfung zu links_libpack.bat erstellen, sie so einrichten, dass sie als Administrator ausgeführt wird (in den Eigenschaften der Verknüpfung), und den Build-Ordner auf die Verknüpfung ziehen.