Objective-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

Name; required

此目標的專屬名稱。

deps

List of labels; optional

包含要轉譯至 Objective-C 的 Java 檔案的 j2objc_libraryjava_libraryjava_importjava_proto_library 目標清單。

所有可透過 exportsdepsruntime_deps 傳輸的 java_libraryjava_import 目標都會經過翻譯與編譯,包括由 Java 註解處理產生的檔案。如果程式碼沒有指定 srcjar,則不支援代碼 java_import 目標。

J2ObjC 翻譯的運作方式取決於轉換關閉版本中包含的來源 Java 來源檔案類型。針對 java_librarysrcs 中包含的每個 .java 來源檔案,系統會產生對應的 .h 和 .m 來源檔案。對於 java_librarysrcsjava_import 中的 srcjar 中的每個來源 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 protos,並進行編譯和連結作業。針對 proto //some/proto/foo.proto,使用者可以使用匯入路徑 some/proto/foo.j2objc.pb.h 參照產生的程式碼。

entry_classes

List of strings; optional

使用者 ObjC 程式碼會直接參照已翻譯的 ObjC 對應項目的 Java 類別清單。如果 --j2objc_dead_code_removal 標記已開啟,則為必要屬性。應按照 Java 語言規範的定義,在標準名稱中指定 Java 類別。指定 --j2objc_dead_code_removal 標記時,系統會收集傳輸項目類別清單,並用來當做進入點分析作業的進入點。然後,系統會將未使用的類別從最終的 ObjC 應用程式套件中移除。
jre_deps

List of labels; optional

所有 j2objc_library 規則翻譯所有 Java 程式碼所需的 JRE 模擬程式庫清單。根據預設,系統只會連結核心 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 檔案。這也支援使用 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 陳述式中指定整個工作區路徑的第三方和開放原始碼程式庫。

系統會根據套件目錄解讀路徑,除了實際用戶端根目錄以外,還會包含 genfile 和 bin 根目錄 (例如 blaze-genfiles/pkg/includedirblaze-out/pkg/includedir)。

COPTS 不同,系統會為這項規則及其所有適用規則新增這些標記。(注意:並非依靠規則!)請務必謹慎小心,因為這可能會產生嚴重影響。如有疑慮,請改為在 COPTS 中新增「-iquote」標記。

sdk_dylibs

List of strings; optional

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

List of strings; optional

要連結的 SDK 架構名稱 (例如「AddressBook」、「QuartzCore」)。針對 iOS、tvOS 和 watchOS 平台建構應用程式時,系統一律會納入「UIKit」和「Foundation」。macOS 版本一律會包含「Foundation」選項。

連結頂層 Apple 二進位檔時,該二進位檔轉換性依附元件圖表中列出的所有 SDK 架構都會連結。

sdk_includes

List of strings; optional

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

List of labels; optional

具有 C/C++、Objective-C 和 Objective-C++ 檔案清單的 C、C++、Objective-C 和 Objective-C++ 檔案,這些來源會在規則中或此程式庫的使用者以標頭形式加入標頭。不同於 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, 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

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 shell 權杖化。 這些標記只會套用至這個目標,而不會套用至其相依或依附於它的標記。

請注意,針對產生的 Xcode 專案,系統會剖析以 copt 中的「-I」旗標指定的目錄路徑,並在前面加上「$(WORKSPACE_ROOT)/」做為相對路徑,並新增至相關聯 Xcode 目標的標頭搜尋路徑。

defines

List of strings; optional

要傳送到編譯器的額外 -D 標記。格式應為 KEY=VALUE 或只是 KEY,而且不僅會傳送到這個目標的編譯器 (如同 copts),而且也會傳遞到這個目標的所有 objc_ 依附元件。需遵循「變量」替代與Bourne shell 權杖化
enable_modules

Boolean; optional; default is False

啟用 clang 模組支援 (透過 -fmodules)。如果將這項政策設為 1,則可 @import 系統標頭和其他目標: @import UIKit; @import path_to_package_target;
includes

List of strings; optional

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

系統會根據套件目錄解讀路徑,除了實際用戶端根目錄以外,還會包含 genfile 和 bin 根目錄 (例如 blaze-genfiles/pkg/includedirblaze-out/pkg/includedir)。

COPTS 不同,系統會為這項規則及其所有適用規則新增這些標記。(注意:並非依靠規則!)請務必謹慎小心,因為這可能會產生嚴重影響。如有疑慮,請改為在 COPTS 中新增「-iquote」標記。

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 的程式庫目標所處理的 Objective-C 檔案清單。系統會將此屬性中的檔案與 srcs 屬性中的檔案非常類似,但在編譯時未啟用 ARC。
pch

Label; optional

可在所有編譯過的來源檔案 (弧形和非弧形) 前面加上標頭檔案。我們不建議在建構檔案中使用 pch 檔案,這應該視為已淘汰。由於 pch 檔案實際上並未預先編譯,這並不是建構速度的強化,而是僅是全域依附元件。從建構效率的角度來看,您真正需要在需要來源的當下直接包含所需內容。
sdk_dylibs

List of strings; optional

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

List of strings; optional

要連結的 SDK 架構名稱 (例如「AddressBook」、「QuartzCore」)。針對 iOS、tvOS 和 watchOS 平台建構應用程式時,系統一律會納入「UIKit」和「Foundation」。macOS 版本一律會包含「Foundation」選項。

連結頂層 Apple 二進位檔時,該二進位檔轉換性依附元件圖表中列出的所有 SDK 架構都會連結。

sdk_includes

List of strings; optional

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

List of labels; optional

具有 C/C++、Objective-C 和 Objective-C++ 檔案清單的 C、C++、Objective-C 和 Objective-C++ 檔案,這些來源會在規則中或此程式庫的使用者以標頭形式加入標頭。不同於 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_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_watchos_sdk_version

String; optional; nonconfigurable

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

String; required; nonconfigurable

Xcode 版本的官方版本號碼。