我的印象是这个问题被问了一百次,但从未完全回答过。
我正在做一个小型项目,在某个时候应该为三大 PC 平台(Windows、Mac 和 GNU/Linux)发布,所以尽早将自己锁定在技术上是个坏主意。幸运但不幸的是,目前,在早期开发过程中,我们只针对 32 位 Windows。
在代码级别上,如果您选择正确的库,跨平台开发相对容易。在多个平台上构建软件也相对简单,我正在考虑使用 GYP 或 CMake。
问题是依赖关系。要构建您需要的项目:SDL、SDL_image、SDL_ttf、iconv、libxml2、libxmlmm、sigc++、wxWidgets、glew、bullet、openALsoft,以后可能还会添加更多。
到目前为止,我找到了三个选项:
- 签入源并将它们构建为项目的一部分
- 签入二进制文件
- 管理源树之外的依赖项
第一个似乎有点矫枉过正,因为您基本上需要维护库的分支和自定义构建系统。
当您的目标只有一个或两个平台时,第二个选项听起来像是要做的事情。但是,如果您计算所有不同的目标,包括 32/64 位变体,这也开始膨胀成几乎无法管理的东西。
第三个选项取决于环境。如果您让您的开发人员手动处理依赖项,您将永远不会在附近睡觉。仅仅构建每个依赖项并准备好使用几乎是不可能的。更不用说您无法确保每个开发人员都使用正确的版本。
如果您查看其他语言,它们会以不同的方式解决问题。对于像 npm、marvin 或 phing 这样的系统,您只需在项目中维护一些配置文件,然后这些工具会获取所需的任何依赖项。
我正在考虑集中构建依赖项,将它们打包成 zip/deb/rpm/whatever 包并将它们放入存储库。然后每个开发人员将在构建之前将其平台的依赖项复制到存储库中(但不签入)。这最好作为预构建步骤自动完成。
我特别不想要一个额外的构建系统。我环顾四周,唯一能远程做我想做的事可能是常春藤。但是要么我遗漏了一些东西,要么 Ivy 完全过度设计了这个问题。是否存在解决此问题的简单方法?
我正在建立自己的英寸。