有时,需要在目标的构建属性之间维护特定的关系。例如,当库以共享方式构建时,或者当目标的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。