Boost C++ Libraries

PrevUpHomeNext

專案階層

到目前為止,我們只考慮了包含單個專案的例子,其中有一個使用者編寫的 Boost.Jam 檔案,即 Jamroot。一個典型的大程式碼庫會由許多組織成樹狀結構的專案組成。樹的頂部稱為專案根目錄。每個子專案都由專案根目錄下子目錄中名為 Jamfile 的檔案定義。子專案的父專案由其上層目錄中最接近的 JamfileJamroot 檔案定義。例如,在以下目錄佈局中

top/
  |
  +-- Jamroot
  |
  +-- app/
  |    |
  |    +-- Jamfile
  |    `-- app.cpp
  |
  `-- util/
       |
       +-- foo/
       .    |
       .    +-- Jamfile
       .    `-- bar.cpp

專案根目錄是 top/top/app/top/util/foo/ 中的專案是根專案的直接子專案。

注意

當我們提到以正常字體設定的「Jamfile」時,我們指的是名為 JamfileJamroot 的檔案。當我們需要更具體地說明時,檔名將設定為「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/ 中的目標時,才會建置這些目標。



[2] 許多功能在子專案中會被覆蓋,而不是被添加。有關更多資訊,請參見「功能屬性」一節


PrevUpHomeNext