Goal-C 規則

規則

j2objc_library

查看規則來源
j2objc_library(name, deps, compatible_with, deprecation, distribs, entry_classes, features, jre_deps, licenses, restricted_to, tags, target_compatible_with, testonly, visibility)

這項規則會使用 J2ObjC 將 Java 來源檔案翻譯為 Objective-C,然後做為 objc_library 和 objc_binary 規則的依附元件。如要進一步瞭解 J2ObjC,請前往 J2ObjC 網站

您可以使用指令列中的建構標記 --j2objc_translation_flags,指定自訂 J2ObjC 轉譯標記。

請注意,j2objc_library 目標中包含的翻譯檔案會使用預設編譯設定進行編譯,與 objc_library 規則的來源相同,且屬性中未指定任何編譯選項。

此外,系統會在目標層級 (而非來源層級) 移除重複產生的程式碼。如果您有兩個不同的 Java 目標,但包含相同的 Java 來源檔案,則可能會在連結時看到重複的符號錯誤。如要正確解決這個問題,請將共用的 Java 來源檔案移至可供依附的個別通用目標。

引數

屬性
name

名稱:必填

這個目標的專屬名稱。

deps

標籤清單;預設值為 []

j2objc_libraryjava_libraryjava_importjava_proto_library 目標清單,其中包含要轉譯為 Objective-C 的 Java 檔案。

所有可透過 exportsdepsruntime_deps 遞移觸及的 java_libraryjava_import 目標都會經過翻譯和編譯,包括 Java 註解處理產生的檔案。系統不支援沒有指定 srcjar 的 code>java_import 目標。

J2ObjC 翻譯作業的運作方式,取決於遞移閉包中包含的來源 Java 來源檔案類型。針對 java_library 中包含的每個 .java 來源檔案,系統都會產生對應的 .h 和 .m 來源檔案。srcs針對 srcs 中包含的每個來源 JAR java_librarysrcjar java_import,系統會產生對應的 .h 和 .m 來源檔案,其中包含該 JAR 的所有程式碼。

使用者可以在程式碼中匯入 J2ObjC 生成的標頭檔案。這些檔案的匯入路徑是原始 Java 構件的根相對路徑。舉例來說,//some/package/foo.java 的匯入路徑為 some/package/foo.h//some/package/bar.srcjar 的匯入路徑為 some/package/bar.h

如果 proto_library 規則位於這項規則的遞移閉包中,系統也會在二進位層級產生、編譯及連結 J2ObjC proto。如果是 proto //some/proto/foo.proto,使用者可以透過匯入路徑 some/proto/foo.j2objc.pb.h 參照產生的程式碼。

entry_classes

字串清單;預設值為 []

使用者 ObjC 程式碼會直接參照的 Java 類別清單。如果旗標 --j2objc_dead_code_removal 設為開啟,就必須提供這個屬性。Java 類別應以其標準名稱指定,如Java 語言規格所定義。 指定 --j2objc_dead_code_removal 旗標時,系統會遞迴收集進入類別清單,並做為執行無效程式碼分析的進入點。系統隨後會從最終的 ObjC 應用程式套件中移除未使用的類別。
jre_deps

標籤清單;預設值為 []

這個 j2objc_library 規則翻譯的所有 Java 程式碼,都需要額外的 JRE 模擬程式庫清單。根據預設,系統只會連結核心 JRE 功能。

objc_import

查看規則來源
objc_import(name, deps, hdrs, alwayslink, archives, compatible_with, deprecation, distribs, features, includes, licenses, restricted_to, sdk_dylibs, sdk_frameworks, sdk_includes, tags, target_compatible_with, testonly, textual_hdrs, 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」)。為 iOS、tvOS、visionOS 和 watchOS 平台建構時,一律會納入「UIKit」和「Foundation」。在 macOS 中,系統一律只會納入「Foundation」。

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

sdk_includes

字串清單;預設值為 []

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

標籤清單;預設值為 []

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

字串清單;預設值為 []

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

objc_library

查看規則來源
objc_library(name, deps, srcs, data, hdrs, alwayslink, compatible_with, copts, defines, deprecation, distribs, enable_modules, exec_compatible_with, exec_properties, features, implementation_deps, includes, licenses, linkopts, module_map, module_name, non_arc_srcs, pch, restricted_to, sdk_dylibs, sdk_frameworks, sdk_includes, 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 中列出的所有物件檔案,即使部分檔案不含二進位檔參照的符號也一樣。如果二進位檔中的程式碼未明確呼叫您的程式碼,例如您的程式碼註冊接收某項服務提供的某些回呼,這就很有用。
copts

字串清單;預設值為 []

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

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

defines

字串清單;預設值為 []

要傳遞至編譯器的額外 -D 旗標。這些標籤應採用 KEY=VALUE 形式,或只是 KEY,且不僅會傳遞至這個目標的編譯器 (如 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」)。為 iOS、tvOS、visionOS 和 watchOS 平台建構時,一律會納入「UIKit」和「Foundation」。在 macOS 中,系統一律只會納入「Foundation」。

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

sdk_includes

字串清單;預設值為 []

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

標籤清單;預設值為 []

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

字串清單;預設值為 []

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

available_xcodes

查看規則來源
available_xcodes(name, default, deprecation, distribs, features, licenses, tags, testonly, versions, visibility)

xcode_config 規則執行個體可依附於這項規則的兩個目標,指出遠端和本機可用的 Xcode 版本。這樣一來,您就能從所有可用的 Xcode 中選取正式版。

引數

屬性
name

名稱:必填

這個目標的專屬名稱。

default

標籤無法設定;必要

這個平台的預設 Xcode 版本。
versions

標籤清單;無法設定;預設為 []

這個平台提供的 Xcode 版本。

xcode_config

查看規則來源
xcode_config(name, default, deprecation, distribs, features, licenses, local_versions, remote_versions, tags, testonly, versions, visibility)

--xcode_version_config 建構標記可以參照這項規則的單一目標,將 --xcode_version 標記轉換為可接受的正式 Xcode 版本。這樣一來,您就能從多個已註冊的別名中選取正式版 Xcode。

引數

屬性
name

名稱:必填

這個目標的專屬名稱。

default

標籤不可設定;預設值為 None

要使用的預設官方 Xcode 版本。 如果未指定 xcode_version 建構旗標,系統會使用所提供 xcode_version 目標指定的版本。如果設定任何 versions,就必須提供這項資訊。如果已設定 remote_versionslocal_versions,則可能無法設定此屬性。
local_versions

標籤不可設定;預設值為 None

當地可用的 xcode_version 目標。 這些項目會與 local_versions 一起使用,選取可用的版本。如果已設定 versions,則可能不會設定這項屬性。
remote_versions

標籤不可設定;預設值為 None

可遠端使用的 xcode_version 目標。 這些項目會與 remote_versions 一起使用,選取可用的版本。如果已設定 versions,則可能不會設定這項屬性。
versions

標籤清單;無法設定;預設為 []

可使用的接受 xcode_version 目標。 如果 xcode_version 建構旗標的值與任何指定 xcode_version 目標的別名或版本號碼相符,系統就會使用相符的目標。如果已設定 remote_versionslocal_versions,則可能無法設定此屬性。

xcode_version

查看規則來源
xcode_version(name, default_ios_sdk_version, default_macos_sdk_version, default_tvos_sdk_version, default_visionos_sdk_version, default_watchos_sdk_version, deprecation, distribs, features, licenses, tags, testonly, version, visibility)

代表單一官方 Xcode 版本,以及該 Xcode 版本的可接受別名。 請參閱 xcode_config 規則。

引數

屬性
name

名稱:必填

這個目標的專屬名稱。

default_ios_sdk_version

字串;不可設定;預設值為 ""

使用這個版本的 Xcode 時,預設使用的 iOS SDK 版本。 ios_sdk_version 建構旗標會覆寫這裡指定的值。
default_macos_sdk_version

字串;不可設定;預設值為 ""

使用這個版本的 Xcode 時,預設使用的 macosx sdk 版本。 macos_sdk_version 建構旗標會覆寫這裡指定的值。
default_tvos_sdk_version

字串;不可設定;預設值為 ""

使用這個版本的 Xcode 時,預設使用的 tvOS SDK 版本。 tvos_sdk_version 建構旗標會覆寫這裡指定的值。
default_visionos_sdk_version

字串;不可設定;預設值為 ""

使用這個版本的 Xcode 時,預設使用的 visionOS SDK 版本。 visionos_sdk_version 建構旗標會覆寫這裡指定的值。
default_watchos_sdk_version

字串;不可設定;預設值為 ""

使用這個版本的 Xcode 時,預設使用的 watchOS SDK 版本。 watchos_sdk_version 建構旗標會覆寫這裡指定的值。
version

字串;不可設定;必要

Xcode 版本的正式版本號碼。