创建和使用库
介绍
Gambas库允许在项目之间共享代码。对于编写较大的项目,或者甚至是几个具有相同功能或对象的项目是非常有用的。
库是可以在另一个项目中使用的Gambas可执行文件,而不是Gambas语言的扩展组件。
引言
-
总是应该为自己需要共享的代码创建库而不是组件,并且应能与项目一起发布。
-
组件 就像Gambas语言的扩展,应能与Gambas源代码一起发布。
库搜索路径
执行依赖于库的项目时,将按如下顺序在以下路径中搜索库的可执行文件:
顺序
|
路径
|
备注
|
1.
|
<项目可执行文件所在目录>/<名称>.gambas
|
向后兼容。
|
2.
|
$XDG_DATA_HOME/gambas3/lib/<厂商>/<名称>:<版本号>.gambas
|
如果定义了环境变量$XDG_DATA_HOME 。
|
3.
|
~/.local/share/gambas3/lib/<厂商>/<名称>:<版本号>.gambas
|
如果没有定义环境变量 $XDG_DATA_HOME 。
|
4.
|
<项目附加存档目录>/<厂商>/<名称>:<版本号>.gambas
|
项目附加存档目录是在“项目”->“属性”对话框的“库”选项卡中定义的项目属性。
|
5.
|
/usr/lib[/multiarch]/gambas3/<厂商>/<名称>:<版本号>.gambas
|
默认情况下,由Gambas IDE 打包程序创建的二进制库软件包默认安装在这里,并且在全系统范围内可以使用(这对于多用户的计算机很重要)。在基于Debian的实现级别中, multiarch (多重架构)依赖于发行版, 请参见 Debian Multiarch
目前(截至2017年6月19日),Gambas自动工具打包程序并未包含支持该规则。库的安装是根据本地发行版对automake实用程序的设置。
使用/usr/lib(使用特定子目录的情况除外)安装非发行版软件违反了LSB文件系统层次结构(FSH)标准。特别是,从发行版重新安装或升级系统可能甚至必然 会 覆盖/usr/lib目录。FSH(3.0版)第4.9节专门讨论了本地安装软件的问题,并建议使用传统的 usr/local 目录。
|
6.
|
/usr/bin/<厂商>/<名称>.gambas
|
因为用Gambas编写的标准程序可以被作为库使用。
如上所述,使用/usr/bin路径(使用特定子目录的情况除外)违反了FSH标准。本地安装的软件可能会被系统升级覆盖或删除。
|
第一个和最后一个主要是为了向后兼容。
第二个和第三个位置是
当前用户 安装库的位置。当从库的源项目生成可执行文件或者从Gambas农场服务器安装库时,这些库都会被自动安装在“单用户范围”的基础上。
这种“单用户范围”的基础实际上使用非常方便,因为它允许开发人员和/或测试人员使用最新的版本,即“不稳定”的版本,而不会对系统范围的“稳定”版本造成干扰。
Top
如何从项目中创建库?
创建一个正常的Gambas项目。在“项目属性”对话框中,选择“库”作为项目类型。填写厂商名称(重要!)。
只有标有
EXPORT 关键字的类才会被导出,并且对使用该库的项目可见。
然后生成项目可执行文件。可执行文件将被安装在(3)中。
Top
如何在项目中使用库?
打开另一个项目。打开项目的属性对话框并转到“库”选项卡。可以在这里添加所有已安装的库。如果使用的库依赖于另一个库,则必须定义正确的顺序,这些库将从顶部(第一个)加载到底部(最后一个)。
[这需要更多的解释]
Top
如何在这台计算机或另一台计算机上安装全系统的库?
从库中创建安装包(Ctrl-Alt-I)。在目标计算机上安装此程序包。如果在其他计算机上安装此软件包,则库将被安装在(5)中。
注意,搜索顺序总是优先选择用户主目录中的版本,而不是系统主目录中的版本。因此,当完成测试时,请确保删除本地副本,即单用户范围的副本。
Top
如何测试库
可以在库的内部实现测试。请记住,只有标记为EXPORT的类对使用库的项目可见(公开)。因此,在库项目本身中,可以包含未公开的类或模块来测试库的特性。
Top
更深入的话题
使用相对路径访问文件
有时可能希望使用
相对路径 访问文件。但文件在哪个可执行文件中呢?库可执行文件或是使用库的项目可执行文件。要访问库可执行文件本身里的文件,只需使用./开头启动相对路径。如果需要访问位于主项目里的文件,则必须以../开头开始相对路径。
库依赖
[待写]
“初始化”库
有时,当主项目执行时,可能需要库在加载时执行一些自动“启动”处理。也就是说,即使在主项目尝试使用它的“公开特性”之前,库也需要做一些事情。
实现的方法是公开一个可调用的例程(比如在被导出模块中的“启动”方法),这样主程序就可以在使用任何有用的功能之前调用该方法。一旦这样多做几次,会发现这是痛苦的...,必须确保主项目中某一处的调用能是对库的第一次访问,而且后续可能不得不在库内部跟踪启动是否已被完成,等等。而且你可能需要在库内部跟踪启动是否完成等。
更好的方法。独立于主项目执行逻辑且自动进行。[More to come...]
发行库
发行软件和相关库给其他系统上的用户,请
特别注意 上面关于违背FSH标准的警告。
Top
参见