我们有一个复杂的C++代码库,针对多个移动平台。我们目前支持Windows CE(4.2到6.5,基于原始CE和Mobile),Android(2.1+),iPhone(4+),几乎可以工作的Bada(2.0+),如果新的C++/CX功能可用,可能会添加Windows Phone(8+)。此外,我们还在Win32上进行了测试版本,并在Win64上提供了服务应用程序,共享一些代码。我们还尝试在Linux上编译单元测试,但是由于业务量太小,所以尚未得到解决,但这可能会改变。
我们目前使用每个平台的本地工具来编译代码。每个工具都非常复杂,并且周围都有一些黑客技巧,以实现合理的单击构建。对于Bada而言,我们尚未解决Samsung调整过的Eclipse之外的构建问题,这是我们必须为生产做的事情。
到目前为止,它可以正常工作,但越来越成为维护问题。当前最大的问题是iPhone构建,因为与Visual Studio项目文件和普通的makefiles不同,无法手动在XCode项目中添加/删除/重命名文件,只有两个人拥有MacOS boxen并且有任何XCode的经验(而每个人都有Windows并且知道Visual Studio)。我们还需要为Bada目标创建一些makefiles(它是纯GNU工具链,因此任何能够使用这些交叉编译的东西都应该可以),并且我不介意摆脱Android构建中的一些修补程序:在cygwin下构建时处理依赖关系的错误修复,一些在ant构建脚本之上的黑客技巧和shell粘合剂来整理清单并将其全部保持在一起。
因此,我正在寻求有关统一此组不同平台的构建过程的建议。
我们目前使用每个平台的本地工具来编译代码。每个工具都非常复杂,并且周围都有一些黑客技巧,以实现合理的单击构建。对于Bada而言,我们尚未解决Samsung调整过的Eclipse之外的构建问题,这是我们必须为生产做的事情。
到目前为止,它可以正常工作,但越来越成为维护问题。当前最大的问题是iPhone构建,因为与Visual Studio项目文件和普通的makefiles不同,无法手动在XCode项目中添加/删除/重命名文件,只有两个人拥有MacOS boxen并且有任何XCode的经验(而每个人都有Windows并且知道Visual Studio)。我们还需要为Bada目标创建一些makefiles(它是纯GNU工具链,因此任何能够使用这些交叉编译的东西都应该可以),并且我不介意摆脱Android构建中的一些修补程序:在cygwin下构建时处理依赖关系的错误修复,一些在ant构建脚本之上的黑客技巧和shell粘合剂来整理清单并将其全部保持在一起。
因此,我正在寻求有关统一此组不同平台的构建过程的建议。
- 它绝对必须处理iPhone和Bada可执行文件以及Android构建的本地部分(因为没有人拥有三个平台来分别测试)。
- 必须处理由多个共享库、一个主二进制文件、一个相同平台的测试二进制文件和仅在某些平台上构建的一些辅助二进制文件组成的大型项目(目前仅限于Win32)。
- 必须能够从版本控制系统生成构建配置头文件和Java文件以及一些用户定义变量,因为我们为各种客户做了18个略有不同的构建,并且数量还在增加。
- 当然,它必须自动处理依赖项(头文件),并且通常要可靠。
- 能够与Visual Studio、Eclipse和XCode集成,以便每个环境都能触发构建、上传构建产品到相应的目标并在那里附加调试器。
- 能够构建Java并调用Android的自定义打包工具,这样我们就不必再去修改Google过去两年中任意更改了两次的ant构建脚本(而且旧版SDK无法下载)。
- 能够安装各种数据文件并调用随机打包程序、其他随机脚本和工具等,这样就不必混合太多shell脚本。
到目前为止,我们已经开始尝试使用CMake(由于时间不充足,所以没有取得太大进展,但很快就必须做些什么),同时也考虑过SCons。然而,我几年前曾尝试使用SCons为Windows CE构建,但由于它会为Visual Studio生成类似于makefile的项目,而这些项目在VS2005中无法在嵌入式平台上运行,所以我放弃了。CMake可以生成本地makefiles,但需要一个自定义、有点过时的分支来支持CE。因此,我想问一下,是否还有其他工具值得我们研究,或者这些工具存在什么已知的障碍问题需要我们注意。
更新:我在几个地方找到了关于Android本机二进制文件的说明,pixellight甚至有一个cmake脚本,通过直接调用打包工具来生成apk。此外,这个shell脚本也可以实现。在iPhone上使用似乎在这里有记录。