1

我是 Tcl 新手,我有一个使用 freewrapTCLSH.exe 包装的脚本

一开始,程序启动时抱怨找不到包

我编辑了似乎“包含”它的行

lappend auto_path ../../lib/crc

这工作正常,.exe 启动没有问题。但后来我把 exe 移到另一个文件夹,它又开始抱怨了。我认为一旦创建了 exe,一切都会完成。但它似乎并没有很好地处理这个问题。起初,lib 的整个路径都被硬编码到脚本中,然后一切正常。但是由于我们不能依赖始终在同一个文件夹中构建的 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返回当前作为源文件的路径,而不是在包含对它的调用的文件被 sourced时以某种方式记住的路径。如果您想获取当前脚本位置,请确保它发生在正确的时间(例如,在顶层执行)。

于 2013-01-29T11:03:21.517 回答
1

您应该将所需的包(以及该包的依赖项)交付到您的 exe 中。通常这只涉及将所需包的目录复制到 vfs 中的 lib 文件夹中。

于 2013-01-29T16:58:00.210 回答