9

我的印象是这个问题被问了一百次,但从未完全回答过。

我正在做一个小型项目,在某个时候应该为三大 PC 平台(Windows、Mac 和 GNU/Linux)发布,所以尽早将自己锁定在技术上是个坏主意。幸运但不幸的是,目前,在早期开发过程中,我们只针对 32 位 Windows。

在代码级别上,如果您选择正确的库,跨平台开发相对容易。在多个平台上构建软件也相对简单,我正在考虑使用 GYP 或 CMake。

问题是依赖关系。要构建您需要的项目:SDL、SDL_image、SDL_ttf、iconv、libxml2、libxmlmm、sigc++、wxWidgets、glew、bullet、openALsoft,以后可能还会添加更多。

到目前为止,我找到了三个选项:

  1. 签入源并将它们构建为项目的一部分
  2. 签入二进制文件
  3. 管理源树之外的依赖项

第一个似乎有点矫枉过正,因为您基本上需要维护库的分支和自定义构建系统。

当您的目标只有一个或两个平台时,第二个选项听起来像是要做的事情。但是,如果您计算所有不同的目标,包括 32/64 位变体,这也开始膨胀成几乎无法管理的东西。

第三个选项取决于环境。如果您让您的开发人员手动处理依赖项,您将永远不会在附近睡觉。仅仅构建每个依赖项并准备好使用几乎是不可能的。更不用说您无法确保每个开发人员都使用正确的版本。

如果您查看其他语言,它们会以不同的方式解决问题。对于像 npm、marvin 或 phing 这样的系统,您只需在项目中维护一些配置文件,然后这些工具会获取所需的任何依赖项。

我正在考虑集中构建依赖项,将它们打包成 zip/deb/rpm/whatever 包并将它们放入存储库。然后每个开发人员将在构建之前将其平台的依赖项复制到存储库中(但不签入)。这最好作为预构建步骤自动完成。

我特别不想要一个额外的构建系统。我环顾四周,唯一能远程做我想做的事可能是常春藤。但是要么我遗漏了一些东西,要么 Ivy 完全过度设计了这个问题。是否存在解决此问题的简单方法?

我正在建立自己的英寸。

4

1 回答 1

3

我建议不要建立自己的。

我们使用 ant/ivy/Hudson 来自动化我们的跨平台(Windows 和 Linux)构建。我们还使用 Nexus (Maven) 作为我们的工件存储库,其中包含我们的 3rd 方库的平台特定构建以及我们自己的应用程序。Hudson 与 Perforce(我们的软件存储库)完美集成。

我们还在为所有事物创建单独的 32 位和 64 位工件,而 ant/ivy 将使这变得更加容易。

这对我们来说效果很好。

于 2013-05-02T12:37:09.490 回答