![]() |
如前所述,目標被分組到專案中,每個 Jamfile 都是一個獨立的專案。專案很有用,因為它們允許我們將相關的目標組合在一起,定義所有這些目標的共同屬性,並為專案分配一個符號名稱,以便在引用其目標時使用。
專案使用 project
規則命名,其語法如下:
projectid
: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 會尋找 Jamroot
或 Jamfile
。它們的處理方式相同,不同之處在於,如果檔案名為 Jamroot
,則不會執行父專案的搜尋。
即使在子專案目錄中建置,父專案檔案也總是在其子專案之前載入,以便父專案中的每個定義都可供其子專案使用。任何其他專案的載入順序未指定。即使一個專案透過 use-project
或目標參考引用另一個專案,也不應假設有任何特定順序。
將根專案命名為特殊的「Jamroot
」可以確保 Boost.Build 不會因為其上層目錄包含 Jamfile 而誤將該目錄解釋為專案根目錄。