我是Tcl的新手,我有一个使用freewrapTCLSH.exe包装的脚本
首先,当程序启动时,程序抱怨没有找到包
我编辑了似乎要“包含”它的行
lappend auto_path ../../lib/crc
这很好用.exe开始没有问题。但后来我将exe移动到另一个文件夹,它又开始抱怨了。我认为一旦exe被创建,一切都会完成。但它似乎并没有很好地处理这个问题。 起初,lib的整个路径被硬编码到脚本中,然后一切正常。但是,由于我们不能依赖于始终在同一文件夹中构建的exe,因此必须进行更改。
关于如何解决这个恼人的问题的任何想法?
答案 0 :(得分:2)
../../lib/crc
。有了这个东西,你的::auto_path
几乎总是不是你想要的。
我使用[file dirname [info script]]
获取当前来源的Tcl文件的目录,添加lib/crc
file join
的某个file normalize
的相对路径,确保获得file normalize
的完整路径名。 ::auto_path
的结果是我添加到lappend ::auto_path [file normalize [file join [file dirname [info script]] ../mylib]]
的内容(或者记住将来以其他方式使用):
info script
这可能是显而易见的,但仍然是:{{1}}返回当前为源文件的路径,而不是以包含对其的调用的文件来源记住的路径。如果您想获取当前脚本位置,请确保它在正确的时间发生(例如,在顶层执行)。
答案 1 :(得分:1)
您应该将所需的包(以及该包的依赖项)提供给您的exe。 通常这只涉及将所需包的目录复制到vfs中的lib文件夹。