Boost C++ Libraries

PrevUpHomeNext

專案

如前所述,目標被分組到專案中,每個 Jamfile 都是一個獨立的專案。專案很有用,因為它們允許我們將相關的目標組合在一起,定義所有這些目標的共同屬性,並為專案分配一個符號名稱,以便在引用其目標時使用。

專案使用 project 規則命名,其語法如下:

project id : attributes ;

這裡,attributes 是一個規則參數序列,每個參數都以屬性名稱開頭,後跟任意數量的建置屬性。屬性名稱及其處理方式的列表也顯示在下表中。例如,可以這樣寫:

project tennis
    : requirements <threading>multi
    : default-build release
    ;

可能的屬性列舉如下。

專案 ID 是一種表示專案的簡短方式,與 Jamfile 的路徑名相對。它是一個階層式路徑,與檔案系統無關,例如 "boost/thread"。目標參考 使用專案 ID 來指定目標。

原始碼位置 指定專案原始碼所在的目錄。

專案需求 是適用於專案中所有目標以及所有子專案的需求。

預設建置 是在未明確指定建置請求時應使用的建置請求。

這些屬性的預設值如下表所示。

表 3.3. 

屬性 名稱 預設值 project 規則的處理方式
專案 ID 從 'project' 規則的第一個參數賦值。假設它表示絕對專案 ID。
原始碼位置 source-location 專案 jamfile 的位置 設定為傳遞的值
需求 requirements 父項的需求 使用傳遞的需求調整父項的需求,並將結果用作專案需求。
預設建置 default-build 設定為傳遞的值
建置目錄 build-dir 如果父項沒有設定建置目錄,則為空。否則,將從父項到目前專案的相對路徑附加到父項的建置目錄。 設定為傳遞的值,解譯為相對於專案位置的路徑。


除了定義專案和主要目標之外,Jamfile 通常還會呼叫各種工具規則。有關可以直接在 Jamfile 中使用的規則的完整列表,請參閱「內建規則」一節

每個子專案都會從其父專案繼承屬性、常數和規則,父專案由子專案上方最接近的祖先目錄中的 Jamfile 定義。頂層專案在名為 Jamroot 的檔案中宣告,而不是 Jamfile。載入專案時,Boost.Build 會尋找 JamrootJamfile。它們的處理方式相同,不同之處在於,如果檔案名為 Jamroot,則不會執行父專案的搜尋。

即使在子專案目錄中建置,父專案檔案也總是在其子專案之前載入,以便父專案中的每個定義都可供其子專案使用。任何其他專案的載入順序未指定。即使一個專案透過 use-project 或目標參考引用另一個專案,也不應假設有任何特定順序。

注意事項

將根專案命名為特殊的「Jamroot」可以確保 Boost.Build 不會因為其上層目錄包含 Jamfile 而誤將該目錄解釋為專案根目錄。


PrevUpHomeNext