Seite 1 von 1

pre_build bei DLL Erzeugung

Verfasst: Fr, 13. Apr 2018 14:25
von Manfred
Hi,
kann mir jemand erklären, warum das hier nicht klappt? Da wo HIER steht. Erklärung dazu unten

Code: Alles auswählen

[PROJECT]
    VERSION       = 2.2
    mk_zusaetze.xpj

[mk_zusaetze.xpj]
    mk_zusaetze.dll

[mk_zusaetze.dll]
    COMPILE       = xpp
    COMPILE_FLAGS = /DLL /wi /wu /w 
    DEBUG         = yes
    GUI           = yes
    LINKER        = alink
    LINK_FLAGS    = /dll 
    RC_COMPILE    = arc
    RC_FLAGS      = /v
    OBJ_DIR       = obj\
    //PRE_BUILD     = del obj\*.obj  <-------- HIER
    POST_BUILD    = copy_dll.bat
// $START-AUTODEPEND
    browserklasse.obj
    classparameter.obj
    dialogklasse.obj
    ftptransfer.obj
    funktionen.obj
    managerdaten.obj
    mk_dialog.obj
    mk_print.obj
    progressbarklasse.obj
    protokollklasse.obj
    pruefklasse.obj
    standarddbklassen.obj
    standarddbstrukturen.obj
    windowsmenu.obj
    xbFTP.obj
    XbpFormattedLabel.obj
    XbpProgressBar.obj
    zusaetze.obj
// $STOP-AUTODEPEND
    browserklasse.prg
    classparameter.prg
    dialogklasse.prg
    ftptransfer.prg
    funktionen.prg
    managerdaten.prg
    mk_dialog.prg
    mk_print.prg
    progressbarklasse.prg
    protokollklasse.prg
    pruefklasse.prg
    standarddbklassen.prg
    standarddbstrukturen.prg
    windowsmenu.prg
    xbFTP.prg
    XbpFormattedLabel.prg
    XbpProgressBar.prg
    zusaetze.prg

wenn ich das freigebe, wird zwar gelöscht, aber die WB meckert, dass sie die OBJ Dataien nicht findet. Leere ich das Verzeichnis von Hand vorher, dann klappt alles.
Normale Projektdateien klappen mit diesem Befehl.

Re: pre_build bei DLL Erzeugung

Verfasst: Fr, 13. Apr 2018 14:35
von Herbert
Lass doch das einfach weg. Die .Obj werden bei der Neuerstellung eh alle überschrieben.

Re: pre_build bei DLL Erzeugung

Verfasst: Fr, 13. Apr 2018 14:56
von brandelh
Herbert,

nur wenn die jeweilige PRG seit der letzten Compilierung neu gespeichert wurden.

Manfred,

wenn es normalerweise funktioniert, bei der DLL aber nicht, liegt vermutlich ein Bug vor. :arrow: Alaska ;-)

Ich selbst nutze CMD Dateien für das Endprodukt, die räumen auf (vorher nachher), und schalten per Schalter Debug ab und mit /a wird auf jeden Fall alles erzeugt.
Verschieben könnten die auch.

Re: pre_build bei DLL Erzeugung

Verfasst: Fr, 13. Apr 2018 15:06
von Manfred
ich habe das jetzt mal als Anfrage an Alaska geschickt. ich dachte nur ich hätte wieder mal was übersehen...

Re: pre_build bei DLL Erzeugung

Verfasst: Fr, 13. Apr 2018 15:06
von Jan
Manfred,

was ist der Unterschied zwischen Deinem Beispiel und einer "normalen Projektdatei", in der das funktioniert?

Jan

Re: pre_build bei DLL Erzeugung

Verfasst: Fr, 13. Apr 2018 15:08
von Manfred
ich denke mal nur, das einmal eine DLL und einmal eine EXE erzeugt wird!?

Re: pre_build bei DLL Erzeugung

Verfasst: Fr, 13. Apr 2018 15:23
von Martin Altmann
Ich verstehe den Sinn nicht!
Warum sollte ich ein PRE_BUILD zum Löschen der .obj-Dateien verwenden, wenn ich das auch mit einem /a bei den COMPILE_FLAGS hinbekomme.

Viele Grüße,
Martin

Re: pre_build bei DLL Erzeugung

Verfasst: Fr, 13. Apr 2018 15:36
von Manfred
ganz einfach Martin,
ich möchte das IMMER alle obj Dateien neu erzeugt werden bei einem Aufruf und das ist so gegeben. Nehme ich den Parameter /a, dann ist das nicht der Fall.

Re: pre_build bei DLL Erzeugung

Verfasst: Fr, 13. Apr 2018 15:49
von Jan
Martin Altmann hat geschrieben: Fr, 13. Apr 2018 15:23Warum sollte ich ein PRE_BUILD zum Löschen der .obj-Dateien verwenden, wenn ich das auch mit einem /a bei den COMPILE_FLAGS hinbekomme.
"/a"? Das deklariert privates, publics, und parameters als MEMVAR. Was hat das mit dem löschen von obj zu tun?

Jan

Re: pre_build bei DLL Erzeugung

Verfasst: Fr, 13. Apr 2018 15:51
von Manfred
Jan, you are on the Woodway.

Re: pre_build bei DLL Erzeugung

Verfasst: Fr, 13. Apr 2018 15:56
von brandelh
Manfred, warum soll der Compiler Schalter /a nicht alles neu machen ?

Steht doch so im Handbuch und nutze ich auch (ohne jetzt tatsächlich es geprüft zu haben), wobei ja die OBJ werden in der CMD auch vorher gelöscht bei mir ;-)

Re: pre_build bei DLL Erzeugung

Verfasst: Fr, 13. Apr 2018 15:58
von Manfred
Hubert?

Re: pre_build bei DLL Erzeugung

Verfasst: Fr, 13. Apr 2018 16:12
von Jan
Manfred,

wieso? Ich habe extra vorher in der Doku nach den Compiler-Flags nachgesehen, wie Martin das angegeben hatte.

Jan

Re: pre_build bei DLL Erzeugung

Verfasst: Fr, 13. Apr 2018 16:17
von Manfred

Code: Alles auswählen

The switch /a causes the ProjectBuilder to perform a complete compile and link cycle for all sources of a project. 
         This rebuilds an entire project regardless of whether or not source files have been changed since the last update of the project. 

Re: pre_build bei DLL Erzeugung

Verfasst: Fr, 13. Apr 2018 16:20
von Manfred
halt stop, wir reden aneinander vorbei. Du hast Recht, mit den Compiler Flags, Martin meint den Builder Parameter. Der kommt aber irgendwo anders hin. ist mir gerade aufgefallen.

Re: pre_build bei DLL Erzeugung

Verfasst: Fr, 13. Apr 2018 16:25
von Manfred
stimmt. Wo wird denn dann der Projektparameter angepeppt, wenn man über die WB kompiliert?

Re: pre_build bei DLL Erzeugung

Verfasst: Fr, 13. Apr 2018 17:48
von Martin Altmann
Jan,
ich meinte natürlich den Schalter für pbuild (Kommandozeile, nicht in der .xpj-Datei!).
Manfred,
selbstverständlich macht ein pbuild /a alles neu! Wenn nicht, hast du ein Problem im Filesystem (z.B. ein Erstellungszeitpunkt der vorhandenen .obj-Dateien in der Zukunft)!

Viele Grüße,
Martin

Re: pre_build bei DLL Erzeugung

Verfasst: Fr, 13. Apr 2018 17:51
von Manfred
jaja, ich hatte den Builderschalter im kopf, habe aber den Compilerschalter in der Projektdatei angegeben. Dann kann das nicht klappen.
Ist aber unwichtig, solange ich das nicht über die WB starten kann mit den Builder Schaltern.
Wenn ich das über eine Batchdatei aufrufe und dann /a dahintersschreibe, dann ist das so. Es wird alles neu gemacht. Kommt aber nicht immer für mich in Frage. Aber trotzdem gut zu wissen.

Re: pre_build bei DLL Erzeugung

Verfasst: So, 22. Apr 2018 17:59
von Manfred
Puh,
und ich dachte schon ich wäre neben der Spur.

Antwort von Alaska
Wir müssen feststellen, dass das PRE_BUILD Kommand ausgeführt wird nachdem intermediate Dateien erzeugt werden und bevor das Binary gelinkt wird. Wir haben PDR 7009 verfasst:

http://www.alaska-software.com/scripts/ ... PDRID=7009

Dürfen wir wissen, warum Sie die Objektdateien löschen? Das entspricht doch genau der Funktion von "pbuild -a" oder "pbuild -c, dann pbuild".

Bitte beachten Sie auch die defines INTERMEDIATE_DEBUG und INTERMEDIATE_RELEASE die wir unlängst pbuild hinzugefügt haben.
kennt einer von euch die Defines?

Re: pre_build bei DLL Erzeugung

Verfasst: So, 22. Apr 2018 23:26
von brandelh
die Werte habe ich in einer neuen XPJ gesehen, dort wird wohl jeweils ein Verzeichnis für debug und release obj angelegt.

Re: pre_build bei DLL Erzeugung

Verfasst: So, 22. Apr 2018 23:27
von Werner_Bayern
Servus Manfred,

ja, die Defines stehen in der Hilfe.
INTERMEDIATE_DEBUG= Specifies the location of the intermediate files such as OBJ and RES files for debug builds. If this definition is specified, OBJ_DIR is ignored.

INTERMEDIATE_RELEASE= Specifies the location of the intermediate files such as OBJ and RES files for non-debug/release builds. If this definition is specified, OBJ_DIR is ignored.

Re: pre_build bei DLL Erzeugung

Verfasst: Mo, 23. Apr 2018 7:37
von Manfred
Hallo Werner,
da hatte ich gestern nachgeschaut. Fand sie aber nicht. (Will aber auch nichts heißen)

Re: pre_build bei DLL Erzeugung

Verfasst: Mo, 23. Apr 2018 8:20
von Jan
Bei neuen Projekten werden die beiden Defines automatisch in die xpj eingefügt. Bei alten muß man das manuell machen. Die sind irgendwann vor einem dreiviertel Jahr oder so mal eingeführt worden. Seitdem arbeite ich nicht mehr mit meinen eigenen Objekt-Verzeichnissen, die ich früher immer benutzt hatte um halbwegs Ordnung zu schaffen.

Jan

Re: pre_build bei DLL Erzeugung

Verfasst: Mo, 23. Apr 2018 9:07
von brandelh
Manfred hat geschrieben: Mo, 23. Apr 2018 7:37 Hallo Werner,
da hatte ich gestern nachgeschaut. Fand sie aber nicht. (Will aber auch nichts heißen)
wenn ich das richtig gelesen habe sind die seit 2.00.807 enthalten und werden erklärt unter: The [PROJECT] section in an XPJ file
Ist da der Name "defines" überhaupt richtig ?
Ich hätte "defines" immer im Quellcode gesucht ;-)