【发布时间】:2010-10-05 11:03:58
【问题描述】:
什么是 Boost Jam,Jam 是否值得迁移?
我知道 jam 是 perforce 构建的构建系统,但是我不确定 boost jam 和常规 jam 有何不同。
我也希望 SO 社区中有人使用它,也许可以突出一些差异和/或好处。
【问题讨论】:
标签: migration build-system jam bjam
什么是 Boost Jam,Jam 是否值得迁移?
我知道 jam 是 perforce 构建的构建系统,但是我不确定 boost jam 和常规 jam 有何不同。
我也希望 SO 社区中有人使用它,也许可以突出一些差异和/或好处。
【问题讨论】:
标签: migration build-system jam bjam
我使用 Boost Jam 进行跨平台 C++ 开发。我选择它是因为
您可以使用特定于风味的设置来优化通用规则,而不是为每个风味排列编写单独的规则。语法并不完全是我会选择的,但习惯起来并不难。
本文将 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 年前它似乎不可用,但我听说它已经走了很长一段路。
【讨论】:
正如您所说,Boost Jam 是一个构建系统,可以独立于任何其他 boost 库使用。我对 Perforce Jam 一无所知,但据我了解,Boost jam 非常相似,而且大多兼容。
主要区别在于 Boost Jam 通常带有 Boost Build,这是一组为常见任务设计的 jam 规则,例如编译库、运行单元测试、创建 doxygen 文档等。
与其他构建系统相比,Boost Jam/Boost Build 旨在轻松编译不同的变体。因此,如果您想将编译设置从调试更改为发布,或将单线程更改为多线程,它会自动确定很多更改。
缺点是语法很挑剔,而且在 boost 网站之外,没有好的文档。但我认为 Perforce Jam 在这方面同样糟糕。
【讨论】:
考虑到构建工具的选择,我不会迁移到 jam。那里有更好的构建系统——C/C++ 的 CMake / SCons、Qt 的 qmake、Java 的 Ant、.NET 的 NAnt 和 MSBuild,等等。它们可能在技术上并不优越,但使用起来不会那么痛苦,因为更多的人熟悉它们(另一方面,它们可能在技术上更优越,当然:D)。
【讨论】:
出于我的目的,它只是为您构建 boost 库的东西,我不知道您可以用它做任何其他事情,所以我不明白迁移到它意味着什么。我很抱歉,但我不知道普通果酱是什么。由于没有其他人提供答案,我只提供我对它的理解。
Boost 是 C++ 的类和函数的集合,可用于各种任务。 boost 的类和函数被分组到库中。一些库的所有代码都在头文件中,您可以通过使用#include 预处理器语句简单地使用它们,而其他库(例如文件系统或正则表达式库)在 .cpp 文件中具有部分实现。
编译这些 .cpp 文件可能需要很长时间(大约需要 30 分钟,具体取决于您正在编译的内容),如果每次您想重新编译程序都需要半个小时,那将是一个真正的痛苦。所以他们所做的只是对那些部分存储在.cpp文件中的库,您可以将它们预编译成.lib文件,这就是boost jam的目的。这意味着你只需要花半个小时编译它们一次,从那时起你再也不用等半个小时了。
然而,你可以想象,每个 boost 库都由许多 cpp 文件和许多头文件组成,并且每个都有许多不同的风格(调试版本、发布版本、多线程等),所以它不是一个自己编译 boost 库的简单过程。这就是 boost jam 的用武之地。你给它编译库的命令,然后它为你发出所有命令给编译器,最后,你将拥有一组预编译的 .lib 文件,一个用于每个库的每种不同风味。头文件以某种方式告诉链接器要包含哪些 lib 文件,因此如果您设置了正确的路径,预编译的 .lib 文件的正确风格将自动链接到您的程序,从而为您节省 30 分钟的编译时间。
您可以通过查看此页面来了解 boost jam 需要编译哪些库以及不需要编译哪些库:http://www.boost.org/doc/libs/1_37_0 - 如果库不需要 lib 文件(因此不需要您搞乱boost jam first),它会说“Build & Link: Header only”,而如果一个库确实需要你预编译一个 lib 文件,它会说“Build & Link: Automatic linking”。
此外,如果您使用的是 Windows,则可以下载预编译的 .lib 文件,这样您就不必使用 boost jam。要做到这一点,您应该访问 www.boost.org 页面,转到“入门”部分并一直遵循它,以确保您已正确设置所有内容。该页面的 Windows 版本中的一个链接告诉您在哪里可以找到预编译的 .lib 文件。
【讨论】: