1

私はTclを初めて使用し、freewrapTCLSH.exeを使用してラップされたスクリプトを持っています

最初、プログラムを開始すると、パッケージが見つからないという苦情がありました

私はそれを「含む」ように見える行を編集しました

lappend auto_path ../../lib/crc

これは正常に機能し、.exeは問題なく起動しました。しかし、その後、exeファイルを別のフォルダーに移動すると、再び文句を言い始めました。exeが作成されると、すべてが実行されると思いました。しかし、これをうまく処理できないようです。最初は、ライブラリへのパス全体がスクリプトにハードコードされていましたが、その後はすべて正常に機能しました。ただし、exeが常に同じフォルダにビルドされているとは限らないため、これを変更する必要がありました。

この厄介な問題を回避する方法について何かアイデアはありますか?

4

2 に答える 2

2

../../lib/crcパッケージが検索されるたびに、現在の作業ディレクトリを使用して解釈されます。これを持っていることは、::auto_pathほとんどの場合、あなたが望むものではありません。

[file dirname [info script]]は現在ソースされているTclファイルのディレクトリを取得するために使用し、いくつかに相対パスを追加し、lib/crcfile joinフルパス名を取得するようにしfile normalizeます。結果file normalizeは私が追加するものです::auto_path(または他の方法で将来使用するために覚えています):

lappend ::auto_path [file normalize [file join [file dirname [info script]] ../mylib]]

明らかかもしれませんが、それでも:info script現在ソースであるファイルへのパスを返します。その呼び出しを含むファイルがソースされたときに何らかの形で記憶されているパスではありません。現在のスクリプトの場所を取得する場合は、適切なタイミングで実行されるようにします(たとえば、トップレベルで取得します)。

于 2013-01-29T11:03:21.517 に答える
1

必要なパッケージ (およびそのパッケージの依存関係) を exe に配布する必要があります。通常、必要なパッケージのディレクトリを vfs の lib フォルダーにコピーするだけです。

于 2013-01-29T16:58:00.210 に答える