初心者なので開発の過程を覚える為に、作成の段階毎にフォルダを作り保存しておきました。
しかし、本日、最新のフォルダと思っていたフォルダに種々のファイルのxxx.dfmやxxx.pasが無いことに気づきました。
昔の動作が必要な場合を想定しフォルダを保存したつもりでした。しかし新しいフォルダなのに自動で古いフォルダを参照し更新してしまったため無くなっているようです。
新しいフォルダに集めようとしましたが、日付で区分してますが、どれがどれやら混乱してます。Windows特有の開発環境なのでしょうか、このような開発環境とは夢にも知りませんでした。
何か良い方法は無いでしょうか。私の説明....解りますか?
うまく説明できませんが、よろしくお願いします。
>このような開発環境とは夢にも知りませんでした。
概ねその様な環境です。
ユニットの表示でprogram Project1;が先頭にある
ユニットを表示
Unit1 in 'Unit1.pas' {Form1};の
'Unit1.pas'がそのファイルの保存場所
プロジェクトのオプションで保存先その他のフォルダーの設定
等を確認してみて下さい。
何処かで古いフォルダを参照しているはずです。
「最新ファイルを集める」には「プロジェクトマネージャ」のパスを参照すればイイと思うけど、そもそも「散らかさない」ようにするのがカンジン。
散らかさないコツは、プロジェクトのフォルダを変える時には .dskファイルを廃棄してしまうこと。
.dskファイルにはプロジェクトのソースファイルのPathが記録されているので、.dskファイルを新フォルダにコピーしてしまうと、コンパイル時に古いフォルダに入っているソースを参照してしまうことになる。
何とか1つのフォルダに集めることができました。今後は1つのフォルダで構築することにします。
フォルダを調べたのですが.dskファイルが見つかりませんでした。
「プロジェクトのオプションで保存先その他のフォルダーの設定」も見つかりませんでした。私の環境は皆さんと違うのでしょうか。
当方の開発環境はDelphi7エンタープライズ版ですが、バージョンでも違うのでしょうか。
> 今後は1つのフォルダで構築することにします。
それも良いでしょうが、
私は定期的にフォルダを変えています。
仕様変更や、未経験の処理を加えるとせっかく正常に動いていたものが動かなくなることが多いからです。
少々の変更なら記憶で戻せますが、多くの場合、記憶は更に泥沼へと導くものです。
私の場合は、
1.現フォルダをそのままコピーし、新しいフォルダ名をつけます。
2.新フォルダの DPR をダブルクリックして新フォルダよりプロジェクトを開きます。
3.ここが決定的に肝心なところですが、
メニュ[プロジェクト|オプション|ディレクトリ/条件]の"(実行ファイルの)出力ディレクトリ", "ユニット出力ディレクトリ" の末尾のフォルダ名を新規フォルダ名に変更します。
これをしないと、過去のフォルダ内のファイルと混じってしまい訳が解らなくなります。
> Windows特有の開発環境なのでしょうか、
この件に関する限りでは、Windows は無実です。
Delphi の仕様です。
> このような開発環境とは夢にも知りませんでした。
メニュ[プロジェクト|オプション|ディレクトリ/条件]で設定したフォルダにしか保存しません。
メニュ[ファイル|プロジェクトに名前をつけて保存] および [名前をつけて保存] をしても、Delphi はこのフォルダを覚えておきません。
[上書き保存]、終了時に表示される [保存しますか] に Yes とした場合、コンパイルした場合の保存先は、あくまで [ディレクトリ/条件] に従います。
[ディレクトリ/条件] が無指定の場合には保存先フォルダを聞いてきますので問題は起こりませんが、毎回聞いてくるのでうっとおしいことになります。
[ディレクトリ/条件] のフォルダが存在しない場合、コンパイルすると「**.dcu が作成できません。コンパイルできませんでした」という「致命的エラー」が出ます。
そうなんです。
>仕様変更や、未経験の処理を加えるとせっかく正常に動いていたものが動かなくなることが多いからです。
私も、こういう考えでフォルダを変えていたのです。しかし意図することと違う保存の仕方になっていたのです。
プロジェクト・オプション・ディレクトリ/条件の説明ヘルプを見たのですが.....私の頭では....です。
最初の.DCUファイルさえも解りません。これは何をしているのでしょうか。
もしよろしかったら教えて下さい。
それと上にあるような、前回発言を参照すると文字色が変わる方法はどうするのでしょう。半角で>...としてみましたが色は変わっているのでしょうか。
わしは、プロジェクトのフォルダにdcuフォルダを作成し、ユニット出力
ディレクトリを「.\dcu」にしておる。
ユニットと同じ位置にdcuができるのが嫌いなのじゃ。
コンパイルオプション付のユニットもあるので、同じ場所に作成されると
誤動作の元になりそうで怖いんじゃ。
リリース時に再構築しておけば問題ないと思うかが、心配性なのじゃ。
プロジェクトをコピーしておく場合は、さどやま氏と同じじゃがのう。
> わしは、プロジェクトのフォルダにdcuフォルダを作成し、ユニット出力
> ディレクトリを「.\dcu」にしておる。
これいい案ですね。もらいます。
> DCUファイルさえも解りません。これは何をしているのでしょうか。
最終的に実行ファイルを作ることがコンパイラであるDelphiの仕事です。
一言で言えば「マシン語に翻訳する」作業ですが、いくつかの工程があります。
1.マシン語への変換
DCUファイルとは、Delphiがマシン語に変換したファイルのことです。
これはファイル単位で行います。Unit1, Unit2 があればそれごとに変換しDCUファイルとして保存します。
コンパイルするときには、前回DCUを作ってから変更されていないファイルはコンパイルせず、前回のDCUファイルをそのまま使います。
これによりコンパイル時間を最小にできます。
Delphi に限らずどの処理系でも行っていることです。
この作業を「メイク」というようです。
2.個々に作成したDCUファイルをつないで1つの実行ファイルに仕上げます。
この作業は「リンク」と呼ばれるようです。
ただ単純につなぐだけでは動きませんので、Windows の仕様にしたがった実行ファイルに整えることも行います。
例えば、Unit2 から参照している unit1 の Form1.Edit があるとすると、Form1.Edit の部分は、実行ファイルを起動したときの Form1.Edit のアドレスに書き換えるとか。
> プロジェクト・オプション・ディレクトリ/条件の説明ヘルプを見たのですが.....
私も不親切な内容だと思います。
ただ、作成されたデータの保管場所は、エンドユーザが決めるべきでしょう。そうでないと管理能力を奪われます。
それをDelphiに教えるのが [プロジェクト・オプション・ディレクトリ/条件] の役割です。
他の言語でいかに水準の高い人でも、Delphi を初めて使えばこれは解らないことです。しかし、重要なことなので、そのように解説されるべきです。
Delphi はここで指定されたディレクトリを頼りに DCU ファイルの作成とリンク作業を行います。
遠里 諏我理 さんから私がもらった方法を試すともう少し解りやすいでしょう。
私も少し混乱していたようです。
各ファイルの保存先
1.ソースコード関連(pas. dfm 等)
Progectファイル(DPR)のuses節で指定されたディレクトリに保存。
パス名は開いたDPRがあるディレクトリを基準にして相対パスで記述される。
よって、"in Unit1.pas" のようにファイル名だけの場合はDPRと同じ。
2.DCU ファイル
ディレクトリ条件で指定した[ユニット出力]ディレクトリ
3.実行ファイル
ディレクトリ条件で指定した[出力]ディレクトリ
一晩考え、朧気ながら判ってきたら、「dcuフォルダを作成する」って凄いアイデアじゃありません?どうしてDelphiに標準で搭載されないのでしょう。
.dcuはフォルダ毎コピーする事を考えてprojectフォルダの中にフォルダを作って、そこに出力するんですね。
そうすれば.dcuは見えず(というより隠蔽され)視覚的にその他のファイルが見やすいですね。
私が普段使っている少々大きめの機械でIBMのコンパイラー言語を使ってシステムを作るときは、実行ファイルの保存先は自分で決めますが、.dcuに相当するファイルは見たことが無く奇異に感じました。
今思えば、多分、見えない部分に出力していたんだなぁと思いました。
コンパイルの方法まで細かに指定するアプリケーションなら必要かもしれませんが、論理の展開を重視するシステム構築方法では、あまり関係ない(というより面倒・邪魔)ように思えます。
タイトルとかなり違ってきましたが、初心者の私のタイトルを見て、誰もこんな凄いアイデアを言う人達から教えを受けているとは思わないでしょう。
おしい、勿体ないと思います。こういう地道な改良があるとDelphiは、もっとメジャーになると思われます。
勿体ないので、もう少し皆さんの目に触れるように解決のチェックを付けません。
皆さん、ありがとうございました。
ツイート | ![]() |