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 傳輸標記 --j2objc_translation_flags

請注意,j2objc_library 目標中的翻譯檔案 預設編譯設定,與 建立一個 objc_library 規則,而屬性中沒有指定編譯選項。

此外,系統會在目標層級 (而非來源層級) 刪除重複的程式碼。如果你有兩個 包含相同 Java 來源檔案的不同 Java 目標,您可能會看到重複的符號錯誤 連結時間。解決這個問題的正確方式是將共用的 Java 來源檔案移到 可以依賴的個別常見目標。

引數

屬性
name

Name; required

此目標的專屬名稱。

deps

List of labels; optional

j2objc_libraryjava_library 的清單 java_importjava_proto_library 個目標包含 將 Java 檔案轉入 Objective-C。

所有允許觸及的java_libraryjava_import目標 穿過 exportsdepsruntime_deps 進行翻譯及編譯目前不支援透過 Java 產生的檔案 註解處理或 java_import 目標不含 srcjar

J2ObjC 轉譯的運作方式會因來源 Java 來源類型而異 檔案。針對以下項目提供的所有 .java 來源檔案: java_librarysrcs,對應的 .h 和 .m 來源檔案 。針對以下 srcs 所含的每個來源 Jar 第 java_librarysrcjar 項,共 java_import 項,這是 而對應的 .h 和 .m 來源檔案,將包含該 jar 檔案的所有程式碼。

使用者可以在程式碼中匯入 J2ObjC 產生的標頭檔案。的匯入路徑 這些檔案是原始 Java 構件的根相關路徑。例如: 「//some/package/foo.java」的匯入路徑是 some/package/foo.h//some/package/bar.srcjarsome/package/bar.h

如果 proto_library 規則未在這項規則的遞移性停用,J2ObjC proto 也會 產生、編譯及連結於二進位檔層級適用於 proto //some/proto/foo.proto,使用者可透過匯入功能參照產生的程式碼 路徑 some/proto/foo.j2objc.pb.h

entry_classes

List of strings; optional

將直接參照已翻譯 ObjC 對應項目的 Java 類別清單 依據使用者的 ObjC 程式碼啟用旗標 --j2objc_dead_code_removal 時,必須提供這項屬性。指定 Java 類別時,應依照 Java 語言規格。 指定 --j2objc_dead_code_removal 旗標時,會列出項目類別 將收集資料,並用做無效程式碼分析的進入點。 系統會將未使用的類別從最終的 ObjC 應用程式套件中移除。
jre_deps

List of labels; optional

所有 Java 程式碼翻譯所需的其他 JRE 模擬程式庫清單 j2objc_library 規則。系統只會連結核心 JRE 功能。

objc_import

objc_import(name, 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 檔案。另外,您也能透過 Cloud Shell 的 objc_library 支援的屬性。

引數

屬性
name

Name; required

此目標的專屬名稱。

hdrs

List of labels; optional

已發布 C、C++、Objective-C 和 Objective-C++ 標頭檔案的清單 才會納入適用規則的來源。

這些標頭說明程式庫的公用介面, 由來源納入這項規則或適用 不過,編寫這類演算法並不容易 因為我們無法寫出所有可能的規則不應由這個程式庫的用戶端包含的標頭 應改為列在 srcs 屬性中。

如果已啟用模組,系統會將這些模組與來源分開編譯。

Boolean; optional; default is False

如為 1,則任何直接或間接與此協議相依的套件或二進位檔 資料夾中列出的檔案 srcsnon_arc_srcs (即使有些不含任何值) 二進位參照的符號。 如果程式碼中的程式碼未明確呼叫,這個方法就很實用 二進位檔案 (舉例來說,如果您的程式碼註冊以取得某些回呼) 這項工具可讓您存取 該基礎架構的各項服務
archives

List of labels; required

提供給目標 Objective-C 目標的 .a 檔案清單 取決於這個目標
includes

List of strings; optional

要新增至這個目標的 #include/#import 個搜尋路徑清單 且全部取決於指定目標 這會支援第三方和開放原始碼程式庫 指定整個工作區路徑 #import/#include 陳述式。

系統會根據套件目錄解譯路徑, genfiles 和 bin roots (例如 blaze-genfiles/pkg/includedirblaze-out/pkg/includedir) 也包含在內 實際的用戶端根目錄

最佳化不同,系統會在這項規則中新增這些標記 並提供相關的所有規則(注意:而不是仰賴的規則!)成為 因為這樣可能帶來相當深遠的影響有疑慮就加上 「-iquote」標記為 COPTS

sdk_dylibs

List of strings; optional

要連結的 SDK .dylib 程式庫名稱。例如「libz」或 「libArchive」。 "libc++"如果二進位檔有 C++ 或 依附元件樹狀結構中的 Objective-C++ 來源。連結二進位檔時 該二進位檔轉換依附元件圖中命名的所有程式庫都屬於
sdk_frameworks

List of strings; optional

要連結的 SDK 架構名稱 (例如「AddressBook」、「QuartzCore」)。「UIKit」和 「Foundation」(基礎)是針對 iOS、tvOS、visionOS、 和 watchOS 平台的關聯如果是 macOS,僅支援「Foundation」一律包含在內。

連結頂層 Apple 二進位檔時,該二進位檔中 連結及遞移依附元件圖表。

sdk_includes

List of strings; optional

要新增至這個目標的 #include/#import 個搜尋路徑清單 並列出所有目標 (每條路徑都與 $(SDKROOT)/usr/include
textual_hdrs

List of labels; optional

指定一系列 由這項規則的來源檔案或將此規則的使用者納入標頭 資源庫。與 hdrs 不同,不會與 hdrs 分開編譯 資料來源
weak_sdk_frameworks

List of strings; optional

要連結較弱的 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, runtime_deps, sdk_dylibs, sdk_frameworks, sdk_includes, tags, target_compatible_with, testonly, textual_hdrs, toolchains, visibility, weak_sdk_frameworks)

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

引數

屬性
name

Name; required

此目標的專屬名稱。

deps

List of labels; optional

為構成最終組合而彼此連結的目標清單。
srcs

List of labels; optional

C、C++、Objective-C 和 Objective-C++ 來源和標頭的清單 檔案及/或 (`.s`、`.S` 或 `.asm`) 組合來源檔案,以用於建立 和程式庫目標 這些是您簽到的檔案,以及任何產生的檔案。 使用 Clang 將來源檔案編譯成 .o 檔案。標頭檔案 可由 srcs 屬性中的任何來源或標頭納入/匯入 這個目標的標頭,但不包含 Hdrs 中的標頭 。 此外,預先編譯的 .o 檔案也可指定為 srcs。請注意以下事項: 以確保所提供的 .o 檔案架構保持一致 版本,避免缺少符號連接器錯誤。
hdrs

List of labels; optional

已發布 C、C++、Objective-C 和 Objective-C++ 標頭檔案的清單 才會納入適用規則的來源。

這些標頭說明程式庫的公用介面, 由來源納入這項規則或適用 不過,編寫這類演算法並不容易 因為我們無法寫出所有可能的規則不應由這個程式庫的用戶端包含的標頭 應改為列在 srcs 屬性中。

如果已啟用模組,系統會將這些模組與來源分開編譯。

Boolean; optional; default is False

如為 1,則任何直接或間接與此協議相依的套件或二進位檔 資料夾中列出的檔案 srcsnon_arc_srcs (即使有些不含任何值) 二進位參照的符號。 如果程式碼中的程式碼未明確呼叫,這個方法就很實用 二進位檔案 (舉例來說,如果您的程式碼註冊以取得某些回呼) 這項工具可讓您存取 該基礎架構的各項服務
copts

List of strings; optional

要傳遞至編譯器的額外標記。 取決於「化變數」替代和 Bourne 殼層權杖化。 這些標記僅適用於這個目標,不適用於 也取決於 因素

請注意,針對產生的 Xcode 專案,請使用「-I」指定的目錄路徑旗標 動物被剖析,在前面加上「$(WORKSPACE_ROOT)/」如果 Pod 是相對路徑 新增至相關 Xcode 目標的標頭搜尋路徑。

defines

List of strings; optional

要傳遞至編譯器的額外 -D 標記。他們應該會 KEY=VALUEKEY 形式, 不僅會傳遞給此目標的編譯器 (做為 copts) ) 以及此目標的所有 objc_ 依附元件。 取決於「化變數」替代和 Bourne 殼層權杖化
enable_modules

Boolean; optional; default is False

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

List of labels; optional

該程式庫鎖定的其他程式庫清單。取消喜歡 deps,標頭和包含這些程式庫的路徑 (及其全部路徑) 遞移依附元件) 只會用於這個程式庫的編譯作業,不適用於 依靠它使用 implementation_deps 指定的程式庫仍保持連結狀態 仰賴這個程式庫的二進位目標中
includes

List of strings; optional

要新增至這個目標的 #include/#import 個搜尋路徑清單 且全部取決於指定目標 這會支援第三方和開放原始碼程式庫 指定整個工作區路徑 #import/#include 陳述式。

系統會根據套件目錄解譯路徑, genfiles 和 bin roots (例如 blaze-genfiles/pkg/includedirblaze-out/pkg/includedir) 也包含在內 實際的用戶端根目錄

最佳化不同,系統會在這項規則中新增這些標記 並提供相關的所有規則(注意:而不是仰賴的規則!)成為 因為這樣可能帶來相當深遠的影響有疑慮就加上 「-iquote」標記為 COPTS

linkopts

List of strings; optional

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

Label; optional

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

String; optional

設定這個目標的模組名稱。根據預設,模組名稱為 所有以 _ 取代的特殊符號,例如://foo/baz:bar 可以匯入為 foo_baz_bar。
non_arc_srcs

List of labels; optional

為建立目標 「並未」使用 ARC 的程式庫目標 這個屬性中的檔案的處理方式與 srcs 屬性,但在未啟用 ARC 的情況下進行編譯。
pch

Label; optional

在每個編譯的來源檔案前面加上標頭檔案 (包括弧線) 非弧形)。 我們不建議在 BUILD 檔案中使用 pch 檔案, 視為已淘汰由於 pch 檔案實際上並未預先編譯,因此 只是一個全域依附元件從建構作業 我們認為,關鍵就在於改善成效 適時提供恰當的報導
runtime_deps

List of labels; optional

要在執行階段延遲載入的架構目標清單。這些修訂版本包含在 ,但在建構期間未連結至 應用程式套件。
sdk_dylibs

List of strings; optional

要連結的 SDK .dylib 程式庫名稱。例如「libz」或 「libArchive」。 "libc++"如果二進位檔有 C++ 或 依附元件樹狀結構中的 Objective-C++ 來源。連結二進位檔時 該二進位檔轉換依附元件圖中命名的所有程式庫都屬於
sdk_frameworks

List of strings; optional

要連結的 SDK 架構名稱 (例如「AddressBook」、「QuartzCore」)。「UIKit」和 「Foundation」(基礎)是針對 iOS、tvOS、visionOS、 和 watchOS 平台的關聯如果是 macOS,僅支援「Foundation」一律包含在內。

連結頂層 Apple 二進位檔時,該二進位檔中 連結及遞移依附元件圖表。

sdk_includes

List of strings; optional

要新增至這個目標的 #include/#import 個搜尋路徑清單 並列出所有目標 (每條路徑都與 $(SDKROOT)/usr/include
textual_hdrs

List of labels; optional

指定一系列 由這項規則的來源檔案或將此規則的使用者納入標頭 資源庫。與 hdrs 不同,不會與 hdrs 分開編譯 資料來源
weak_sdk_frameworks

List of strings; optional

要連結較弱的 SDK 架構名稱。舉例來說: 「MediaAccessibility」。 符號與定期連結的 SDK 架構不同 不會導致錯誤發生 都不會在執行階段出現

available_xcodes

available_xcodes(name, default, deprecation, distribs, features, licenses, tags, testonly, versions, visibility)

xcode_config 規則執行個體可以依附於這項規則的兩個目標 指出遠端和本機可用的 Xcode 版本。 這可讓您從集體可用的 Xcode 中選取官方 Xcode 版本。

引數

屬性
name

Name; required

此目標的專屬名稱。

default

Label; required; nonconfigurable

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

List of labels; optional; nonconfigurable

此平台可用的 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

Name; required

此目標的專屬名稱。

default

Label; optional; nonconfigurable

要使用的預設官方 xcode 版本。 如果發生以下情況,系統將使用提供的 xcode_version 目標指定版本 未指定 xcode_version 建構旗標。(如有) 已設定 versions。如果 remote_versionslocal_versions已設定。
local_versions

Label; optional; nonconfigurable

xcode_version targets that are available locally. These are used along with local_versions to select a mutually available version. This may not be set if versions is set.
remote_versions

Label; optional; nonconfigurable

xcode_version targets that are available remotely. These are used along with remote_versions to select a mutually available version. This may not be set if versions is set.
versions

List of labels; optional; nonconfigurable

xcode_version targets that may be used. If the value of the xcode_version build flag matches one of the aliases or version number of any of the given xcode_version targets, the matching target will be used. This may not be set if remote_versions or local_versions is set. 項已接受

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

Name; required

此目標的專屬名稱。

default_ios_sdk_version

String; optional; nonconfigurable

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

String; optional; nonconfigurable

使用此 xcode 版本時,預設使用的 macosx SDK 版本。 macos_sdk_version 建構旗標會覆寫此處指定的值。
default_tvos_sdk_version

String; optional; nonconfigurable

使用這個 xcode 版本時,預設使用的 tvos SDK 版本。 tvos_sdk_version 建構旗標會覆寫此處指定的值。
default_visionos_sdk_version

String; optional; nonconfigurable

使用這個 xcode 版本時,預設使用的 Vision SDK 版本。 visionos_sdk_version 建構旗標會覆寫此處指定的值。
default_watchos_sdk_version

String; optional; nonconfigurable

使用這個 xcode 版本時,預設使用的 Watchos SDK 版本。 watchos_sdk_version 建構旗標會覆寫此處指定的值。
version

String; required; nonconfigurable

Xcode 的官方版本號碼。