![]() |
有時,目標的建置屬性之間需要維持特定的關係。例如,您可能想要在程式庫以共享方式建置時,或者在建置目標的 release
變體時,設定特定的 #define
。這可以使用條件需求 來達成。
lib network : network.cpp : <link>shared:<define>NETWORK_LIB_SHARED <variant>release:<define>EXTRA_FAST ;
在上面的例子中,每當 network
使用 <link>shared
建置時,<define>NETWORK_LIB_SHARED
也會出現在它的屬性中。此外,每當建置其 release 變體時,<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。