Um FreeCAD mit einer bestimmten Version von OpenCASCADE (OCCT) aufzubauen, ist zuerst sicherzustellen, dass FreeCAD auf dem eigenen System mit dem Standard-OCCT kompiliert werden kann. Danach folgen diese Schritte:
Folgend wird von einer Installation unter Linux ausgegangen, aber der Vorgang ist unter Windows oder macOS sehr ähnlich.
Im weiteren Verlauf dieser Seite gehen wir davon aus, dass wir den OCCT-Quellcode unter /home/user/occt-main gespeichert haben. Unter dieser Voraussetzung den folgenden Befehl ausführen.
git clone https://github.com/Open-Cascade-SAS/OCCT.git /home/user/occt-main
Der Quellcode von OCCT befindet sich im Hauptzweig. Von dort aus können problemlos mehrere Arbeitszweige erstellt werden.
Um OCCT zu kompilieren, empfiehlt es sich, ein Kompilierungsverzeichnis und ein Installationsverzeichnis festzulegen, zum Beispiel:
| Quellverzeichnis | /home/user/occt-main
|
| Build-Verzeichnis | /scratch/build-occt-main
|
| Installationsverzeichnis | /scratch/dist-occt-main
|
Sobald wir das festgestellt haben, können wir eine Datei namens CMakeUserPresets.json im Stammverzeichnis des Quellverzeichnisses erstellen (dabei beachten, dass wir das Installationsverzeichnis ausdrücklich angeben müssen):
{
"version": 3,
"cmakeMinimumRequired": {
"major": 3,
"minor": 19,
"patch": 0
},
"configurePresets": [
{
"name": "debug",
"description": "Preset for a debug build",
"generator": "Ninja",
"cacheVariables": {
"INSTALL_DIR": "/scratch/dist-occt-main",
"CMAKE_BUILD_TYPE": "Debug",
"CMAKE_EXPORT_COMPILE_COMMANDS": "ON",
"USE_RAPIDJSON": "ON"
}
}
]
}
Jetzt, da wir OCCT konfiguriert haben, können wir die folgenden Befehle ausführen, um es zu kompilieren:
mkdir /scratch/build-occt-main
cd /scratch/build-occt-main
cmake --preset debug /home/user/occt-main
Normalerweise kompiliere ich einfach mit (vorausgesetzt, ich befinde mich noch im Build-Verzeichnis):
ninja
Um eine Distribution zu erstellen und sie im Installationsverzeichnis zu installieren, einfach den folgenden Befehl ausführen, vorausgesetzt, wir befinden uns noch im Build-Verzeichnis:
ninja install
Es ist uns nicht gelungen, OCCT so zu installieren, dass FreeCAD eine Verbindung dazu herstellen kann.
Es kann sinnvoll sein, einen Arbeitsbaum oder ein Git-Repository anzulegen, das auf die von Ihnen verwendete OCCT-Distribution verweist. Nehmen wir also an, wir haben einen Arbeitsbaum oder ein Git-Repository mit dem Quell- und Build-Verzeichnis von FreeCAD wie folgt:
| Quellverzeichnis | /home/user/freecad-occt-main
|
| Build-Verzeichnis | /scratch/build-freecad-occt-main
|
Es ist zu beachten, dass wir kein Installationsverzeichnis benötigen, da wir FreeCAD direkt aus dem Build-Verzeichnis heraus ausführen können.
Anhand dieser Informationen können wir eine Datei CMakeUserPresets.json erstellen, die wir im Quellcode von FreeCAD ablegen:
{
"version": 4,
"configurePresets": [
{
"name": "occt",
"displayName": "Debug build with custom OCCT",
"description": "User-specific debug build with custom OCCT.",
"inherits": [
"common"
],
"generator": "Ninja",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug",
"FREECAD_USE_OCC_VARIANT": "Official Version",
"CMAKE_PREFIX_PATH": "/scratch/dist-occt-main",
"FREECAD_USE_PCL": "OFF",
"CMAKE_EXPORT_COMPILE_COMMANDS": "ON",
"FREECAD_QT_VERSION": "6",
"BUILD_FEM": "OFF",
"BUILD_OPENSCAD": "OFF",
"BUILD_REVERSEENGINEERING": "OFF",
"BUILD_ROBOT": "OFF",
"BUILD_POINTS": "OFF",
"BUILD_SMESH": "OFF",
"BUILD_WEB": "OFF",
"BUILD_SURFACE": "ON",
"BUILD_INSPECTION": "OFF"
}
}
]
}
Es ist zu beachten, dass wir das Installationsverzeichnis von OCCT angegeben haben. Einige Module wurden deaktiviert, um auch die Kompilierungszeit zu verkürzen.
Die Konfiguration von FreeCAD lässt sich wie folgt zusammenfassen:
mkdir /scratch/build-freecad-occt-main
cd /scratch/build-freecad-occt-main
cmake --preset occt /home/user/freecad-occt-main
Der Bericht zu OCCT muss beachtet werden. OCCT sollte in /scratch/dist-occt-main gefunden worden sein.
Wenn all dies korrekt ist, kann FreeCAD kompiliert werden.
Angenommen, wir befinden uns noch im Build-Verzeichnis, dann können wir Folgendes tun:
ninja
Wenn FreeCAD in diesem Verzeichnis gestartet wird und die Informationen sowie die Bibliotheken überprüft werden, sollte FreeCAD die OCCT-Version Ihres jeweiligen Commits im OCCT-Quellcode anzeigen.
Wenn man FreeCAD und OCCT gleichzeitig debuggen möchte, muss das Entwicklungswerkzeug die Kompilierungsbefehle sowohl von FreeCAD als auch von OCCT kennen.
Da die Dateien wahrscheinlich aus dem FreeCAD-Quellcode-Verzeichnis /home/user/freecad-occt-main geöffnet werden sollen, kann eine Datei /home/user/freecad-occt-main/compile_commands.json erstellt werden, die die Kompilierungsbefehle beider Builds enthält.
Das Skript unten kann wie folgt ausgeführt werden:
cd /home/user/freecad-occt-main
merge-compile-commands \
/scratch/build-occt-main/compile_commands.json \
/scratch/build-freecad-occt-main/compile_commands.json
Das Skript merge-compile-commands sollte zugänglich und ausführbar sein:
#!/bin/env python
import json
import os
import sys
def load(path):
with open(path, "r") as f:
return json.load(f)
def merge(files):
merged = []
for p in files:
merged += load(p)
return merged
if __name__ == "__main__":
if len(sys.argv) < 3:
print("Usage: merge-compile-commands /build1/compile_commands.json /build2/compile_commands.json")
print(" Do this in the source tree from where you open files.")
sys.exit(1)
in_paths = sys.argv[1:]
OUT_PATH = "compile_commands.json"
if os.path.exists(OUT_PATH):
os.remove(OUT_PATH)
merged = merge(in_paths)
with open(OUT_PATH, "w") as f:
json.dump(merged, f, indent=2)
print(f"Wrote {len(merged)} entries to {OUT_PATH}")