![]() |
Ausgabeverzeichnis für EXE und DCU nicht änderbar?
Ich arbeite mit Delphi 11.3 und habe ein Delphi-Projekt welches sich weigert die Ausgabeverzeichnisse für EXE und DCU zu ändern.
Ich kann zwar die Pfade unter den Projekteinstellungen ändern, aber wenn ich das Projekt danach neu kompiliere werden sowohl die DCU's als auch die EXE im alten Verzeichnis erstellt. Wenn ich dann das Projekt starte, kommt eine Fehlermeldung, dass die exe im neuen Verzeichnis nicht gefunden wurde. Ich bin mit meinem Latein am Ende, habe schon alles versucht, das Projekt unter einem neuen Pfad gespeichert, in der *.dproj Datei geschaut, dort steht <DCC_ExeOutput>E:\Delphi\EXE\</DCC_ExeOutput> <DCC_DcuOutput>E:\Delphi\Units\</DCC_DcuOutput> und die Einstellungen in den Projekt-Optionen 27 mal kontrolliert. Natürlich habe ich auch geprüft, dass die Pfadangaben für die korrekte, beziehungsweise alle Plattformen hinterlegt sind. Mehrmaliges neu Starten der IDE hat auch nichts gebracht. Gibt es da irgend einen Cache von Delphi oder Windows der da greift? |
AW: Ausgabeverzeichnis für EXE und DCU nicht änderbar?
Die Einstellungen gibt es für jede Build-Konfiguration und sie werden in deren Hierarchie vererbt. Eventuell überschreibt ein untergeordneter Eintrag deine Änderungen.
|
AW: Ausgabeverzeichnis für EXE und DCU nicht änderbar?
Zitat:
Steht DIESES nur einmal in der DPROJ, oder findest du mehrere <DCC_ExeOutput> ? Festgedrucktes ist in dieser Config (oben siehe die Combobox) geändert. Aber Löschen des Wertes (im Optionsdialog), entfernt nicht unbedingt den Eintrag dieser Config ... es wird eventuell nur der aktuelle Wert durch den Vorfahren ersetzt, aber wird der Vorfahre geändert, dann wird diese Vererbung eventuell nicht aktialisiert. |
AW: Ausgabeverzeichnis für EXE und DCU nicht änderbar?
@Uwe: Das mit den unterschiedlichen Einstellungen für die Bild-Konfigurationen ist mir schon klar und ich verstehe das Prinzip auch. Ich habe auch versucht für die aktuelle Bild-Konfiguration (Debug-Win32) einen eigenen Wert zu hinterlegen. Das bringt auch nichts.
@himitsu: In der DPROJ sind die beiden Einträge nur jeweils einmal vorhanden. Unterhalb von <PropertyGroup Condition="'$(Base)'!=''"> Zitat:
Wenn ich die Pfade wieder zurück stellen kann ich auch wenigstens das Programm wieder starten/debugen, weil dann die exe im vom Compiler erwarteten Verzeichnis liegt. Ich habe auch schon versucht, das alte Verzeichnis zu löschen, aber es wird immer wieder von Delphi angelegt. Die letzte Möglichkeit die mir noch einfällt, wäre die Festplatte auszubauen, damit Delphi das Verzeichnis nicht mehr anlegen kann und zu schauen was dann passiert. |
AW: Ausgabeverzeichnis für EXE und DCU nicht änderbar?
Und wenn du mal z.B. auf Debug > Win32 umschaltest und dort einen Pfad einstellst? (dann natürlich auch diese Config/Platform kompilieren)
Die DPROJ könnte man auch komplett löschen. Beim Öffnen wird dann eine neue DPROJ generiert (diese entspricht aber nicht ganz der Vorlage, für z.B. eine neue VCL-Anwendung) Für diese beiden Verzeichnisse gibt es in Tools > Optionen keine Standardvorgabe. Aber z.B. für den BPL-Ausgabepfad dagegen schon. Die beiden Logs Erzeugen und Ausgabe mal angesehn, was dort steht? In Erzeugen findet sich der theoretische Aufruf für den DCC32 und da der Parameter -NO.\Win32\Debug Oder mal auf "externen Compiler" umschalten. Projektoptionen > Erzeugen > Delphi-Compiler > MSBuild extern .... [edit] Hmmmmm, hier hätte ich erwartet, dass man dann im Erzeugen den Aufruf für MSBuild findet und in Ausgabe die Ausgabe des MSBuild, aber nee. :gruebel: Dann eben mal manuell ... es geht ja nur darum das Ausgabelevel zu ändern. Und dafür ist es egal, ob der Befehl kopiert und um /v erweitert oder selbstgeschrieben ist.
Im Grunde ist die DPROJ ein "Script" für MSBuild, was nacheinander ausgeführt wird (ähnlich wie JavaScript, Python oder so) ... OK, nicht ganz, denn beim Inline-Compiler macht Delphi was es will, nutzt das nur als "Optionen" und geht nicht wirklich das "Script" durch, drum kann das Verhalten bei Fehlern in der DPROJ oder im Delphi sich für intern und extern unterscheiden. Auch ist diese DPROJ nur ein Teil des ganzen Scriptes ... siehe die <IMPORT> am Ende.
Delphi-Quellcode:
Ist das ein upgegradetes Projekt aus alten Delphis?
<Import Project="$(BDS)\Bin\CodeGear.Delphi.Targets" Condition="Exists('$(BDS)\Bin\CodeGear.Delphi.Targets')"/>
<Import Project="$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj" Condition="Exists('$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj')"/> <Import Project="$(MSBuildProjectName).deployproj" Condition="Exists('$(MSBuildProjectName).deployproj')"/> Wenn ja, denn da baut Delphi gern ein bissl Scheiße. :freak:
|
AW: Ausgabeverzeichnis für EXE und DCU nicht änderbar?
Hallo,
verschieb mal die dproj-Datei und lass sie damit neu aufbauen. |
AW: Ausgabeverzeichnis für EXE und DCU nicht änderbar?
Lösung - Kurze Version:
DPROJ-Datei löschen und Projekt-Optionen neu einrichten -> läuft. Lösung - Lange Version: Ich habe das Laufwerk "D:" verschwinden lassen und in der Bild-Konfiguration E:\Delphi\EXE\ E:\Delphi\Units\ eigestellt. Dann kommen beim kompilieren folgende Fehlermeldungen: [MakeDir Fehler] Das Verzeichnis "D:\dev\Delphi\EXE\Win32\Debug\" kann nicht erstellt werden. Ein Teil des Pfades "D:\dev\Delphi\EXE\Win32\Debug\" konnte nicht gefunden werden. [MakeDir Fehler] Das Verzeichnis "D:\dev\Delphi\EXE\Win32" kann nicht erstellt werden. Ein Teil des Pfades "D:\dev\Delphi\EXE\Win32" konnte nicht gefunden werden. In der DPROJ sind nur folgende Einträge zu "DCC_???Output" zu finden
Code:
Ergo irgendwo muss sich Delphi also den "alten" Pfad gemerkt haben. Ich habe deshalb mal die komplette DPROJ-Datei durchsucht, welche immerhin stattliche 70.977 Bytes groß ist, und habe dort folgende Einträge gefunden.
<PropertyGroup Condition="'$(Base)'!=''">
... <DCC_ExeOutput>E:\Delphi\EXE\</DCC_ExeOutput> <DCC_DcuOutput>E:\Delphi\Units\</DCC_DcuOutput> ... </PropertyGroup> <PropertyGroup Condition="'$(Cfg_1_Win32)'!=''"> ... <DCC_ExeOutput>E:\Delphi\EXE\</DCC_ExeOutput> <DCC_DcuOutput>E:\Delphi\Units\</DCC_DcuOutput> ... </PropertyGroup>
Code:
Den ersten Pfad gibt nicht. Das Verzeichnis gab es mal auf meinem alten Rechner, der bestimmt schon 2 Jahre nicht mehr im Einsatz ist. Wofür der Eintrag "DeployFile" steht und wo ich Eintrag in der IDE, in den Projektoptionen und/oder den IDE-Optionen, finde und ändern kann habe ich nicht herausgefunden. Unter "Bereitstellung" oder sonst wo gibt es keinen solchen Eintrag. Interessant auch, dass hier noch so alte Einträge wie <BorlandProject> geführt werden.
<ProjectExtensions>
... <BorlandProject> ... <Deployment Version="4"> ... <DeployFile LocalName="C:\Develop\Delphi\EXE\Console\Win32\MyConsole.exe" Configuration="Debug" Class="ProjectOutput"/> <DeployFile LocalName="D:\dev\Delphi\EXE\Win32\Debug\MyConsole.exe" Configuration="Debug" Class="ProjectOutput"> ... </Deployment> ... </BorlandProject> ... </ProjectExtensions> Also habe ich zuerst versucht den Eintrag komplett aus der DPROJ-Datei zu löschen, ohne Erfolg. Dann habe ich ihn wieder reingenommen und den Pfad geändert, auch ohne Erfolg. Delphi kompiliert weiterhin beharlich in die alten Verzeichnisse. Auch habe ich keinen weiteren Eintrag gefunden, der auf den "alten" Pfad für die DCUs verweist. Zitat:
Zitat:
Zitat:
Aber diese Option habe ich jetzt letzendlich gezogen und jetzt scheint es wieder zu funktionieren. Tests ausstehend. Überigens, die neue DPROJ-Datei hat jetzt nur noch 19.055 Bytes. Vielen Dank für Eure Unterstützung! |
AW: Ausgabeverzeichnis für EXE und DCU nicht änderbar?
Ja, diese Pfade vergisst Delphi gern mal.
Für Windows könnte man alles innerhalb vom <Deployment ...> löschen. (wenn für Android/Apple kompiliert werden soll, sollte man etwas auspassen) Das Löschen ist auch nicht so schlimm wie es klingt. Dabei verschwinden zwar erstmal auch alle "eigenen" Einstellungen aus den Projektopionen, abgesehn Jener welche er zwichen der DPRPK und den DRP/DPK/RES synchronisiert. (Teile kann man als externe "Optionsgruppe" auslagern, aber lohnt nur, wenn man Jenes zwischen mehreren Projekten sharen will ... und weil das zu doof gebaut wurde, ist sowas eh leider selten wirklich nutzbar) Und den Rest kann man sich ja partiell ganz einfach aus der Versionierung wiederherstellen/reverten. ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:05 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 by Thomas Breitkreuz