Boost C++ Libraries

PrevUpHomeNext

屬性

建置請求與目標需求
專案屬性

為了以可攜式的方式表示目標設定的各個方面,例如偵錯和發行變體,或單執行緒和多執行緒建置,Boost.Build 使用具有相關特性。例如,debug-symbols 特性可以具有 onoff 的值。屬性只是一個 (特性, 值) 對。當使用者啟動建置時,Boost.Build 會自動將請求的屬性轉換為適當的命令列標記,以叫用工具集組件,例如編譯器和連結器。

有許多內建特性可以組合以產生任意建置組態。以下命令使用停用內嵌並啟用偵錯符號來建置專案的 release 變體:

b2 release inlining=off debug-symbols=on

命令列上的屬性使用以下語法指定:

feature-name=feature-value

我們在 b2 叫用中看到的 releasedebug 只是指定 variant 特性值的簡寫方式。例如,上面的命令也可以這樣寫:

b2 variant=release inlining=off debug-symbols=on
      

variant 非常常用,因此它被賦予隱含特性的特殊狀態 — Boost.Build 只會從其值的其中一個名稱推斷其身分。

完整的特性描述可以在「特性與屬性」一節中找到。

建置請求與目標需求

命令列上指定的屬性集構成一個建置請求— 對建置請求目標(或者,如果沒有明確請求目標,則為目前目錄中的專案)所需屬性的描述。用於建置目標的實際屬性通常是建置請求和從專案的 Jamroot(及其其他 Jamfile,如「專案階層」一節中所述)衍生的屬性的組合。例如,#included 標頭檔的位置通常不在命令列上指定,而是在 Jamfile 中描述為目標需求,並自動與這些目標的建置請求組合。啟用多執行緒的編譯是典型目標需求的另一個範例。下面的 Jamfile 片段說明了如何指定這些需求。

exe hello
    : hello.cpp
    : <include>boost <threading>multi
    ;

當建置 hello 時,上面指定的兩個需求將始終存在。如果在 b2 命令列上給出的建置請求明確與目標的需求相矛盾,則目標需求通常會覆蓋(或者,在「自由」特性(例如 <include>)的情況下,[1] 增強)建置請求。

提示

<include> 特性的值是相對於使用它的 Jamroot 的位置。

專案屬性

如果我們希望其他目標 hello2 具有相同的要求,我們可以簡單地複製它們。但是,隨著專案的增長,這種方法會導致 Jamfile 中出現大量重複的樣板程式碼。幸運的是,有更好的方法。每個專案都可以指定一組屬性,包括需求。

project
    : requirements <include>/home/ghost/Work/boost <threading>multi
    ;

exe hello : hello.cpp ;
exe hello2 : hello.cpp ;

效果如同我們對 hellohello2 指定了相同的需求。




PrevUpHomeNext