为多个移动平台构建工具

Jan*_*dec 8 c++ build-automation build multiplatform

我们有一个针对多个移动平台的复杂C++代码库.我们目前有Windows CE(原始CE和移动版本为4.2到6.5),Android(2.1 +),iPhone(4 +),几乎可以使用Bada(2.0+),如果有新的C++/CX,可能会添加Windows Phone(8+).加上Win32上的测试版和Win64 上的服务应用程序共享一些代码.我们也已经尝试在Linux上编译单元测试,并且已经出现了问题(到目前为止业务量太小,但可能会有所改变),以使其在其他Linux平台上运行.

我们目前使用每个平台的本机工具编译代码.它们中的每一个都非常复杂,并且在其中或周围有一些黑客可以实现合理的单击构建.而对于Bada来说,我们还没有解决三星调整过的Eclipse之外的版本,我们必须为生产做些什么.

到目前为止它的工作原理,但正在变得越来越多的维护问题.目前最大的问题是iPhone构建,因为与Visual Studio项目文件和普通makefile不同,它不可能手动添加/删除/重命名XCode项目中的文件,只有两个人拥有MacOS boxen和任何XCode的经验(虽然每个人都有Windows并且知道Visual Studio).我们还需要为Bada目标创建一些makefile(它是普通的GNU工具链,所以任何能够与那些交叉编译的东西都应该这样做)并且我不会在中期摆脱Android构建中的一些kludges:修复bug在cygwin下构建时的依赖性处理,在ant构建脚本和shell胶水之上的一些hacks按摩清单并将它们保持在一起.

因此,我正在寻找有关如何统一这组不同平台的构建过程的建议.

  • 它绝对必须处理构建iPhone和Bada可执行文件以及Android构建的本机部分(因为没有人有所有三个平台分别进行测试).
  • 必须处理由几个共享库组成的大型项目,一个主二进制文件,一个用于相同平台的测试二进制文件和一些仅在某些平台上构建的辅助二进制文件(当前仅限Win32).
  • 必须能够使用版本控制系统的版本和一些用户自定义变量生成构建配置头和Java文件,因为我们做了18并为不同的客户计算略有不同的构建.
  • 当然,它必须自动处理依赖项(头文件)并且通常是可靠的.

对于其他我准备解决任何缺陷的事情,但我显然希望保持壳管胶带和吐出的量最小,所以它应该:

  • 能够与Visual Studio,Eclipse和XCode集成足以使每个环境都能触发构建,将构建产品上传到相应的目标并在那里附加调试器.
  • 能够构建Java并为Android调用自定义打包工具,因此我们不必破解Google在过去两年中无偿且不兼容地更改两次的ant构建脚本(并且无法下载旧SDK).
  • 能够安装各种数据文件并调用随机打包器和随机的其他脚本和工具和东西,因此它不必与太多的shell脚本混合使用.

到目前为止,我们已经开始尝试CMake(没有太多时间,因此没有达到目标,但很快就要做一些事情)并且还考虑了SCons.但是几年前我已经尝试使用SCons for Windows CE构建,但是因为它为Visual Studio生成了makefile类型的项目,而那些在VS2005中不适用于嵌入式平台,所以我放弃了.CMake可以生成本机makefile,但CE需要一个定制的,过时的分支.所以我想问一下我们可能想要查看的其他工具,或者我们应该注意这些工具的任何已知绊脚石.

更新:我在几个地方找到了android原生二进制文件的说明,pixellight甚至有cmake脚本通过直接调用打包工具生成apk.另外这个shell脚本显示它. 这里似乎记录了iPhone的使用情况.

Sam*_*een 5

在我的个人经验中,相同的CMake构建文件可用于在至少Win32(VS2005),Linux(ubuntu)和OS X(10.5.8 Leopard)的平台上生成和构建项目.在Android应用程序构建过程中有多个项目可以使用CMake,例如http://code.google.com/p/android-cmake/.有了所有这些选项,我会认为CMake是个不错的选择.如果您以前有过编写configure.ac和Makefile.ac文件的经验,那么进一步的CMake很容易获取,甚至更容易.

注意:CMake的工作原理:

  1. Developer/Maintainer创建CMakefile.
  2. Builder运行cmake,它使用CMakefile生成特定于平台的构建文件.(linux makefiles/OSX makefile/VS project files)
  3. 生成器触发构建命令.