Goal-C 規則

回報問題 查看原始碼 Nightly · 8.0 7.4 . 7.3 · 7.2 · 7.1 · 7.0 · 6.5

規則

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

標籤清單;預設為 []

包含 Java 檔案的 j2objc_libraryjava_libraryjava_importjava_proto_library 目標清單,這些檔案會轉譯為 Objective-C。

所有可透過 exportsdepsruntime_deps 間接存取的 java_libraryjava_import 目標都會進行轉譯和編譯,包括 Java 註解處理工具產生的檔案。系統不支援未指定 srcjar 的 code>java_import 目標。

J2ObjC 翻譯的運作方式會因傳遞閉合式中所包含的來源 Java 來源檔案類型而有所不同。對於 java_librarysrcs 中包含的每個 .java 來源檔案,系統都會產生對應的 .h 和 .m 來源檔案。對於 java_librarysrcsjava_importsrcjar 中所包含的每個來源 JAR,系統都會產生對應的 .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 //some/proto/foo.proto,使用者可以使用匯入路徑 some/proto/foo.j2objc.pb.h 參照產生的程式碼。

entry_classes

字串清單;預設為 []

使用者 ObjC 程式碼會直接參照的 Java 類別清單,其對應的 ObjC 類別已完成翻譯。如果旗標 --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 不同,這些標記會新增至此規則和依附於此規則的每個規則。(注意:不是依附的規則!)請務必謹慎操作,因為這可能會造成廣泛的影響。如有疑問,請改為將「-iquote」標記新增至 COPTS

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

字串清單;預設為 []

要傳遞至編譯器的額外標記。適用於「Make 變數」替換和 Bourne shell 符記化。這些標記只會套用至這個目標,而不會套用至這個目標所依賴的目標,或依賴這個目標的目標。

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

defines

字串清單;預設為 []

要傳遞至編譯器的額外 -D 標記。這些值應為 KEY=VALUEKEY 形式,且不僅會傳遞至此目標的編譯器 (如同 copts),還會傳遞至此目標的所有 objc_ 依附元件。適用於「Make 變數」替換和 Bourne 殼層符記化
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 不同,這些標記會新增至此規則和依附於此規則的每個規則。(注意:不是依附的規則!)請務必謹慎操作,因為這可能會造成廣泛的影響。如有疑問,請改為將「-iquote」標記新增至 COPTS

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 中選取官方 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 版本的官方版本號碼。