Goal-C 規則

回報問題 查看來源 Nightly · 8.3 · 8.2 · 8.1 · 8.0 · 7.6

規則

objc_import

查看規則來源
objc_import(name, deps, hdrs, alwayslink, archives, compatible_with, deprecation, exec_compatible_with, exec_group_compatible_with, exec_properties, features, includes, package_metadata, restricted_to, sdk_dylibs, sdk_frameworks, sdk_includes, tags, target_compatible_with, testonly, textual_hdrs, toolchains, visibility, weak_sdk_frameworks)

這項規則會以 .a 檔案的形式,封裝已編譯的靜態程式庫。此外,您還能使用 objc_library 支援的相同屬性匯出標頭和資源。

引數

屬性
name

名稱:必填

這個目標的專屬名稱。

deps

標籤清單;預設值為 []

這個目標所依附的目標清單。
hdrs

標籤清單;預設值為 []

這個程式庫發布的 C、C++、Objective-C 和 Objective-C++ 標頭檔案清單,供依附規則中的來源納入。

這些標頭會說明程式庫的公開介面,並提供給這個規則或依附規則中的來源納入。不應由這個程式庫的用戶端納入的標頭,應改為列在 srcs 屬性中。

如果啟用模組,這些項目會與來源分開編譯。

布林值;預設值為 False

如果 1,任何 (直接或間接) 依附於這個程式庫的套件或二進位檔,都會連結 srcsnon_arc_srcs 中列出的所有檔案物件,即使部分檔案不含二進位檔參照的符號也一樣。如果二進位檔中的程式碼未明確呼叫您的程式碼,例如您的程式碼註冊接收某項服務提供的某些回呼,這就很有用。
archives

標籤清單 (必要)

提供給依附於這個目標的 Objective-C 目標的 .a 檔案清單。
includes

字串清單;預設值為 []

要新增至這個目標和所有依附目標的 #include/#import 搜尋路徑清單。 這是為了支援未在 #import/#include 陳述式中指定完整工作區路徑的第三方和開放原始碼程式庫。

路徑會根據套件目錄解讀,且除了實際的用戶端根目錄外,還會納入 genfiles 和 bin 根目錄 (例如 blaze-genfiles/pkg/includedirblaze-out/pkg/includedir)。

COPTS 不同,這些標記會新增至這項規則和所有依附於這項規則的規則。(注意:不是規則所依據的規則!)請務必謹慎操作,因為這項設定可能影響範圍廣泛。如有疑問,請改為在 COPTS 中加入「-iquote」標記。

sdk_dylibs

字串清單;預設值為 []

要連結的 SDK .dylib 程式庫名稱。例如「libz」或「libarchive」。如果二進位檔的依附樹狀結構中含有任何 C++ 或 Objective-C++ 來源,「libc++」就會自動納入其中。連結二進位檔時,系統會使用該二進位檔遞移依附元件圖表中的所有程式庫。
sdk_frameworks

字串清單;預設值為 []

要連結的 SDK 架構名稱 (例如「AddressBook」、「QuartzCore」)。

連結頂層 Apple 二進位檔時,系統會連結該二進位檔的遞移依附元件圖中列出的所有 SDK 架構。

sdk_includes

字串清單;預設值為 []

要新增至這個目標和所有依附目標的 #include/#import 搜尋路徑清單,其中每個路徑都與 $(SDKROOT)/usr/include 相關。
textual_hdrs

標籤清單;預設值為 []

這個規則或這個程式庫的使用者,會將這些 C、C++、Objective-C 和 Objective-C++ 檔案做為標頭納入來源檔案。與 hdrs 不同,這些不會與來源分開編譯。
weak_sdk_frameworks

字串清單;預設值為 []

要弱連結的 SDK 架構名稱。例如「MediaAccessibility」。與一般連結的 SDK 架構不同,如果弱連結架構中的符號在執行階段不存在,就不會導致錯誤。

objc_library

查看規則來源
objc_library(name, deps, srcs, data, hdrs, alwayslink, compatible_with, conlyopts, copts, cxxopts, defines, deprecation, enable_modules, exec_compatible_with, exec_group_compatible_with, exec_properties, features, implementation_deps, includes, linkopts, module_map, module_name, non_arc_srcs, package_metadata, pch, restricted_to, sdk_dylibs, sdk_frameworks, sdk_includes, stamp, tags, target_compatible_with, testonly, textual_hdrs, toolchains, visibility, weak_sdk_frameworks)

這項規則會從指定的 Objective-C 來源檔案產生靜態程式庫。

引數

屬性
name

名稱:必填

這個目標的專屬名稱。

deps

標籤清單;預設值為 []

這個目標所依附的目標清單。
srcs

標籤清單;預設值為 []

要處理的 C、C++、Objective-C 和 Objective-C++ 來源與標頭檔案清單,以及/或是 (`.s`、`.S` 或 `.asm`) 組合來源檔案,以建立程式庫目標。這些是已簽入的檔案,以及任何產生的檔案。 來源檔案會使用 Clang 編譯為 .o 檔案。這個目標 srcs 屬性中的任何來源或標頭,都可以納入/匯入標頭檔案,但 hdrs 中的標頭或依據這項規則的任何目標則不行。此外,也可以提供預先編譯的 .o 檔案做為 srcs。請務必確保提供的 .o 檔案架構與建構架構一致,以免發生符號連結器錯誤。
hdrs

標籤清單;預設值為 []

這個程式庫發布的 C、C++、Objective-C 和 Objective-C++ 標頭檔案清單,供依附規則中的來源納入。

這些標頭會說明程式庫的公開介面,並提供給這個規則或依附規則中的來源納入。不應由這個程式庫的用戶端納入的標頭,應改為列在 srcs 屬性中。

如果啟用模組,這些項目會與來源分開編譯。

布林值;預設值為 False

如果 1,任何 (直接或間接) 依附於這個程式庫的套件或二進位檔,都會連結 srcsnon_arc_srcs 中列出的所有檔案物件,即使部分檔案不含二進位檔參照的符號也一樣。如果二進位檔中的程式碼未明確呼叫您的程式碼,例如您的程式碼註冊接收某項服務提供的某些回呼,這就很有用。
conlyopts

字串清單;預設值為 []

要傳遞至 C 檔案編譯器的額外旗標。 須遵守「Make variable」替代和 Bourne shell 權杖化。 這些標記只會套用至這個目標,不會套用至依附於這個目標的目標,或依附於這個目標的目標。

請注意,對於產生的 Xcode 專案,系統會剖析 copts 中使用「-I」標記指定的目錄路徑,如果這些路徑是相對路徑,則會加上「$(WORKSPACE_ROOT)/」,並新增至相關聯 Xcode 目標的標頭搜尋路徑。

copts

字串清單;預設值為 []

要傳遞至編譯器的額外標記。 須遵守「Make variable」替代和 Bourne shell 權杖化。 這些標記只會套用至這個目標,不會套用至依附於這個目標的目標,或依附於這個目標的目標。

請注意,對於產生的 Xcode 專案,系統會剖析 copts 中使用「-I」標記指定的目錄路徑,如果這些路徑是相對路徑,則會加上「$(WORKSPACE_ROOT)/」,並新增至相關聯 Xcode 目標的標頭搜尋路徑。

cxxopts

字串清單;預設值為 []

要傳遞至 Objective-C++ 和 C++ 檔案編譯器的額外旗標。須遵守「Make variable」替代和 Bourne shell 權杖化。 這些標記只會套用至這個目標,不會套用至依附於這個目標的目標,或依附於這個目標的目標。

請注意,對於產生的 Xcode 專案,系統會剖析 copts 中使用「-I」標記指定的目錄路徑,如果這些路徑是相對路徑,則會加上「$(WORKSPACE_ROOT)/」,並新增至相關聯 Xcode 目標的標頭搜尋路徑。

defines

字串清單;預設值為 []

要傳遞至編譯器的額外 -D 旗標。這些標記應採用 KEY=VALUEKEY 形式,不僅會傳遞至這個目標的編譯器 (如 copts),也會傳遞至這個目標的所有 objc_ 依附元件。須遵守「製作變數」替代和 Bourne Shell 權杖化
enable_modules

布林值;預設值為 False

啟用 clang 模組支援 (透過 -fmodules)。將此值設為 1,即可 @import 系統標頭和其他目標: @import UIKit; @import path_to_package_target;
implementation_deps

標籤清單;預設值為 []

程式庫目標依附的其他程式庫清單。與 deps 不同,這些程式庫 (以及所有遞移依附元件) 的標頭和包含路徑僅用於編譯這個程式庫,而非依附於這個程式庫的程式庫。以 implementation_deps 指定的程式庫仍會連結至依附於這個程式庫的二進位目標。
includes

字串清單;預設值為 []

要新增至這個目標和所有依附目標的 #include/#import 搜尋路徑清單。 這是為了支援未在 #import/#include 陳述式中指定完整工作區路徑的第三方和開放原始碼程式庫。

路徑會根據套件目錄解讀,且除了實際的用戶端根目錄外,還會納入 genfiles 和 bin 根目錄 (例如 blaze-genfiles/pkg/includedirblaze-out/pkg/includedir)。

COPTS 不同,這些標記會新增至這項規則和所有依附於這項規則的規則。(注意:不是規則所依據的規則!)請務必謹慎操作,因為這項設定可能影響範圍廣泛。如有疑問,請改為在 COPTS 中加入「-iquote」標記。

linkopts

字串清單;預設值為 []

要傳遞至連結器的額外旗標。
module_map

標籤;預設值為 None

這個目標的自訂 Clang 模組對應。建議不要使用自訂模組地圖。大多數使用者應使用 Bazel 產生的模組地圖。如果指定,Bazel 不會為這個目標產生模組對應,但會將提供的模組對應傳遞至編譯器。
module_name

字串;預設值為 ""

為這個目標設定模組名稱。根據預設,模組名稱是目標路徑,所有特殊符號都會替換為「_」,例如 //foo/baz:bar 可匯入為 foo_baz_bar。
non_arc_srcs

標籤清單;預設值為 []

系統會處理 Objective-C 檔案清單,建立不使用自動參照計數 (ARC) 的程式庫目標。這個屬性中的檔案與 srcs 屬性中的檔案非常相似,但編譯時不會啟用 ARC。
pch

標籤;預設值為 None

要加到每個編譯中來源檔案 (包括 arc 和非 arc) 前的標頭檔案。我們極不建議在 BUILD 檔案中使用 pch 檔案,且應視為已淘汰。由於 pch 檔案實際上並未預先編譯,因此這並非建構速度的提升,而只是全域依附元件。從建構效率的角度來看,直接在需要的位置將所需內容納入來源,其實會更好。
sdk_dylibs

字串清單;預設值為 []

要連結的 SDK .dylib 程式庫名稱。例如「libz」或「libarchive」。如果二進位檔的依附樹狀結構中含有任何 C++ 或 Objective-C++ 來源,「libc++」就會自動納入其中。連結二進位檔時,系統會使用該二進位檔遞移依附元件圖表中的所有程式庫。
sdk_frameworks

字串清單;預設值為 []

要連結的 SDK 架構名稱 (例如「AddressBook」、「QuartzCore」)。

連結頂層 Apple 二進位檔時,系統會連結該二進位檔的遞移依附元件圖中列出的所有 SDK 架構。

sdk_includes

字串清單;預設值為 []

要新增至這個目標和所有依附目標的 #include/#import 搜尋路徑清單,其中每個路徑都與 $(SDKROOT)/usr/include 相關。
stamp

布林值;預設值為 False

textual_hdrs

標籤清單;預設值為 []

這個規則或這個程式庫的使用者,會將這些 C、C++、Objective-C 和 Objective-C++ 檔案做為標頭納入來源檔案。與 hdrs 不同,這些不會與來源分開編譯。
weak_sdk_frameworks

字串清單;預設值為 []

要弱連結的 SDK 架構名稱。例如「MediaAccessibility」。與一般連結的 SDK 架構不同,如果弱連結架構中的符號在執行階段不存在,就不會導致錯誤。