代码之家  ›  专栏  ›  技术社区  ›  Mike Ellery

我应该如何发布一个预构建的Perl模块,以及为哪个版本的Perl构建?

  •  4
  • Mike Ellery  · 技术社区  · 14 年前

    这可能是一个多部分的问题。背景:我们有一个本地(C++)库,它是我们的应用程序的一部分,我们已经成功地使用SWIG来为这个库生成一个Perl包装器。我们现在想将这个Perl模块作为应用程序的一部分分发。

    我的第一个问题-我应该如何分发这个模块?有没有标准的方法来打包预构建的Perl模块?我知道ActiveState发行版有PPM,但我还需要为Linux系统分发它。我甚至不知道需要分发什么文件,但我猜至少是PM和其他文件。

    我的下一个问题-看起来我可能需要为我想要支持的Perl的每个版本构建我的模块项目。我如何知道应该为哪个Perl版本构建?有什么标准指南吗…或者更好的是,一种构建可与多个版本的Perl一起使用的包的方法?

    抱歉,如果我的问题没有意义-我对Perl的编译模块方面还比较陌生。

    澄清:底层编译源是 专有的 (封闭源代码),所以我不能只为包提供源代码和适当的make工件。希望我能,但在这种情况下不会发生。因此,我需要一个健全的方案来为我的模块打包预构建的二进制文件。

    2 回复  |  直到 14 年前
        1
  •  2
  •   Jonathan Leffler    14 年前

    我关注DBD::Informix,它是与DBI(Perl数据库接口)一起工作的Perl数据库驱动程序模块之一。用于连接到IBMInformix动态服务器(ID)的底层库是专有的,但是dbd::Informix代码本身不是。我在CPAN上发布这些代码,与任何其他Perl模块一样。人们可以下载这个源代码,并且(前提是他们的计算机上安装了Informix ClientSDK,以及Perl和DBI等),他们可以构建dbd::Informix来使用他们安装的Perl。

    我强烈建议您安排将Perl接口代码以源代码形式提供,即使它所接口的库是专有的。这允许人们使用他们拥有的任何版本的Perl来安装代码,而不需要您处理不一致性。

    如果您仍然希望提供二进制支持,那么您必须确定要支持哪些平台,并在每个这样的平台上使用Perl的标准版本构建模块。这会变得混乱。您需要访问每台机器的一个实例。当然,虚拟机使这变得更容易,但它仍然很难做到,平台和版本的数量只会增加。但是您仍然需要支持那些在其计算机上不使用标准版本Perl的人——这就是为什么需要以源代码形式提供Perl包装器接口的原因。

        2
  •  1
  •   Sinan Ünür    14 年前

    免责声明: 我几乎没有创建易于安装的二进制软件包的经验。因此,我正在使这个后CW更容易让其他人添加他们的建议。

    您应该使发行版以源代码形式可用,以便可以根据该系统的具体情况在每个系统上对其进行编译。我真的很喜欢 Module::Build 为此目的。

    对于Windows上的ActiveState用户,根据您是否希望支持 5.6 . 将32位和64位版本分别打包为 五点六 , 5.8 5.10 . 使用的版本 mingw 您可以使用安装 ppm 编译模块以保持二进制兼容性。

    另一个选择是使用 PAR::Packer 并将您的应用程序分发到par存档中。在这种情况下, PAR::WebStart 虽然我没试过,但可能有用。不过,我在过去的PAR档案室里取得了成功。