什么是Boost Jam,Jam是否值得迁移?

时间:2009-02-04 16:49:17

标签: migration bjam build-system jam boost-jam

什么是Boost Jam,Jam是否值得迁移?

我知道果酱是由perforce构建的构建系统但是我不确定增强阻塞和常规果酱是不同的。

我也希望SO社区中可能有人与之合作过,也许可以突出一些差异和/或好处。

4 个答案:

答案 0 :(得分:28)

我使用Boost Jam进行跨平台C ++开发。我选择它是因为

  • 我希望我的代码可以在任何地方构建Boost构建,
  • 它使用相对简单的声明性语言来指定如何构建目标,
  • 它可以在单个调用中构建二进制文件的所有不同风格(例如调试与发布,32位与64位,msvc与gcc),并且在构建中具有绝对最少的与风味相关的异常声明。

您可以使用特定于风格的设置优化通用规则,而不是为每个风格排列编写单独的规则。语法并不完全是我所选择的,但它并不太难以习惯。

本文将Boost Jam与CMake,SCons和Eclipse CDT进行了比较:http://syrcose.ispras.ru/2009/files/04_paper.pdf

我的理解是Boost Jam是由Boost社区维护的Perforce Jam的一个分支,并且Perforce Jam不再被主动维护(release notes在2003年4月有最后一次更新)。

当然,如果你不关心跨平台开发,那么就像其他人在这里提到的那样,有更简单的方法。就个人而言,我有意重新访问Eclipse CDT;它在5年前似乎没有用,但我听说它已经走了很长的路。

答案 1 :(得分:9)

正如您所说,Boost Jam是一个构建系统,可以独立于任何其他boost库使用。我对Perforce Jam一无所知,但根据我的理解,Boost jam非常相似,并且大部分兼容。

主要区别在于Boost Jam经常附带Boost Build,这是为常见任务设计的一组果酱规则,例如编译库,运行单元测试,创建doxygen文档等。

与其他构建系统相比,Boost Jam / Boost Build旨在轻松编译不同的变体。因此,如果您想将编译设置从调试更改为发布,或者单线程到多线程,它会自动确定很多更改。

缺点是语法非常挑剔,在boost网站之外,没有好的文档。但我想Perforce Jam在这方面同样糟糕。

答案 2 :(得分:8)

考虑到构建工具的选择,我不会迁移到jam。有更好的构建系统--Cake / SCons for C / C ++,qmake for Qt,Ant for Java,NAnt和MSBuild for .NET,等等。它们可能在技术上并不优越,但它们使用起来不会那么痛苦,因为更多人熟悉它们(另一方面,它们在技术上可能更优越,当然:D)。

答案 3 :(得分:5)

出于我的目的,它只是为你构建boost库的东西,我不知道你可以用它做任何其他事情所以我不明白你迁移到它可能意味着什么。我很抱歉,但我不知道常规果酱是什么。由于没有其他人提供答案,我只是提供我对它的理解。

Boost是C ++的类和函数的集合,可用于各种任务。 boost的类和功能分组到库中。一些库的所有代码都在头文件中,您只需使用#include预处理器语句即可使用,而其他库(如文件系统或正则表达式库)则在.cpp文件中实现其部分实现。

编译这些.cpp文件可能需要很长时间(根据你正在编译的内容,它就像30分钟一样)如果你每次想要重新编译你的程序需要半个小时,这将是一个真正的痛苦。所以他们所做的只是那些部分存储在.cpp文件中的库,你可以将它们预编译成.lib文件,这就是boost阻塞的目的。这意味着你只需要花半个小时来编译一次,从那时起你就再也不用等半个小时了。

但是,正如您可以想象的那样,每个boost库都包含许多cpp文件和许多头文件,并且每种文件都有许多不同的版本(调试版本,发行版本,多线程等),因此它不是简单的过程来自己编译boost库。这就是boost jam的用武之地。你给它命令编译库,然后它将所有命令发送给编译器,最后,你将有一组预编译的.lib文件,一个用于编译每个图书馆的每种不同风味。头文件以某种方式告诉链接器要包含哪些lib文件,因此如果您设置了正确的路径,预编译的.lib文件的正确风格将自动链接到您的程序,从而为您节省30分钟的编译时间。

您可以通过查看此页面来查看需要通过boost jam编译哪些库以及哪些库不能编译:http://www.boost.org/doc/libs/1_37_0 - 如果库不需要lib文件(因此不需要您先搞砸了加速堵塞,它会说“Build& Link:Header only”,而如果一个库确实要求你预编译一个lib文件,它会说“Build& Link:Automatic linking”。

此外,如果您使用的是Windows,则可以下载预编译的.lib文件,这样您就不必使用增强阻塞。要做到这一点,你应该做的是访问www.boost.org页面,转到“入门”部分并一直关注它,以确保正确设置所有内容。该页面的Windows版本上的一个链接告诉您在哪里可以找到预编译的.lib文件。