我想知道是否有任何漂亮而又整洁的工具来替换GNU Autotools或Make来构建一个非常大的C ++项目,这是一个非常复杂的事情。
如果项目很小,生成Autotools所需的所有文件很简单,但如果源代码分为多个目录,多个第三方库和许多依赖项,则属于“Autotools Hell”。
感谢任何建议
答案 0 :(得分:18)
答案 1 :(得分:18)
Google V8 JavaScript Engine是用C ++编写的,并使用SCons,所以我猜这是一票。
答案 2 :(得分:15)
看看waf。
我认为您可以将其视为make和autotools的完全替代品。它基于python。我喜欢waf的一件事是waf脚本本身是你放在项目根目录中的~100kb独立版本。这与make或rake和朋友形成对比,其中必须首先安装构建系统。你必须安装python> = 2.3。
~$ ./waf configure && ./waf && ./waf install
Waf相当于Makefile是wscript文件。它是一个python脚本waf读取,它定义了至少3个函数:set_options()
,configure(conf)
和build(bld)
。你可以猜出他们每个人做了什么。
要快速启动,我建议您查看源代码发行版中的demos / cpp / *文件。另请查看doc / waf.pdf文件;这是一份12页的文档,可以快速启动并运行。
答案 3 :(得分:11)
要比较各种C ++构建工具的速度,您可以查看此基准测试: http://retropaganda.info/~bohan/devel/wonderbuild/benchmarks/time.xml
答案 4 :(得分:5)
我们将Jam用于复杂的C ++项目 - 一个好处是它很好地跨平台。而不是我掏出好处,只需快速浏览一下这个链接: http://www.perforce.com/jam/jam.html
答案 5 :(得分:5)
Noel Llopis撰写了一些比较构建系统的文章。 “寻求完美构建系统”的第1部分位于http://gamesfromwithin.com/the-quest-for-the-perfect-build-system。第2部分在同一网站上。在http://gamesfromwithin.com/?p=104报告了对Scons的重试。
结论:SCons太慢了...... Jam是胜利者。
答案 6 :(得分:2)
Cook是另一种可用于替换make的工具。我见过几家大公司正在使用它。因此,即使网站看起来相当过时,它仍然是企业准备就绪。
答案 7 :(得分:2)
我在一个大型c ++项目(在Linux和Windows上)上使用SCons,它运行得非常好。
scons all -j8
(并行编译目标文件)非常酷!
答案 8 :(得分:1)
我使用bakefile作为构建过程,我成了一个忠实粉丝!
我不再需要自己编写Makefile了,更不用说可怕的GNU autotools脚本了。我所要做的就是提供一个描述构建目标的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