TclKit / StarKit / StarPack in Practice

风行水上 @ 2014-11-06 13:59:37
标签:

    本页面将展示TclKit, StarKit, StarPack使用和构建的实际例子。

    用TclKit执行程序

    TclKit本身可以认为就是一个Tcl Shell,所以使用起来和"tclsh"也没什么区别,直接调用就是了。

    % tclkit8.6 vtal.vfs/main.tcl
    

    TclKit的存在使得下载和安装Tcl环境变得非常容易,也使得我们可以方便的使用不同版本的Tcl。

    用TclKit打包示例

    % ls -l vtal.vfs/                          # 需要以 ".vfs" 结尾
    total 24
    lrwxrwxrwx.  main.tcl -> vtal.tcl          # 启动文件
    -rw-r--r--.  stop.gif
    -rw-r--r--.  tal.tcl
    -rw-r--r--.  vtal.tcl
    
    % sdx wrap vtal.kit                     # 生成 StarKit 文件 "vtal.kit"
    
    % sdx wrap vtal -runtime tclkit8.6      # 生成 StarPack 文件 "vtal"
    
    % ls -l
    -rwxr-xr-x. 4314501 vtal                # 包含了Tcl运行环境
    -rwxr-xr-x.    9140 vtal.kit            # 没有包含Tcl运行环境
    drwxr-xr-x.    4096 vtal.vfs            # 原始目录依然存在
    
    % sdx version vtal.kit
    2014/11/06 05:09:49  71803-73007  vtal.kit
    

    StarKit Internal

    生成的StarKit文件"vtal.kit"也可以直接执行,看一下其内容就知道原因了。

    #!/bin/sh
    # \
    exec tclkit "$0" ${1+"$@"}
    package require starkit
    starkit::header mk4 -readonly
    ^Z... ... ...
    
    • 利用Tcl注释通过shell环境调用tclkit命令来执行当前的StarKit
    • 利用Ctrl-Z结束标记分隔文本数据和二进制数据

    StarKit中文件的定位

    StarKit本身是一个VFS,需要加载其中的文件时,需要一些“特殊”处理。

    starkit::startup 
    
    source [file join $starkit::topdir lib myfile.tcl] 
    
    starkit::autoextend [file join $starkit::topdir lib tcllib]
    

    上面代码的关键是变量$starkit::topdir

    参见 A Simple Multi-File Starkit Example

    还有一个技巧是利用info script命令,这个命令返回当前执行脚本的路径,进而可以根据其他文件的相对路径计算出全路径。

    source [file join [file dirname [info script]] myfile.tcl]
    

    StarPack Internal

    生成的StarPack文件"vtal"是一个二进制程序,包含了Tcl运行时环境,用户不需要安装Tcl环境也可以执行。

    网络资源

    标签:

      分享到:
      comments powered by Disqus

      29/33ms