Das Problem ist komplizierter, die dylib muss schon bei der EXE-Erstellung an gewünschten Ort sein. Sie muss also schon beim erstellen der .app in der .app sein. Das geht mit den Tool vermutlich nicht. (habs nicht ausprobiert).
Ja sowas ähnliches plane ich tatsächlich, geht aber mittlerweile weit drüber hinaus.
Der Precompiler von mir arbeitet mit Macros. Die werden per RES-Files dauerhaft überall (also in allen Modulen) verfügbar gemacht. Die Macros sind so geschickt formuliert, das sie ohne Precompiler einen gültigen (aber sinnlosen) Programmcode erzeugen (gespickt mit end, damit dieser nicht versehentlich ausgeführt wird). Ich benötige das, um die Quelldatei erstmal durch den PBCompiler mit Flag "/PREPROCESS" zu jagen. Das hat zwei große Vorteile: Syntaxfehler werden durch den Compiler weiterhin erkannt und ich erhalte eine Datei, wo jede Zeile nur ein Befehl enthält. Also schön sauber aufgefädelt, alle Macros expandiert, CompilerIf-Endif aufgelöst. Schön zu verarbeiten.
Natürlich werden so meine Macros auch "Gekillt" und damit die Informationen, die der PreCompiler benötigt. Ich umgehe das ganze, indem ich die Informationen in Konstanten speichere. Genauer gesagt Konstanten, die mit #__PreCompilerCommand__ beginnen und werte dann den String dahinter aus.
Jetzt hab ich bspw. eine Klassendefinition und weis, das Interface und Structure ein Klasse definieren sollen. Ich möchte jetzt bspw. Declare-Zeilen für alle Methoden erzeugen, damit diese garantiert mit den Interface übereinstimmen. Einfügen kann ich aber so nicht. Aber ich kann in Temp-Ordner für jede Klasse eine Declarations-Datei erstellen, die alle Declares enthält (und mehr). Die Macros sind so gestalltet, das in "finalen" Durchgang ein XINCLUDEFILE mit den entsprechenden Dateinamen erzeugt wird. Ich muss so die Quelldateien nicht verändern (sehr vorteilhaft, wenn der Compiler einen Fehler findet. Die Fehlermeldungen passen immer).
Ob jetzt ein PreProcess oder final compiled wird, wird dadurch signalisiert, das die Datei von %COMPILERFILE einlese, vor der ersten Zeile (aber nicht mit Zeilenende abschließend) ein Modul _PRECOMPILER_ einfüge, das auch eine Konstante mit den Pfad der Declare-Dateien enthält und dann in Macro überprüfe, ob das da ist.
DAS klappt mittlerweile sehr gut und eigentlich fehlerfrei (ich finde zumindest keine).
Ich kann jetzt ohne irgendwelche XINCLUDES etc. ein DeclareClass und DefineClass benutzen.
Ich möchte aber jetzt "Librarys" ermöglichen. Includefiles, die automatisch bei Benutzung hinzugefügt werden. Ich wollte die erst in DLL/dylib auslagern, wie hier beschrieben:
http://www.purebasic.fr/english/viewtop ... 12&t=69140
In Windows hat das super geklappt. Man muss natürlich dann bei der finalen EXE immer die DLL mitgeben (da ich die DLL in Compiler-Ordner kopiere, wurde sie bei Compile&run immer gefunden), aber es klappte exakt wie geplant.
Jetzt wollte ich das ganze für MAC anpassen - und da geht halt überhaupt nichts. Die dylib ist deutlich komplizierter und PB nicht richtig drauf vorbereitet und ich bin vermutlich auch zu blöd.
Mein neuer Ansatz: Ich hab einen Library-Quellcode. Der darf keine Module enthalten und die Befehle die "exportiert" werden sollen, müssen mit ProcedureDLL eingeleitet werden. Mein Precompiler jagd das ganze wieder durch den PREPROCESS, baut anhand der ProcedureDLL einen DeclareModule-Header auf, benennt ProcedureDLL wieder in DLL um und packt den restlichen Code der Lib in ein Module. Das speichert er sich in einen eigenen Verzeichnis. Der Modulname wird so gewählt, das er Compiler ihn findet - enthält bspw. den Compilertyp (bswp. MacOsXx64_LibGPI). Jetzt wird eine RES-File erstellt, wo alle exportieren Proceduren vorhanden sind. Ein Macro sieht dann bspw. so aus
Macro Befehl(para="") : MacOsXx645_LibGPI::_Befehl(para):EndMacro
(Man beachte den Unterstrich). Diese RES-File wird wieder in Compilerverzeichnis kopiert. Wenn man den Compiler jetzt neustartet, dann kennt er das Macro überall - in jeden Modul.
Mein PreCompiler macht jetzt leider eine Bruteforce-Attacke. Er erstellt ja oben den PREPROCESS. Wenn jetzt die Fehlermeldung fehlendes Module kommt, schaut er nach, ob er das Module in einer Include hat (Dateiname=modulename) und fügt sie an Anfang per Includefile hinzu und startet einen neuen PREPROCESS. Ist leider nicht schön, wenn man theoretisch 20 Libraries hat und alle nutzt, dann gibts auch 20 /PREPROCESS. Vorteil ist aber so, das nur das hinzugefügt wird, das tatsächlich gebraucht wird. Ich hoffe mal, da der Preprocess nur ein Syntax-Check durchführt, aber ansonsten nicht viel macht, dass das ganze trotzdem schnell geht.
Daran arbeite ich gerade. Und ich schreibe den Precompiler jetzt zum xten mal komplett um. Wenns fertig ist, sollte es auf MAC und WINDOWS wunderbar funktionieren. Ich hoffe, es wandelt dann noch wer für Linux um. Ich bereite ja zwangsweise durch MAC alles vor. Vermutlich muss man nicht mal was anpassen