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_librarysrcs 中包含的各個 .java 來源檔案產生相對應的 .h 和 .m 來源檔案。針對 java_librarysrcsjava_importsrcjar 內含的每個來源 jar 檔案,系統將使用該 jar 檔案的所有程式碼產生對應的 .h 和 .m 來源檔案。

使用者可以在程式碼中匯入 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 程式碼將直接參照已翻譯 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 陳述式中指定整個工作區路徑的第三方和開放原始碼程式庫。

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

最佳化調整不同的是,系統會將這些標記新增至這項規則及其相依的所有規則。(注意:而不是仰賴的規則!)請務必小心,因為這可能會造成嚴重影響。如有疑問,請改為在 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++ 檔案清單。與 hdrs 不同,不會與來源分開編譯。
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 殼層權杖化」作業。 這些標記只會套用至這個目標,不會套用至相依關係或依賴該目標的標記。

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

defines

字串清單;預設值為 []

要傳遞至編譯器的額外 -D 標記。這些字串應採用 KEY=VALUE 格式或只是 KEY,且不僅會傳遞給這個目標的編譯器 (就像 copts),還會傳送給這個目標的所有 objc_ 依附元件。取決於「建立變數」和「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 陳述式中指定整個工作區路徑的第三方和開放原始碼程式庫。

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

最佳化調整不同的是,系統會將這些標記新增至這項規則及其相依的所有規則。(注意:而不是仰賴的規則!)請務必小心,因為這可能會造成嚴重影響。如有疑問,請改為在 COPTS 中新增「-iquote」標記。

linkopts

字串清單;預設值為 []

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

標籤;預設值為 None

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

字串;預設值為 ""

設定這個目標的模組名稱。模組名稱預設為目標路徑,其中所有特殊符號會替換為 _,例如 //foo/baz:bar 可以匯入為 foo_baz_bar。
non_arc_srcs

標籤清單;預設值為 []

為建立「不」使用 ARC 的程式庫目標時,系統會處理的 Objective-C 檔案清單。此屬性中的檔案的處理方式與 srcs 屬性中的檔案非常類似,但在編譯時未啟用 ARC。
pch

標籤;預設值為 None

每個正在編譯的來源檔案 (包含弧形和非弧形) 前面加上標頭檔案。 我們不建議在 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++ 檔案清單。與 hdrs 不同,不會與來源分開編譯。
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

字串;nonconfigurable;預設值為 ""

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

字串;nonconfigurable;預設值為 ""

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

字串;nonconfigurable;預設值為 ""

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

字串;nonconfigurable;預設值為 ""

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

字串;nonconfigurable;預設值為 ""

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

字串;nonconfigurable;必要

Xcode 版本的官方版本號碼。