不太了解 waf,但 CMake 非常适合您的要求。我知道 waf 是用 Python 编写的,Python 是我个人最喜欢的编程语言 ATM。
我的主要要求是:
必须能够在windows/linux和android中编译软件。
CMake 在 Windows 和 Linux 上做得非常好,但任何其他值得一提的构建系统也是如此。
有人为 CMake 编写了一些 Android 脚本。找不到类似 waf 的东西(我的 Google-fu 什么也没找到。)
必须准备好运行测试。
CMake 有一个兄弟测试框架。
必须能够很好地与其他必须使用另一个构建系统编译但很可能必须从源代码编译的库一起使用。
CMake 与 pkg-config 有很好的集成,并且可以链接到任意共享库。
必须能够添加自定义步骤,例如,在编译之前从一些文件(主要是图形)生成一些数据,所有这些都集成在构建系统中。
CMake 可以生成自定义规则。
一些强烈的偏好是:
准备支持 MAC 编译。
CMake 很好地支持 Mac。如果你愿意,它甚至可以让你成为一个 Xcode 项目,但它也可以进行命令行构建。
能够从 linux 交叉编译尽可能多的平台(可能是 windows/linux/android 但不能 MAC?)
CMake 支持交叉编译。CMake 不会是交叉编译带来痛苦的主要来源——实际上其他一切都会。
特别是关于 Mac 的交叉编译。考虑到您无论如何都需要访问 Mac 以获取库和头文件,您需要为 GCC 和 clang 和 LLVM 等打补丁,为该平台进行交叉编译是可能的,但不值得。我唯一合理的理由听说经历了这么多痛苦的是运行一个自动构建服务器。无论如何,如果你有一个工作的 Linux -> Mac 工具链,你应该能够与 CMake 交叉编译,就像它是任何其他 Unix 平台一样。
如果需要,能够添加对 iOS 编译的支持。
可以做iOS交叉编译,但需要Mac。
如果调用接口类似于 autotools 的调用接口会很好,因为它是很多人都知道的并且有据可查。
编写一个只调用 CMake ( cmake .
) 的配置脚本。然后,您的用户可以./configure && make && make install
在有意义的平台上进行操作。还有CPack可让您生成 DEB、RPM、NSIS (Windows) 和 DMG (Mac) 安装程序/包。
一些问题:
如果我有一些罕见的需求,哪个构建系统更适合扩展?
CMake 是非常可扩展的。它可以扩展以支持新的语言和目标平台。(鉴于 waf 是用 Python 编写的,它也很容易被破解。)
目前两者都维护得很好吗?(我主要想知道waf)。
CMake 成熟且维护良好。
社区:如果我发现问题,根据您的经验,两个社区都足以支持我?
老实说,社区和可用的扩展是让我从像 bakefile 这样的东西回到 CMake 的原因。