有啥好的 C++ 项目构建工具可以替代 make 吗? [关闭]
Posted
技术标签:
【中文标题】有啥好的 C++ 项目构建工具可以替代 make 吗? [关闭]【英文标题】:Any good building tools for a C++ project, which can replace make? [closed]有什么好的 C++ 项目构建工具可以替代 make 吗? [关闭] 【发布时间】:2010-09-08 10:54:05 【问题描述】:我想知道是否有任何漂亮而简洁的工具来替代 GNU Autotools 或 Make 来构建一个非常大的 C++ 项目,这些项目使用起来非常复杂。
如果项目很小,生成de Autotools需要的所有文件很简单,但是如果源代码被分成很多目录,有多个第三方库和许多依赖项,你就陷入了“Autotools地狱”。 .
感谢任何建议
【问题讨论】:
【参考方案1】:Google V8 javascript Engine 是用 C++ 编写的,使用 SCons,所以我猜这是一票。
【讨论】:
我们发现 SCons 对于大型 Visual Studio 解决方案来说非常慢。它在 UNIX 系统上运行良好。 @Kristopher:你能详细说明一下吗?根据我的经验,我没有发现这种情况。你在哪里从 devstudio 文件生成 scons 文件? 我支持这一点:SCons 在构建更大的版本时非常缓慢。 我想知道构建器脚本如何减慢 C++ 构建。大部分时间不会花在编译所有这些模板上吗?【参考方案2】:CMake? (生成 makefile,因此从技术上讲不是替代品)。
我最近还看到“SCons”在一些地方弹出。不过,我自己并没有用它创造任何东西。
【讨论】:
它不会替代make,但CMake确实很好地替代了Autotools【参考方案3】:看看waf。
我认为您可以将其视为 make 和 autotools 的完全替代品。它基于python。我喜欢 waf 的一件事是 waf 脚本本身是大约 100kb 的独立文件,您可以将其放置在项目根目录中。这与必须先安装构建系统的 make 或 rake 和朋友形成对比。不过,您必须安装 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 页的文档,可让您快速上手。
【讨论】:
Scons 还提供“免安装”版本...重 5.5KB... SCons 也很慢。我已经使用它一年或更长时间了,想尽快搬到 Waf。 我们尝试了 SCons 并最终使用了 waf。它无需安装,只需要 python,构建脚本更小/更简单。【参考方案4】:对于各种 C++ 构建工具的速度比较,你可以看看这个基准: https://psycledelics.github.io/wonderbuild/benchmarks/time.xml
【讨论】:
【参考方案5】:我们将 Jam 用于复杂的 C++ 项目 - 一个好处是它很好地跨平台。与其说我的好处,不如快速浏览一下这个链接: http://www.perforce.com/jam/jam.html
【讨论】:
我们在六七年前从 makefile 中移除了 jam。开始工作花了一点时间,但是一旦完成了最初的工作,从那以后就一直是无缝的。设置新项目几乎是微不足道的。【参考方案6】:Noel Llopis 写了几篇比较构建系统的文章。 “追求完美构建系统”的第 1 部分位于 http://gamesfromwithin.com/the-quest-for-the-perfect-build-system。第 2 部分在同一站点上进行。在http://gamesfromwithin.com/?p=104 报告 Scons 的重试。
结论:SCons 太慢了...... Jam 是赢家。
【讨论】:
那篇文章是 2005 年的,所以已经过时了。 是的。不过,SCons 有较新的测试,它是从去年年底开始的。刚刚更新了损坏的链接。 第一个链接似乎失效了。 修复了断开的链接,但考虑到它的年龄,请谨慎对待。这些天我正在使用 CMake。【参考方案7】:Cook 是另一个可以用来代替 make 的工具。我见过几家大公司在使用它。因此,即使网站看起来有些过时,它也已为企业做好准备。
http://miller.emu.id.au/pmiller/software/cook/
【讨论】:
我一直使用 Cook 来完成我的个人小项目。我喜欢它的地方在于,我可以从现有的列表(如 a.c、b.c、c.c)中列出文件名 a.o、b.o、c.o。甚至做一些有趣的事情,比如从 a1.c、b1.c、c1.c 生成 a2.c、b2.c 等。Makefile 似乎无法做到这一点。主要缺点:Cook 有自己的语言,因此您无法利用 Python、Ruby 等现有技能。【参考方案8】:我在一个大型 c++ 项目(在 Linux 和 Windows 上)中使用了 SCons,它工作得非常好。
scons all -j8
(并行编译目标文件)非常酷!
【讨论】:
【参考方案9】:我在构建过程中使用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
【讨论】:
这个项目好像不再积极维护了?以上是关于有啥好的 C++ 项目构建工具可以替代 make 吗? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章