Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Wie muss ein makefile für ein Delphiprojekt aussehen? (https://www.delphipraxis.net/60550-wie-muss-ein-makefile-fuer-ein-delphiprojekt-aussehen.html)

dragi 9. Jan 2006 07:45


Wie muss ein makefile für ein Delphiprojekt aussehen?
 
Hallo,

kann mir jemand hier sagen wie man makefiles für Delphi Programme macht? Ich habe zwar auf einer Seite etwas gefunden, aber derjenige macht es so:

Code:
#------------------------------------------------------------------------------
VERSION = BWS.01
#------------------------------------------------------------------------------
!ifndef ROOT
ROOT = $(MAKEDIR)\..
!endif
#------------------------------------------------------------------------------
MAKE = $(ROOT)\bin\make.exe -$(MAKEFLAGS) -f$**
DCC = $(ROOT)\bin\dcc32.exe -RC:\Programme\Borland\BDS\3.0\lib $**
BRCC = $(ROOT)\bin\brcc32.exe $**
#------------------------------------------------------------------------------
PROJECTS = Test.exe
#------------------------------------------------------------------------------
default: $(PROJECTS)
#------------------------------------------------------------------------------

Test.exe: Test.dpr
  $(DCC)
Jetzt habe ich aber das Problem, das make diese Datei immer baut wenn die exe nciht da ist, aber nicht wenn sich etwas in den .pas Dateien geändert hat. ALso habe ich es so versucht:

Code:
#------------------------------------------------------------------------------
VERSION = BWS.01
#------------------------------------------------------------------------------
!ifndef ROOT
ROOT = $(MAKEDIR)\..
!endif
#------------------------------------------------------------------------------
MAKE = $(ROOT)\bin\make.exe -$(MAKEFLAGS) -f$**
DCC = $(ROOT)\bin\dcc32.exe -RC:\Programme\Borland\BDS\3.0\lib $**
BRCC = $(ROOT)\bin\brcc32.exe $**
#------------------------------------------------------------------------------
PROJECTS = Test.exe
#------------------------------------------------------------------------------
default: $(PROJECTS)
#------------------------------------------------------------------------------

Test.exe: Test.dpr
  $(DCC)

Test.dpr: unit2.pas unit3.pas unit4.pas
Aber auch das funktioniert nicht. Jetzt baut er auch nur eine exe wenn die exe nciht mehr da ist, inotiert aber Änderungen an den .pas Dateien solange die exe im Verzeichniss liegt. Der Sinn von make ist doch aber, das er bei jeder Änderung an irgendeiner Datei die exe neu baut :(

Also habe ich versucht:

Code:
#------------------------------------------------------------------------------
VERSION = BWS.01
#------------------------------------------------------------------------------
!ifndef ROOT
ROOT = $(MAKEDIR)\..
!endif
#------------------------------------------------------------------------------
MAKE = $(ROOT)\bin\make.exe -$(MAKEFLAGS) -f$**
DCC = $(ROOT)\bin\dcc32.exe -RC:\Programme\Borland\BDS\3.0\lib $**
BRCC = $(ROOT)\bin\brcc32.exe $**
#------------------------------------------------------------------------------
PROJECTS = Test.exe
#------------------------------------------------------------------------------
default: $(PROJECTS)
#------------------------------------------------------------------------------

Test.exe: Test.dpr
  $(DCC)

Test.exe: Unit2.pas unit3.pas unit4.pas
  $(DCC)
Das hat zu Folge, das jetzt immer die pas-Dateien compiliert werden, aber die exe nur gebaut wird, wenn diese nicht mehr vorhanden ist.

Wie bekomme ich es nun hin, das die exe immer gebaut wird wenn diese fehlt oder aber sich etwas in den .pas Dateien geändert hat? Ich bekomme es einfach nicht hin :(

Gruß

Dragi

mumu 9. Jan 2006 07:56

Re: Wie muss ein makefile für ein Delphiprojekt aussehen?
 
hmm lösch doch einfach vor dem compilieren die exe. dann wird sie ja auf jeden fall neu erstellt...

dragi 9. Jan 2006 09:31

Re: Wie muss ein makefile für ein Delphiprojekt aussehen?
 
Genau das soll ja eben nicht passieren. Es soll nur eine Exe erstellt werden wenn sich etwas geändert hat. Sonst könnte ich ja einfach per Batch den dcc32 aufrufen. Aber ich soll es irgendwie hinbekommn das nur eine exe erstellt wird wenn sich etwas ändert. :(

Flocke 9. Jan 2006 10:20

Re: Wie muss ein makefile für ein Delphiprojekt aussehen?
 
Du solltest die beiden letzten Zeilen zusammenfassen, da es sich ja um dasselbe Ziel handelt:
Code:
Test.exe: Test.dpr Unit2.pas unit3.pas unit4.pas
  $(DCC)
Die Syntax in einem Makefile ist immer:
Code:
ZIEL: ABHÄNGIGKEITEN
  REGELN
// Nachtrag:

Macht "bcc32 -M Projekt.dpr" nicht genau das, was du willst?

dragi 9. Jan 2006 13:47

Re: Wie muss ein makefile für ein Delphiprojekt aussehen?
 
"dcc32 -m Projekt.dpr" macht leider nicht dasgewünschte. Ändert sich eine pas Datei wird nciht neu gebaut. Nehme ich aber den Vorschlag die beiden zeilen zusammen zu fassen, habe ich das gewünschte Ergebniss aber er baut dazu noch eine Unit2.exe, unit3.exe und unit4.exe...das ist auch ziemlich doof :(
Das Projekt besteht später nämlich aus 40 und mehr pas Dateien!
Noch eine Idee dazu?

Gruß

Dragi

Flocke 9. Jan 2006 13:57

Re: Wie muss ein makefile für ein Delphiprojekt aussehen?
 
Hmmmm ... probiere mal das "$**" durch "$*" zu ersetzen:
Code:
DCC = $(ROOT)\bin\dcc32.exe -RC:\Programme\Borland\BDS\3.0\lib $*
Wenn das nicht geht, dann das $(DCC) an der eigentlichen Stelle ersetzen:
Code:
Test.exe: Test.dpr Unit2.pas unit3.pas unit4.pas
  $(ROOT)\bin\dcc32.exe -RC:\Programme\Borland\BDS\3.0\lib Test.dpr

dragi 9. Jan 2006 15:02

Re: Wie muss ein makefile für ein Delphiprojekt aussehen?
 
Wow...das ersetzen von $** durch $* in der dcc32 zeile bringt genau das gwünschte Ergebnis! Vielen Dank!!!

Aber ich versteh trotzdem nciht warum :)

Gruß

Dragi

Flocke 9. Jan 2006 15:30

Re: Wie muss ein makefile für ein Delphiprojekt aussehen?
 
"$*" setzt die erste Abhängigkeit ein (-> Test.dpr)
"$**" setze alle Abhängigkeiten ein (-> Test.dpr Unit2.pas unit3.pas unit4.pas)

Ich hab' mal ein bisschen im Internet gesucht aber leide keine Beschreibung der Syntax für Borland Makefiles gefunden - ich weiß aber, dass damals beim BC 4.5 was dazu in der Hilfe stand...

dragi 16. Jan 2006 07:12

Re: Wie muss ein makefile für ein Delphiprojekt aussehen?
 
Das habe ich nun verstanden! :)

Aber eine frage habe ich nun doch noch:

Code:
#------------------------------------------------------------------------------
VERSION = BWS.01
#------------------------------------------------------------------------------
!ifndef ROOT
ROOT = $(MAKEDIR)\..
!endif
#------------------------------------------------------------------------------
MAKE = $(ROOT)\bin\make.exe -$(MAKEFLAGS) -f$**
BRCC = $(ROOT)\bin\brcc32.exe $**
#------------------------------------------------------------------------------
PROJECTS = Test.exe
#------------------------------------------------------------------------------
default: $(PROJECTS)
#------------------------------------------------------------------------------

Test.exe: Test.dpr test1.dcu
  dcc32 -m BAktBr32.dpr

*.dcu: *.pas
Im obigen makefile hängt die exe nun von einer DPR und einer dcu ab. Denn wenn sich in der pas zu test1.dcu etwas ändert, muß ja alles neu compiliert werden. Erst die dcu und dann die exe. Wie kann ich nun aber erreichen, das ich die dcu nicht im gleichen Verzeichniss wie die dpr liegen haben muß? Ich möchte alle Binärdateien in einem seperaten verzeichniss liegen haben. WIe mache ich das? Wenn ich in den Projektoptionen ein Unit Verzeichniss angebe, die DCUs dahin kopiere und make ausführe, meckert make das es die dcu niht finden kann. Gibt es da eine Möglichkeit?

Vielen Dank

dragi

Flocke 16. Jan 2006 09:28

Re: Wie muss ein makefile für ein Delphiprojekt aussehen?
 
Du kannst MAKE mit
Code:
.path.pas = .;..\units
Pfade für die Eingabedateien angeben (das funktioniert mit allen Dateien, die rechts vom Doppelpunkt angegeben werden).

Allerdings musst du DCC32 diese Pfade mit -U auch noch mitteilen.

Beispiel:
Code:
DCUPATH = ..\units
.path.pas = $(DCUPATH)
.path.dcu = $(DCUPATH)

...

Test.exe: Test.dpr test1.dcu
  dcc32 -m -U$(DCUPATH) BAktBr32.dpr
(alles ungetestet)


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:31 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz