![]() |
到目前為止,我們只考慮了包含單個專案的例子,其中有一個使用者編寫的 Boost.Jam 檔案,即 Jamroot
。一個典型的大程式碼庫會由許多組織成樹狀結構的專案組成。樹的頂部稱為專案根目錄。每個子專案都由專案根目錄下子目錄中名為 Jamfile
的檔案定義。子專案的父專案由其上層目錄中最接近的 Jamfile
或 Jamroot
檔案定義。例如,在以下目錄佈局中
top/ | +-- Jamroot | +-- app/ | | | +-- Jamfile | `-- app.cpp | `-- util/ | +-- foo/ . | . +-- Jamfile . `-- bar.cpp
專案根目錄是 top/
。top/app/
和 top/util/foo/
中的專案是根專案的直接子專案。
當我們提到以正常字體設定的「Jamfile」時,我們指的是名為 Jamfile
或 Jamroot
的檔案。當我們需要更具體地說明時,檔名將設定為「Jamfile
」或「Jamroot
」。
專案會繼承其父專案的所有屬性(例如需求)。繼承的需求會與子專案指定的任何需求合併。例如,如果 top/Jamroot
的需求中包含
<include>/home/ghost/local
則其所有子專案的需求中也都會包含它。當然,任何專案都可以將 include 路徑添加到其父專案指定的 include 路徑中。[2] 更多詳細資訊可以在「專案」一節中找到。
在命令列上沒有明確指定任何目標的情況下呼叫 b2 將建置以目前目錄為根目錄的專案。建置專案不會自動導致其子專案被建置,除非父專案的 Jamfile 明確要求這樣做。在我們的例子中,top/Jamroot
可能包含
build-project app ;
這將導致每當建置 top/
中的專案時,都會建置 top/app/
中的專案。但是,只有當 top/
或 top/app/
中的目標需要 top/util/foo/
中的目標時,才會建置這些目標。