有什么好的C ++项目构建工具可以代替make吗?
我想知道是否有任何漂亮而整洁的工具来代替GNU Autotools或者Make来构建一个非常大的C ++项目,这是使用起来如此复杂的事情。
如果项目很小,则生成de Autotools所需的所有文件很简单,但是如果源代码分为多个目录,多个第三方库和许多依赖项,则我们会陷入" Autotools Hell"的境地。
感谢任何建议
解决方案
回答
CMake? (生成makefile,因此从技术上讲不能替代此类文件)。
最近,我还看到" SCons"在一些地方弹出。我自己还没有创建任何东西。
回答
Cook是可用于替换make的另一种工具。我已经看到一些大公司使用它。因此,即使网站看起来过时,也可以为企业准备就绪。
http://miller.emu.id.au/pmiller/software/cook/
回答
Google V8 JavaScript引擎是用C ++编写的,并且使用SCons,所以我想这是一票。
回答
我们将Jam用于复杂的C ++项目,其好处之一是可以很好地跨平台使用。与其让我大开眼界,不如快速浏览一下此链接:
http://www.perforce.com/jam/jam.html
回答
看看waf。
我认为我们可以认为它可以完全替代make和autotools。它基于python。我喜欢waf的一件事是,waf脚本本身是〜100kb的独立脚本,我们可以将其放置在项目根目录中。这与make或者rake和friends相比,后者必须首先安装构建系统。我们必须安装python> = 2.3.
~$ ./waf configure && ./waf && ./waf install
Waf等同于Makefiles是wscript文件。这是waf读取的python脚本,它至少定义了3个函数:set_options(),configure(conf)和build(bld)。我们可以猜测他们每个人的所作所为。
为了快速起步,建议我们查看源代码发行版中的demos / cpp / *文件。还要看看doc / waf.pdf文件;这是一个长达12页的文档,可快速入门和运行。
回答
Noel Llopis写了几篇比较构建系统的文章。 "追求完美构建系统"的第1部分位于http://gamesfromwithin.com/the-quest-for-the-perfect-build-system。第2部分在同一站点上进行。在http://gamesfromwithin.com/?p=104上报告了Scons重试。
结论:SCons太慢了。Jam是赢家。
回答
为了比较各种C ++构建工具的速度,我们可以查看以下基准测试:
http://retropaganda.info/~bohan/devel/wonderbuild/benchmarks/time.xml
回答
我在一个大型c ++项目(在Linux和Windows上)上都使用了SCons,它确实运行良好。
scons all -j8
(并行编译目标文件)非常酷!
回答
我在构建过程中使用了bakefile,因此成为了忠实粉丝!
我再也不必自己写Makefile了,更不用说可怕的GNU自动工具脚本了。我要做的只是提供一个描述构建目标的XML文件。 Bakefile可以将其转换为可以正确获取所有(头文件)依赖项等的Makefile,可以在其中选择不同的Makefile格式(从文档中粘贴列表):
available formats are: autoconf GNU autoconf Makefile.in files borland Borland C/C++ makefiles dmars Digital Mars makefiles dmars_smake Digital Mars makefiles for SMAKE gnu GNU toolchain makefiles (Unix) mingw MinGW makefiles (mingw32-make) msevc4prj MS eMbedded Visual C++ 4 project files msvc MS Visual C++ nmake makefiles msvc6prj MS Visual C++ 6.0 project files msvs2003prj MS Visual Studio 2003 project files msvs2005prj MS Visual Studio 2005 project files symbian Symbian development files watcom OpenWatcom makefiles xcode2 Xcode 2.4 project files
我通常使用autoconf选项,它为我编写了烦人的GNU autotools脚本。我确实必须修改configure.ac
脚本,以便configure在任何系统上都能找到特定的库。但这还不错。以这种方式获取autoconf脚本非常好,因为我不必自己编写所有脚本,并且在分发项目时,看起来就像是在编写它们,并且用户仍然可以按照自己的意愿构建项目-让路,与
./configure && make && make install