这是一个主观的答案。
首先,关于 Boost:一旦构建了 Boost,无论以何种方式,您都不需要使用 bjam。因此,您可以使用任何适合您的构建系统,同时要求某些库位于系统上或某些路径中,无论它们是如何构建的。附带说明一下,boost 的大部分内容都是仅标头(即使是单元测试框架也可以使用仅标头 IIRC,但建议使用库版本)。假设您需要 boost 二进制文件。
处理项目 IMO 的最佳方法是使用您自己选择的最适合您自己项目的构建系统,并要求“预构建”依赖项(增强)。它们的预构建方式取决于每个依赖项;有些人可能使用您选择的相同构建系统,其他人将使用他们自己的构建系统。有些将适用于所有平台,例如,有些将在 windows 上编译,但没有适合 windows 的最佳构建系统。如果它们是小型库,您可以将它们集成到您的构建系统中,否则只需将它们视为开发人员在构建项目之前“以某种方式”必须拥有的“依赖项”。这里的“不知何故”将在自述文件中进行解释。
例如,我在我的项目中使用 cmake,但在我的项目中使用 boost 和其他一些库。cmake 允许我为 MSVC、C::B、GNUMake 等生成项目文件,但是我不能希望我的所有依赖项也使用 cmake。对于非常小的、稳定的库,我可以为它们制作一个 cmake 项目,然后事情就变得非常简单。对于更大或更易变的库,最好将每个库留给自己的构建系统。易失性库经常更改,因此如果您为它们构建任何“自定义”内容,您将不得不不断调整您的“自定义”以适应库中的更改。对于我使用的每个库,我都有一些 cmake 变量,例如 BOOST_LIB_INCLUDE_PATHS 和 BOOST_LIB_LIBRARY_PATHS 和 BOOST_LIB_LIBRARIES,可以由编译我的项目的开发人员将其定义为它们的值。
您可以自行决定是否向这些库提供源代码;这没什么错,尤其是在您想要依赖特定版本的库的情况下。但是除了对易失性库的维护之外,将它们编写为依赖项可能会变得一团糟。
但是,我知道当 Google Chromium 项目构建时,会下载、签出、构建和链接大约一百个库。Chromium 使用 GYP 作为构建系统 IIRC。