rio*_*oki 9 c++ build-automation dependencies
我的印象是这个问题被问过一百次,但从未完全回答过.
我正在开展一个小型项目,在某些时候应该发布三大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 /任何包,并将它们放入存储库.然后,每个开发人员都会在构建之前将其平台的依赖项复制到存储库中(但不会检查它们).这优选地作为预构建步骤自动完成.
我特别不想要一个额外的构建系统.我环顾四周,唯一远程做我想要的东西可能是常春藤.但要么是遗漏了某些东西,要么常春藤完全是在设计这个问题.有什么简单的东西可以解决这个问题吗?
我是建立自己的几英里.
我建议不要构建自己的。
我们使用 ant/ivy/Hudson 来自动化跨平台(Windows 和 Linux)构建。我们还使用 Nexus (Maven) 作为我们的工件存储库,其中包含我们的第 3 方库以及我们自己的应用程序的特定于平台的构建。Hudson 与 Perforce(我们的软件存储库)完美集成。
我们还正在为所有内容创建单独的 32 位和 64 位工件,ant/ivy 将使这变得更加容易。
这对我们来说效果很好。