### TSL编译工具 #### 内容 - 功能简介 - 应用场景 - 特性 - 编译范围 - TSL指令 - 调用效率的测试 - 依赖关系 #### 功能简介 将TSL代码编译成为可执行文件和动态库文件,支持windows与linux环境。 编译成为可执行文件,即开发的程序与应用可作为一个独立运行的小程序,不需要依赖天软客户端或天软解释器。 编译动态库文件,可将天软函数包编译成动态链接库,方便其它开发工具如C++等进行调用,为第三方开发工具提供支撑,如由TSL开发的算法等,让TSL语言程序可被更广泛地应用。 #### 应用场景 ##### 内容 - 编译可执行文件 - 编译动态库 ##### 编译可执行文件 此前,天软语言只支持脚本方式运行,即在.NET平台、本地解释器或.web平台中进行执行。若只作为天软的建模语言,已经满足了一般需求,然而,随着天软语言支持功能的扩展,其应用也越来越广泛,如用来开发编译桌面应用的天软TSL语言桌面开发工具,开发好的应用是需要通过TSL.exe去执行这个桌面应用的,这种方式不利于这些应用的发布,由此,编译成为可执行文件就显的很有必要。 另外,天软还提供了信创版的客户端,该客户端也是基于TSL语言的开发程,支持编译成可执行文件后,就可以将这些已开发的应用直接编译成windows或linux的可执行程序,用起来就会非常方便。 除此之外,还有例如一些管理工具,业务的应用的小程序等,都可生成为一个独立的可执行文件。 ##### 编译动态库 可将天软TSL语言函数包创建成一个动态链接库(即DLL文件),并将该函数包进行输出。如此,在第三方工具如C++中,只需将生成的该动态库进行引入后,就可直接调用,不再需要天软TSSVRAPI等包的支持。 还可以将一些复杂的算法,通过TSL语言进行开发后编译成动态库,放入到其它语言工具中,就可以直接进行调用,不需要重复开发。 #### 特性 TSL编译工具的三特性: 其中, 独立编译:目前,除Linux中编译动态库还需依赖GCC相关功能才能完成外,其它编译工作,如windows中编译可执行文件与动态库,及Linux中编译可执行文件等,都已实现不依赖其它编译工具就可独立完成。 线程安全:输出的动态库可被多线程并发,且线程安全。 接口高效:利用TSL编译出来的动态库,接口调用所花费的时间消耗在亚微秒级别,效率非常高,大概一秒钟可以调用107次,能适用于交易级别的应用。 #### 编译范围 编译工具可将TSL语言的源代码与函数库,以及相关的资源文件,如配置类.ini文件,桌面开发工具中的窗体.dfm文件、窗口资源文件等,都可以通过天软编译工具生成一个单一的目标文件(即单一的可执行文件或.so或.dll),该文件的运行仅依赖天软运行环境的动态库,可方便程序的直接运行与业务应用的安装发布。 #### TSL指令 根据编译目标大致可分为三块指令: 可执行文件(.exe),编译命--buildexe= 可选项一: -buildgui,用来指定编译出来的目标是Windows UI应用程序,默认为控制台应用程序。 可选项二:--buildico=,用来指定Windows icon图标。 以上两个可选项只在Windows下有效,在Linux中不生效。 动态库(.dll/.so),编译命--buildlib=, 可选项一--exports=,可以指定输出的函数。 包文件,编译命令--build= 另外,还新增了对包执行等相关命令 如执行包文件,命令为:--runpkg= 加载包文件,命令为:--pkg= 等等,详情可参考TSL命令集列表。 目前提供的指令功能分布大致如下: 如,将TSLDemo01.tsl程序编译成可执行文件,操作如下: 在文件路径下进入控制台,执行以下命令: tsl --buildexe=TSLDemo01.tsl --output=test01.exe 执行完后在当前路径中会新增一个test01.exe可执行文件,如下所示: 双击test01.exe即可启动运行该程序。 ##### 内容 - TSL命令集列表 - 命令集详细解析 ##### TSL命令集列表 执行命令行的命令为:tsl xxx Windows命令集
| 命令 | 功能说明 | 备注 |
| tsl.exe /? | 查看命令列表帮助,或TSL /? | 注意/前有一个空格 |
| -COMPILE|-COMPILEC [/S] [-S] tslfiename | 将tsl/tsf文件编译为二进制格式文件。 -COMPILE命令生成的文件后缀为.TSB - COMPILEC命令生成的文件后缀为.TSC 可选项 /S:递归模式,即加上该可选命令后,会从子目录中查找该函数。默认只在当前目录下查找。 -S:安静模式,不打印执行结果的信息 | 默认生成的文件与原文件同目录,如: Tsl -COMPILE TsfDemo01.tsf 作用:编译成二进制文件后,函数与脚本照样可以正常调用,可以用于隐藏源代码。 |
| 编译指令 | ||
| --buildexe=tslfilename | 将指定tsl文件编译成可执行(.exe)文件,默认生成文件名为default.exe,可执行文件默认图标为tsl编译器图标 | |
| 其可选项 | -buildgui 指定编译的可执行文件为Windows UI应用程序 | 默认为控制台应用程序 |
| --buildico=xxx.ico 指定可执行文件的图标 | 默认为TSL.exe的图标 | |
| --buildlib=tsl(tsf)filename | 将指定tsl/tsf文件编译成动态库(.dll)文件 | 默认生成文件名为default.dll |
| 其可选项 | --exports=func1[:exp1][,…] 将指定函数名输出在动态库中 | 指定多个函数用逗号分割 |
| --build=tslfilename | 将指定tsl文件编译成.tsg包文件,默认生成文件名为default.tsg | 可以通过函数获取包中资源内容rs: getglobalcache("@@tsl-resource@@",rs) |
| 编译指令的可选项 | --buildexe|--buildlib|--build通用的可选项 | |
| --output=filename | 给输出目标指定文件路径与名称 | 默认为 default.exe|default.dll|default.tsg 默认生成在当前路径下 |
| -strong | 编译所有引用,将所有依赖的引用都进行编译 缺省为仅编译调用的 | 解决调用了某些动态库不能被检测到的函数。 |
| --depends=fun1,fun2,… | 指定额外需要编译的函数列表 | 多个函数或路径用,分隔 |
| --dependsdir=dir1,dir2,… | 指定额外需要编译的函数路径 | |
| --excludes=fun1,fun2,… | 不编译某些函数 | |
| --resourcedir=foldername | 指定编译资源文件目录 | |
| --resourcepat=pat1,pat2,… | 指定资源文件的匹配串 | 需要搭配--resourcedir=一起使用 |
| -resourcekeepdir | 资源名保留相对路径 | |
| --extresource=filename1 [:keyname1],filename2… | 指定额外的资源 | |
| 运行指令 | ||
| --runpkg=packagename | 执行包文件 | 如:tsl --runpkg=runpkg.tsg |
| -eval tslstring | 执行TSL脚本串 | 如:tsl -eval “inttostr(100)” |
| tslfilename | 执行TSL脚本文件 | 如:tsl test.tsl |
| 其可选项 | -LIBPATH | 扩展函数查找路径 |
| -TESTMULTITHREAD N | 线程调用,N为线程数 | |
| -NODEBUGSERVER | 不启用调试服务器 | |
| -DEBUGSERVER | 开启调试服务器 | |
| -DEBUGPORT port | 指定调试监听端口 | |
| -DEBUGLISTEN ip | 指定调试监听地址 | |
| -DEBUGTHREADS N | 指定调试用于网络通信的线程数 | |
| -WAITATTACH | 运行时等待调试程序连接 | |
| -DEBUGLOGIN 1|0 | 是否需要进行用户登陆 | |
| --data-dir=datapath | 使用指定文件夹中的配置文件 | |
| --pkg=pgk1,pkg2… | 加载指定包中的函数 | |
| 其它指令 | ||
| -ENCODE configstring | 生成加密串 | 用于数据库配置串加密 |
| -ENCODEDEBUGPASS | 生成密码串的加密串 | 用于远程调试配置中密码的加密 |
| 命令 | 说明 | 备注 |
| TSL /? | 查看命令列表帮助 | 注意TSL后有一个空格 |
| 其它命令参考Windows命令集,注意大小写 |
| 执行命令 | 结果说明 |
| 默认情况下进行编译 命令行:tsl -COMPILE TsfFuncB.tsf | 执行结果:编译失败,找不到目标文件,原因是默认只在当前路径下查找。 |
| 在递归模式下进行编译 命令行:tsl -COMPILE /S TsfFuncB.tsf | 执行结果:编译成功,递归模式下,还会在当前目录下的子目录下进行查找。 |