AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Die Delphi-IDE Ausgabeverzeichnis für EXE und DCU nicht änderbar?
Thema durchsuchen
Ansicht
Themen-Optionen

Ausgabeverzeichnis für EXE und DCU nicht änderbar?

Ein Thema von arcticwolf · begonnen am 23. Apr 2023 · letzter Beitrag vom 24. Apr 2023
Antwort Antwort
Benutzerbild von arcticwolf
arcticwolf

Registriert seit: 3. Aug 2021
Ort: Erfurt
41 Beiträge
 
Delphi 11 Alexandria
 
#1

Ausgabeverzeichnis für EXE und DCU nicht änderbar?

  Alt 23. Apr 2023, 23:16
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?
Wolfgang
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#2

AW: Ausgabeverzeichnis für EXE und DCU nicht änderbar?

  Alt 23. Apr 2023, 23:34
Die Einstellungen gibt es für jede Build-Konfiguration und sie werden in deren Hierarchie vererbt. Eventuell überschreibt ein untergeordneter Eintrag deine Änderungen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#3

AW: Ausgabeverzeichnis für EXE und DCU nicht änderbar?

  Alt 23. Apr 2023, 23:47
in der *.dproj Datei geschaut, dort steht ...
Wie jemand schon erwähnte:

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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von arcticwolf
arcticwolf

Registriert seit: 3. Aug 2021
Ort: Erfurt
41 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Ausgabeverzeichnis für EXE und DCU nicht änderbar?

  Alt 24. Apr 2023, 00:32
@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:
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.
Ja, die Logik ist mir klar und ich habe wie geschrieben, alle Werte schon inzwischen 38 mal geprüft, geändert, gelöscht und wieder neu gesetzt. Hilft alles nichts. Dabei ist es auch egal ob ich mit Platzhaltern ala "$(EXEDIR)\$(Platform)\$(Config)" arbeite, wobei ich mir EXEDIR selbst konfiguriert habe, oder einfach mit direkten Pfadangaben. Egal was ich eintrage, Delphi compiliert immer in die "alten" Verzeichnise. In der DPROJ werden die Änderungen gespeichert. Wenn ich z.B. für die Bild-Konfiguration Debug-Win32 eigene Pfade eintrage, dann habe ich in der DPROJ auch zwei weitere Einträge unter <PropertyGroup Condition="'$(Cfg_1_Win32)'!=''">.

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.
Wolfgang
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#5

AW: Ausgabeverzeichnis für EXE und DCU nicht änderbar?

  Alt 24. Apr 2023, 01:22
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.

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 Explorer in das Verzeichnis deines Projekts
  • oben in die Adressleiste cmd reinschreiben und [ENTER]
  • dann zuerst eine Initialisierung durchführen
    "C:\Program Files (x86)\Embarcadero\Studio\22.0\bin\rsvars.bat"
  • msbuild /v:d deinprojekt.dproj oder mit /v:diag
    bzw. in lang, siehe msbuild -h
    msbuild /verbosity:detailed /target:Rebuild /property:Config=Debug /property:Platform=Win32 deinprojekt.dproj
  • das Ergebnis etwas durchforsten, vor allem nach dem "DCC32" (wenn Win32 als Ziel eingestellt) und irgendwas mit "output"


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:
    <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')"/>
Ist das ein upgegradetes Projekt aus alten Delphis?
Wenn ja, denn da baut Delphi gern ein bissl Scheiße.
  • Optionen (eigentlich Variablen) in der falschen Reihenfolge oder unter falschen Namen
  • und vor allem die <Imports> falsch, da sie früher auch mal anders waren und beim Upgrade das vergessen wird
    speziell CodeGear.Delphi.Targets und darin nochmal ein/zwei importierte Freunde sind hier ganz wichtig (leider gibt es auch keine Fehlermeldung, wenn dort etwas nicht gefunden wird)
  • daher der Vorschlag die DPROJ zu löschen, weil das dann zumindestens richtig/aktuell wird
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (24. Apr 2023 um 01:43 Uhr)
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Ausgabeverzeichnis für EXE und DCU nicht änderbar?

  Alt 24. Apr 2023, 07:12
Hallo,
verschieb mal die dproj-Datei und lass sie damit neu aufbauen.
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von arcticwolf
arcticwolf

Registriert seit: 3. Aug 2021
Ort: Erfurt
41 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Ausgabeverzeichnis für EXE und DCU nicht änderbar?

  Alt 24. Apr 2023, 11:09
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:
<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>
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.

Code:
<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>
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.

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:
Auch ist diese DPROJ nur ein Teil des ganzen Scriptes ... siehe die <IMPORT> am Ende.
Vielen Dank für den Hinweis, das hätte ich glatt übersehen. Aber auch in diesen Import-Dateien bin ich nicht fündig geworden.

Zitat:
Ist das ein upgegradetes Projekt aus alten Delphis?
Das ist gut möglich, oder sogar wahrscheinlich. Ich arbeite seit TurboPascal 5.0 mit Pascal/Delphi.

Zitat:
daher der Vorschlag die DPROJ zu löschen, weil das dann zumindestens richtig/aktuell wird
Ja, das war jetzt meine letzte Option, da ich nicht gefunden habe wo die falschen Einträge stehen. Da besteht aber immer die Gefahr, dass man dann bei den Einstellungen (Bedingungen, Suchpfade, Aliase, Compilier-Optionen, etc.) irgendwas übersieht und sich dann das Projekt nicht mehr komplieren lässt, oder noch schlimmer irgendwas anders compiliert wird und das das Programm nicht mehr so funktioniert wie gewollt. Bei älteren Projekten besteht immer die Gefahr, dass auf einmal beim Ausrichten der Record-Felder oder der Interpretation von Variablen was schiefgeht. Früher war Integer mal 16-Bit, heute ist es 32-Bit. Und Longint wird heute je nach Plattform als 32- oder 64-Bit vom Compiler interpretiert. Über Real48 sprechen wir lieber nicht. Da kann dann schon mal was schiefgehen...

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!
Wolfgang
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#8

AW: Ausgabeverzeichnis für EXE und DCU nicht änderbar?

  Alt 24. Apr 2023, 14:04
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.
https://www.delphipraxis.net/212898-...-werden-3.html
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:09 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