![]() |
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:
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:
#------------------------------------------------------------------------------
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)
Code:
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 :(
#------------------------------------------------------------------------------
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 Also habe ich versucht:
Code:
Das hat zu Folge, das jetzt immer die pas-Dateien compiliert werden, aber die exe nur gebaut wird, wenn diese nicht mehr vorhanden ist.
#------------------------------------------------------------------------------
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) 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 |
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...
|
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. :(
|
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:
Die Syntax in einem Makefile ist immer:
Test.exe: Test.dpr Unit2.pas unit3.pas unit4.pas
$(DCC)
Code:
// Nachtrag:
ZIEL: ABHÄNGIGKEITEN
REGELN Macht "bcc32 -M Projekt.dpr" nicht genau das, was du willst? |
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 |
Re: Wie muss ein makefile für ein Delphiprojekt aussehen?
Hmmmm ... probiere mal das "$**" durch "$*" zu ersetzen:
Code:
Wenn das nicht geht, dann das $(DCC) an der eigentlichen Stelle ersetzen:
DCC = $(ROOT)\bin\dcc32.exe -RC:\Programme\Borland\BDS\3.0\lib $*
Code:
Test.exe: Test.dpr Unit2.pas unit3.pas unit4.pas
$(ROOT)\bin\dcc32.exe -RC:\Programme\Borland\BDS\3.0\lib Test.dpr |
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 |
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... |
Re: Wie muss ein makefile für ein Delphiprojekt aussehen?
Das habe ich nun verstanden! :)
Aber eine frage habe ich nun doch noch:
Code:
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?
#------------------------------------------------------------------------------
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 Vielen Dank dragi |
Re: Wie muss ein makefile für ein Delphiprojekt aussehen?
Du kannst MAKE mit
Code:
Pfade für die Eingabedateien angeben (das funktioniert mit allen Dateien, die rechts vom Doppelpunkt angegeben werden).
.path.pas = .;..\units
Allerdings musst du DCC32 diese Pfade mit -U auch noch mitteilen. Beispiel:
Code:
(alles ungetestet)
DCUPATH = ..\units
.path.pas = $(DCUPATH) .path.dcu = $(DCUPATH) ... Test.exe: Test.dpr test1.dcu dcc32 -m -U$(DCUPATH) BAktBr32.dpr |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:18 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz