![]() |
主要目標規則(例如「exe」或「lib」)會建立一個頂層目標。您很可能會想要宣告自己的規則,而有兩種方法可以做到這一點。
第一種方法適用於您的目標規則只需要產生特定類型的目標的情況。在這種情況下,已經為您定義了一個規則!當您定義一個新的類型時,Boost.Build 會自動定義一個對應的規則。規則的名稱是從類型的名稱中取得的,方法是將所有字母改為小寫,並將底線取代為連字符。例如,如果您建立一個包含以下內容的模組 obfuscate.jam
:
import type ; type.register OBFUSCATED_CPP : ocpp ; import generators ; generators.register-standard obfuscate.file : CPP : OBFUSCATED_CPP ;
並匯入該模組,您就能在 Jamfile 中使用規則「obfuscated-cpp」,它會將原始碼轉換為 OBFUSCATED_CPP 類型。
第二種方法是編寫一個呼叫任何現有規則的包裝器規則。例如,假設每個目錄中只有一個函式庫,並且您希望目錄中的所有 cpp 檔都被編譯到該函式庫中。您可以使用以下方法達到此效果:
lib codegen : [ glob *.cpp ] ;
如果您想讓它更簡單,您可以將以下定義添加到 Jamroot.jam
檔案中:
rule glib ( name : extra-sources * : requirements * ) { lib $(name) : [ glob *.cpp ] $(extra-sources) : $(requirements) ; }
讓您可以將 Jamfile 簡化為:
glib codegen ;
請注意,由於您可以將自訂產生器與目標類型關聯,因此建構的邏輯可能會相當複雜。例如,boostbook
模組宣告了一個目標類型 BOOSTBOOK_MAIN
和一個該類型的自訂產生器。如果您的主要目標規則比較複雜,您可以將其作為範例。