基于Python的构建工具
最近我在研究构建系统,但找不到合适的工具。我觉得一些工具太简单了,比如bjam和CMake的语法我不喜欢,而且它们只支持C/C++,这让我很不爽。Ant和NAnt也太偏向某种语言了。
我很喜欢用真正的编程语言来做构建工具,而Python正好适合这个需求。我在看Scons和waf,在这两者中,我觉得waf最接近我想要的,但我还是觉得还有很多工作要做,才能支持我计划中的所有功能,而我应该把精力放在编码上。
我想要的功能有:
支持包含文件和库(适用于C/C++、Java、C#、Python)
我想使用不同版本的编译器,并支持不同的操作系统和CPU架构:
- 对于C/C++:MSVC、gcc(cygwin、mingw、linux版本)、llvm-gcc、DragonEgg、Clang
- 对于C#:.Net编译器、Mono(适用于Windows和Linux)——这些都要支持不同的.Net版本(像NAnt的:'net-2.0'、'net-3.5'、'net-4.0'、'mono-2.0'、'mono-3.5'……)
我想使用SWIG来支持C#、Python、Lua、Java等的包装器生成。
我想要的不仅仅是调试和发布配置——就像Visual Studio那样支持得很简单。例如:一个共享库项目用MSVC构建C#包装,另一个用mingw构建Python包装,发布版本有不同的选择——包括非优化、完全优化、生产版、混淆版……
我希望它能考虑项目跟踪。解释一下:如果我有一个使用SWIG的共享库项目,还有一个加载这个SWIG包装的C#项目,构建这个解决方案/环境/工作空间时,就应该把生成的共享库、这个共享库依赖的其他共享库复制到工作目录,以及把C#生成的包装器复制到C#项目中,然后再构建C#项目。
希望有的功能:在其他机器上进行网络测试的部署。
希望有的功能:我不太在乎IDE项目文件的生成(比如CMake为Visual Studio生成的),因为IDE的版本和兼容性会变化,而且有很多不错的IDE(比如C/C++的CodeBlocks、CodeLite、Eclipse CDT——这些都可以放在U盘上,VS就不行),但希望有的功能是makefile集成——一个简单调用这个构建工具自己的makefile/脚本的makefile——我在Scons中见过类似的。
回头看看我写的,觉得我要求太多了 :),但我觉得这些功能会对很多人有帮助。
补充:我忘了说,但我觉得用Python就能暗示这一点:我希望这个工具是跨平台的。
补充:也许我想要的功能还没有实现,但可能会有waf的扩展,或者Scons也许能做到。
1 个回答
我用过Scons,它挺不错的,你可以用它做很多事情,因为它就是用Python代码写的,所以你想要的功能只要用Python写出来就行,特别简单。
有人说它在处理非常大的项目时会有问题,但我没有运行过特别大的项目,所以我不太清楚这个情况。