c++ - 为多个移动平台构建工具

标签 c++ build build-automation multiplatform

我们有一个针对多个移动平台的复杂 C++ 代码库。我们目前有 Windows CE (4.2 到 6.5 原始 CE 和移动基于这些),安卓 (2.1+), iPhone (4+), 快工作了 八达 (2.0+) 并且如果有任何新的 C++/CX 东西,很可能会添加 Windows Phone (8+)。加上 上的测试版本Win32 和共享一些代码的 Win64 上的服务应用程序。我们也已经尝试在 Linux 上编译单元测试,但问题已经出现(到目前为止业务量太小,但可能会改变)使其在其他一些 Linux 平台上工作。

我们目前为每个平台使用 native 工具编译代码。它们中的每一个都非常复杂,并且在其内部或周围有一些技巧可以实现合理的单击构建。对于 Bada,我们还没有解决三星调整过的 Eclipse 之外的构建问题,我们必须在生产环境中解决这个问题。

到目前为止,它是有效的,但越来越成为一个维护问题。目前最大的问题是 iPhone 构建,因为与 Visual Studio 项目文件和普通的 makefile 不同,无法手动在 XCode 项目中添加/删除/重命名文件,并且只有两个人拥有 MacOS boxen 和任何 XCode 经验(而每个人都有Windows 并了解 Visual Studio)。我们还需要为 Bada 目标创建一些 makefile(它是普通的 GNU 工具链,所以任何能够与这些工具链交叉编译的东西都应该做),而且我不会摆脱 Android 构建中的一些杂项:修复错误在 cygwin 下构建时的依赖处理,在 ant 构建脚本和 shell 胶水之上的一些hacks 来按摩 list 并将它们保持在一起。

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

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

  • 对于其他事情,我准备解决任何缺陷,但我显然希望将 shell 胶带和吐痰的数量保持在最低限度,因此它应该:
  • 能够与 Visual Studio、Eclipse 和 XCode 充分集成,以便每个环境都可以触发构建,将构建产品上传到相应的目标并将调试器附加到那里。
  • 能够构建Java并调用Android的自定义打包工具,因此我们不必破解Google在过去两年中已经两次无缘无故地不兼容更改的ant构建脚本(并且无法下载旧SDK)。
  • 能够安装各种数据文件并调用随机打包程序和随机其他脚本和工具之类的东西,所以它不必与太多的shell脚本混合。

  • 到目前为止,我们已经开始尝试 CMake (时间不多,所以没走多远,但很快就要做点什么)还想了SCons .然而,几年前我已经尝试使用 SCons 为 Windows CE 构建,但由于它为 Visual Studio 生成了 makefile 类型的项目,而那些在 VS2005 中不适用于嵌入式平台,我放弃了。 CMake 可以生成 native makefile,但 custom, bit out of date, branch CE需要。所以我想问一下是否有是否有我们可能想要研究的任何其他工具或任何已知的使用这些工具的绊脚石,我们应该注意 .

    更新:我在几个地方和 pixellight 找到了关于 android 原生二进制文件的说明。甚至还有直接调用打包工具生成apk的cmake脚本。还有 this shell script显示它。 iPhone usage似乎记录在这里。

    最佳答案

    根据我的个人经验,相同的 CMake 构建文件可用于跨平台生成和构建项目,至少适用于 Win32 (VS2005)、Linux(ubuntu) 和 OS X (10.5.8 Leopard)。 android app构建过程中使用CMake的项目有多个,例如http://code.google.com/p/android-cmake/ .有了所有这些选项,我认为 CMake 是一个不错的选择。进一步的 CMake 很容易上手,如果您之前有编写 configure.ac 和 Makefile.ac 文件的经验,则更容易上手。

    注意:CMake 的工作原理:

  • 开发人员/维护人员创建 CMakefile。
  • Builder 运行 cmake,它使用 CMakefile 生成特定于平台的构建文件。(linux makefiles/OSX makefiles/VS 项目文件)
  • Builder 触发 build 命令。
  • 关于c++ - 为多个移动平台构建工具,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9909846/

    相关文章:

    c++ - 如何在 C++ 中获取二维动态数组的输入

    iphone - 如何使用 xcodebuild 存档 iOS 版本?

    .net - MSBuild : how to suppress the warning summary at the end of the build

    java - Gradle 的 QueryDSL 问题

    java - 如何在构建服务器和开发人员的机器上使用不同的属性文件集?

    c++需要将int类型转换为unsigned int

    c++ - 代码块构建的 Exe 比 Visual Studio 构建的相同代码大将近 57 倍

    c++ - 我需要 C++ 连接器的示例代码来设置 "mysql_options"

    linux - cscope 和 ctags 文件似乎导致内核构建失败

    c# - 在 C# 中使用 MSBuild