Boost C++ Libraries

PrevUpHomeNext

条件和备选方案

有时,需要在目标的构建属性之间维护特定的关系。例如,当库以共享方式构建时,或者当目标的release变体构建时,您可能希望设置特定的 #define。这可以通过使用条件需求来实现。

lib network : network.cpp
    : <link>shared:<define>NETWORK_LIB_SHARED
     <variant>release:<define>EXTRA_FAST
    ;

在上面的示例中,每当network使用<link>shared构建时,<define>NETWORK_LIB_SHARED 也会出现在其属性中。此外,每当构建其发布变体时,<define>EXTRA_FAST将出现在其属性中。

有时,目标的构建方式差异很大,以至于使用条件需求来描述它们会很困难。例如,假设一个库实际上使用不同的源文件取决于用于构建它的工具集。我们可以使用目标备选方案来表达这种情况。

lib demangler : dummy_demangler.cpp ;                      # alternative 1
lib demangler : demangler_gcc.cpp : <toolset>gcc ;   # alternative 2
lib demangler : demangler_msvc.cpp : <toolset>msvc ; # alternative 3

在构建demangler时,Boost.Build将比较每个备选方案的需求与构建属性,以找到最佳匹配。例如,当使用<toolset>gcc构建时,将选择备选方案2,而当使用<toolset>msvc构建时,将选择备选方案3。在所有其他情况下,将构建最通用的备选方案1。


PrevUpHomeNext