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