![]() |
除了通用的錯誤訊息外,b2
還可能發出以下訊息:
warning: unknown rule X
呼叫了一個沒有使用「actions
」或「rule
」語句定義的規則。
using N temp target(s)
找到了標記為臨時文件(但仍然存在)的目標。
updating N target(s)
目標已過期,將會更新。
can't find N target(s)
找不到原始碼檔案,也沒有建立它們的操作。
can't make N target(s)
由於找不到原始碼,因此無法建立其他目標。
warning: X depends on itself
目標直接或透過其原始碼檔案依賴自身。
don't know how to make X
目標不存在,也沒有定義建立它的操作。
X skipped for lack of Y
原始碼建置失敗,因此無法建置目標。
warning: using independent target X
使用 $(<)
或 $(>)
引用了不是任何其他目標依賴項的目標。
X removed
B2
在中斷後移除了一個部分建置的目標。
要成功進行平行建置,必須正確地說明檔案之間的依賴關係,因為目標會傾向以最快完成的順序建置。 此外,請注意那些會將固定名稱的檔案放入目前目錄的不可平行化指令,例如 yacc(1)
。
設定不佳的 $(JAMSHELL)
很可能導致無聲的失敗。
本節源自 Jam 的官方文件,以及使用 Jam 和閱讀 Jambase 規則的經驗。 我們在這裡重複這些資訊,主要是因为它們對於理解和使用 Jam 至關重要,但卻沒有整合在單一位置。 其中一些資訊在官方文件中完全沒有提及。 我們希望這些資訊對任何想熟悉 Jam 和 Boost 建置系統的人有所幫助。
rules
」(規則)實際上是簡單的程序實體。 可以將它們視為函式。 參數以冒號分隔。DEPENDS
規則會在命名目標之間的依賴圖形中建立連結。INCLUDES
規則的原始 Jam 文件不正確:INCLUDES targets1 : targets2
會導致依賴 targets1 成員的所有項目都依賴 targets2 的所有成員。 它的執行方式很奇怪,方法是將 targets2 附加到 targets1 中每個項目的依賴列表的特殊尾部區段。 這樣建立循環依賴關係似乎是可以的;事實上,當單一建置操作產生 targets1 和 targets2 時,這似乎是「正確的做法」。actions
(操作),則會將這些操作新增到由規則的第一個參數識別的目標的更新操作中。 如果宣告了對應的操作,則實際上可以呼叫未宣告的規則:該規則會被視為空。NOTFILE
目標之外) 會透過一個稱為「綁定」的過程與檔案系統中的路徑關聯。綁定是指根據目標特定的 SEARCH
和 LOCATE
變數的設定,搜尋與目標名稱相同 (不含 grist) 的檔案的過程。除了全域和區域變數之外,Jam 還允許您在目標 `on` 設定變數。目標特定的變數值通常無法讀取,並且僅在以下情況下生效:
SEARCH
和 LOCATE
變數的目標特定設定控制,如下所述。bind
動作修飾符選擇性地將目標特定變數替換為其綁定值。「Grist」只是一個格式為 <字元> 的字串前綴。它在 Jam 中用於根據較簡單的名稱建立唯一的目標名稱。例如,檔名「test.exe
」可以由不同子專案中的目標使用,或者用於「相同」抽象目標的偵錯和發行變體。每個綁定到名為「test.exe」的檔案的不同目標都有其自己的唯一 grist 前綴。Boost 建構系統也充分利用了 Jam 在 grist 邊界分割字串的能力,有時會在字串的開頭串連多個 grist 元素。使用 grist 而不是使用絕對路徑來識別目標有兩個原因:
MESSAGE ?\= starting jam... ; if $(MESSAGE) { ECHO The message is: $(MESSAGE) ; }如果使用者想要指定訊息,可以使用
"-sMESSAGE=訊息文字"
呼叫 Jam。如果使用者不想要任何訊息,可以使用 -sMESSAGE=
呼叫 Jam,這樣就不會印出任何東西。Jam 解析命令列選項的方式可能與其他 Unix 程式不太一樣,它接受兩種選項格式:
-x值
,以及-x 值
.