Quy tắc Objective-C

Quy tắ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)

Quy tắc này sử dụng J2ObjC để dịch nguồn Java các tệp vào Target-C, các tệp này sau đó có thể được dùng làm phần phụ thuộc của objc_library và objc_binary quy tắc. Bạn có thể tìm thấy thông tin chi tiết về J2ObjC tại Trang web của J2ObjC

Bạn có thể chỉ định cờ chuyển đổi J2ObjC tuỳ chỉnh bằng cờ bản dựng --j2objc_translation_flags trong dòng lệnh.

Xin lưu ý rằng các tệp đã dịch được đưa vào mục tiêu j2objc_library sẽ được được biên dịch bằng cách sử dụng cấu hình biên dịch mặc định, cùng cấu hình như đối với các nguồn của một quy tắc objc_library không có tuỳ chọn biên dịch nào được chỉ định trong các thuộc tính.

Ngoài ra, mã được tạo sẽ được loại bỏ trùng lặp ở cấp mục tiêu, chứ không phải ở cấp nguồn. Nếu có đích Java khác nhau bao gồm cùng tệp nguồn Java, bạn có thể thấy lỗi biểu tượng trùng lặp tại thời điểm liên kết. Cách đúng để giải quyết vấn đề này là di chuyển các tệp nguồn Java được chia sẻ vào một mục tiêu chung riêng biệt có thể phụ thuộc vào.

Đối số

Thuộc tính
name

Name; required

Tên duy nhất cho mục tiêu này.

deps

List of labels; optional

Danh sách j2objc_library, java_library, Các mục tiêu java_importjava_proto_library chứa Các tệp Java sẽ được chuyển đổi sang Object-C.

Có thể đạt được tất cả mục tiêu java_libraryjava_import theo cách bắc cầu qua exports, depsruntime_deps sẽ được dịch và biên dịch. Các tệp do Java hiện chưa hỗ trợ mục tiêu xử lý chú giải hoặc java_import không có srcjar đã chỉ định.

Bản dịch J2ObjC hoạt động khác nhau tuỳ thuộc vào loại nguồn Java tệp có trong đóng chuyển tiếp. Đối với mỗi tệp nguồn .java có trong srcs trong số java_library, một tệp nguồn .h và .m tương ứng sẽ được tạo. Đối với mỗi tệp nguồn có trong srcs java_library hoặc srcjar trong số java_import, a tệp nguồn .h và .m tương ứng sẽ được tạo cùng với tất cả mã cho jar đó.

Người dùng có thể nhập các tệp tiêu đề do J2ObjC tạo trong mã của họ. Đường dẫn nhập cho các tệp này là đường dẫn gốc tương đối của cấu phần phần mềm Java ban đầu. Ví dụ: //some/package/foo.java có đường dẫn nhập là some/package/foo.h//some/package/bar.srcjarsome/package/bar.h

Nếu các quy tắc proto_library nằm trong cầu đóng bắc cầu của quy tắc này, thì các proto J2ObjC cũng sẽ được tạo, biên dịch và liên kết ở cấp độ nhị phân. Cho proto //some/proto/foo.proto, người dùng có thể tham chiếu mã đã tạo bằng cách sử dụng tính năng nhập đường dẫn some/proto/foo.j2objc.pb.h.

entry_classes

List of strings; optional

Danh sách các lớp Java có phần đối chiếu ObjC được dịch sẽ được tham chiếu trực tiếp theo mã ObjC của người dùng. Thuộc tính này là bắt buộc nếu cờ --j2objc_dead_code_removal đang bật. Các lớp Java phải được chỉ định trong tên chuẩn của chúng như được xác định bằng Java Quy cách ngôn ngữ. Khi cờ --j2objc_dead_code_removal được chỉ định, danh sách các lớp mục nhập sẽ được thu thập bắc cầu và dùng làm điểm truy cập để tiến hành phân tích mã bị lỗi. Sau đó, các lớp không dùng đến sẽ bị xoá khỏi gói ứng dụng ObjC cuối cùng.
jre_deps

List of labels; optional

Danh sách các thư viện mô phỏng JRE bổ sung mà tất cả mã Java được dịch bằng ngôn ngữ này đều yêu cầu j2objc_library quy tắc. Theo mặc định, chỉ chức năng JRE chính mới được liên kết.

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)

Quy tắc này đóng gói một thư viện tĩnh đã được biên dịch dưới dạng một Tệp .a. API này cũng cho phép xuất tiêu đề và tài nguyên bằng cùng một do objc_library hỗ trợ.

Đối số

Thuộc tính
name

Name; required

Tên duy nhất cho mục tiêu này.

hdrs

List of labels; optional

Danh sách các tệp tiêu đề C, C++, Target-C và Target-C++ đã xuất bản bởi thư viện này để được đưa vào bởi các nguồn trong quy tắc độc lập.

Các tiêu đề này mô tả giao diện công khai của thư viện và sẽ được cung cấp để đưa vào bởi các nguồn trong quy tắc này hoặc độc lập quy tắc. Tiêu đề không dành cho ứng dụng khách của thư viện này thay vào đó sẽ được liệt kê trong thuộc tính srcs.

Các mô-đun này sẽ được biên dịch riêng biệt với nguồn nếu bạn bật các mô-đun.

Boolean; optional; default is False

Nếu là 1, bất kỳ gói hoặc tệp nhị phân nào phụ thuộc (trực tiếp hoặc gián tiếp) vào giá trị này thư viện sẽ liên kết trong tất cả các tệp đối tượng cho các tệp được liệt kê trong srcsnon_arc_srcs, ngay cả khi một số thuộc tính không chứa được tham chiếu bởi tệp nhị phân. Điều này rất hữu ích nếu mã của bạn không được gọi rõ ràng bằng mã trong tệp nhị phân, ví dụ: nếu mã của bạn đăng ký nhận một số lệnh gọi lại do một số dịch vụ cung cấp.
archives

List of labels; required

Danh sách các tệp .a được cung cấp cho Target-C nhắm mục tiêu phụ thuộc vào mục tiêu này.
includes

List of strings; optional

Danh sách #include/#import đường dẫn tìm kiếm để thêm vào mục tiêu này và tất cả các mục tiêu phụ thuộc. Điều này nhằm hỗ trợ các thư viện bên thứ ba và thư viện nguồn mở không chỉ định toàn bộ đường dẫn không gian làm việc trong Câu lệnh #import/#include.

Các đường dẫn này được diễn giải tương ứng với thư mục gói và tệp gen và gốc bin (ví dụ: blaze-genfiles/pkg/includedirblaze-out/pkg/includedir) được đưa vào ngoài gốc của ứng dụng khách thực tế.

Không giống như COPTS, những cờ này được thêm cho quy tắc này và mọi quy tắc phụ thuộc vào nó. (Lưu ý: không phải quy tắc mà nó phụ thuộc vào!) Hãy thật cẩn thận, vì việc này có thể có ảnh hưởng sâu rộng. Khi nghi ngờ, hãy thêm "-dấu ngoặc kép" gắn cờ vào COPTS.

sdk_dylibs

List of strings; optional

Tên của thư viện SDK .dylib để liên kết. Ví dụ: "libz" hoặc "liblưu trữ". "libc++" sẽ được tự động đưa vào nếu tệp nhị phân có bất kỳ mã C++ hoặc Các nguồn Target-C++ trong cây phụ thuộc của nó. Khi liên kết một tệp nhị phân, tất cả các thư viện có tên trong đồ thị phụ thuộc bắc cầu của tệp nhị phân đó là đã sử dụng.
sdk_frameworks

List of strings; optional

Tên của các khung SDK để liên kết (ví dụ: "AddressBook", "QuartzCore"). "UIKit" và "Nền tảng" luôn được đưa vào khi xây dựng cho iOS, tvOS, visionOS, và nền tảng watchOS. Đối với macOS, chỉ "Foundation" (Nền tảng) luôn được đưa vào.

Khi liên kết một tệp nhị phân cấp cao nhất của Apple, tất cả khung SDK được liệt kê trong tệp nhị phân đó biểu đồ phần phụ thuộc bắc cầu được liên kết.

sdk_includes

List of strings; optional

Danh sách #include/#import đường dẫn tìm kiếm để thêm vào mục tiêu này và tất cả các mục tiêu phụ thuộc, trong đó mỗi đường dẫn tương ứng với $(SDKROOT)/usr/include
textual_hdrs

List of labels; optional

Danh sách các tệp C, C++, Khoảnh khắc - C và được đưa vào dưới dạng tiêu đề bởi tệp nguồn trong quy tắc này hoặc bởi người dùng thư viện của bạn. Không giống như hdr, các giá trị này sẽ không được biên dịch riêng biệt với nguồn.
weak_sdk_frameworks

List of strings; optional

Tên khung SDK cần liên kết yếu. Ví dụ: "MediaAccessibility". Khác với khung SDK được liên kết thường xuyên, ký hiệu từ các khung được liên kết yếu sẽ không gây ra lỗi nếu chúng không xuất hiện trong thời gian chạy.

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)

Quy tắc này tạo ra một thư viện tĩnh từ các tệp nguồn Target-C đã cho.

Đối số

Thuộc tính
name

Name; required

Tên duy nhất cho mục tiêu này.

deps

List of labels; optional

Danh sách các mục tiêu được liên kết với nhau để tạo thành gói cuối cùng.
srcs

List of labels; optional

Danh sách nguồn và tiêu đề C, C++, Khoảnh khắc / C và C ++ các tệp và/hoặc (.s`, .S` hoặc.asm`) được xử lý để tạo mục tiêu thư viện. Đây là những tệp bạn đã đăng ký, cùng với mọi tệp đã tạo. Các tệp nguồn được biên dịch thành các tệp .o bằng Clang. Tệp tiêu đề có thể được thêm/nhập bởi bất kỳ nguồn hoặc tiêu đề nào trong thuộc tính srcs của mục tiêu này, nhưng không phải bởi các tiêu đề trong hdr hoặc bất kỳ mục tiêu nào phụ thuộc về quy tắc này. Ngoài ra, các tệp .o được biên dịch trước có thể được cung cấp dưới dạng src. Hãy cẩn thận đảm bảo tính nhất quán trong cấu trúc của các tệp .o được cung cấp và cấu trúc của tạo để tránh thiếu lỗi trình liên kết biểu tượng.
hdrs

List of labels; optional

Danh sách các tệp tiêu đề C, C++, Target-C và Target-C++ đã xuất bản bởi thư viện này để được đưa vào bởi các nguồn trong quy tắc độc lập.

Các tiêu đề này mô tả giao diện công khai của thư viện và sẽ được cung cấp để đưa vào bởi các nguồn trong quy tắc này hoặc độc lập quy tắc. Tiêu đề không dành cho ứng dụng khách của thư viện này thay vào đó sẽ được liệt kê trong thuộc tính srcs.

Các mô-đun này sẽ được biên dịch riêng biệt với nguồn nếu bạn bật các mô-đun.

Boolean; optional; default is False

Nếu là 1, bất kỳ gói hoặc tệp nhị phân nào phụ thuộc (trực tiếp hoặc gián tiếp) vào giá trị này thư viện sẽ liên kết trong tất cả các tệp đối tượng cho các tệp được liệt kê trong srcsnon_arc_srcs, ngay cả khi một số thuộc tính không chứa được tham chiếu bởi tệp nhị phân. Điều này rất hữu ích nếu mã của bạn không được gọi rõ ràng bằng mã trong tệp nhị phân, ví dụ: nếu mã của bạn đăng ký nhận một số lệnh gọi lại do một số dịch vụ cung cấp.
copts

List of strings; optional

Cờ bổ sung để truyền đến trình biên dịch. Theo sự thay thế "Tạo biến"Mã hoá bằng mã thông báo shell Bourne. Những cờ này sẽ chỉ áp dụng cho mục tiêu này chứ không áp dụng cho những cờ điều đó phụ thuộc hoặc những yếu tố phụ thuộc.

Lưu ý rằng đối với dự án Xcode đã tạo, đường dẫn thư mục được chỉ định bằng "-I" cờ ở copt được phân tích cú pháp, thêm "$(WORKSPACE_ROOT)/" nếu đó là các đường dẫn tương đối và đã thêm vào đường dẫn tìm kiếm ở tiêu đề cho mục tiêu Xcode được liên kết.

defines

List of strings; optional

Các cờ -D bổ sung để truyền đến trình biên dịch. Các nhãn này phải ở định dạng có dạng KEY=VALUE hoặc đơn giản là KEY và không chỉ được truyền cho trình biên dịch cho mục tiêu này (dưới dạng copts ) mà còn cho tất cả những người phụ thuộc objc_ của mục tiêu này. Theo sự thay thế "Tạo biến"Mã hoá bằng mã thông báo shell Bourne.
enable_modules

Boolean; optional; default is False

Bật tính năng hỗ trợ mô-đun clang (thông qua -fmodules). Đặt giá trị này thành 1 sẽ cho phép bạn @nhập tiêu đề hệ thống và các mục tiêu khác: @nhập UIKit; @nhập đường dẫn_to_package_target;
implementation_deps

List of labels; optional

Danh sách các thư viện khác mà thư viện nhắm đến phụ thuộc vào. Ngừng thích với deps, tiêu đề và bao gồm đường dẫn của các thư viện này (cũng như tất cả các đường dẫn Phần phụ thuộc bắc cầu) chỉ được dùng để biên dịch thư viện này chứ không phải các thư viện phụ thuộc vào mã đó. Các thư viện được chỉ định với implementation_deps vẫn được liên kết trong các mục tiêu nhị phân phụ thuộc vào thư viện này.
includes

List of strings; optional

Danh sách #include/#import đường dẫn tìm kiếm để thêm vào mục tiêu này và tất cả các mục tiêu phụ thuộc. Điều này nhằm hỗ trợ các thư viện bên thứ ba và thư viện nguồn mở không chỉ định toàn bộ đường dẫn không gian làm việc trong Câu lệnh #import/#include.

Các đường dẫn này được diễn giải tương ứng với thư mục gói và tệp gen và gốc bin (ví dụ: blaze-genfiles/pkg/includedirblaze-out/pkg/includedir) được đưa vào ngoài gốc của ứng dụng khách thực tế.

Không giống như COPTS, những cờ này được thêm cho quy tắc này và mọi quy tắc phụ thuộc vào nó. (Lưu ý: không phải quy tắc mà nó phụ thuộc vào!) Hãy thật cẩn thận, vì việc này có thể có ảnh hưởng sâu rộng. Khi nghi ngờ, hãy thêm "-dấu ngoặc kép" gắn cờ vào COPTS.

linkopts

List of strings; optional

Cờ bổ sung để truyền đến trình liên kết.
module_map

Label; optional

Một bản đồ mô-đun Clang tuỳ chỉnh cho mục tiêu này. Bạn không nên sử dụng bản đồ mô-đun tuỳ chỉnh. Thường gặp nhất người dùng nên sử dụng bản đồ mô-đun do Bazel tạo. Nếu được chỉ định, Bazel sẽ không tạo bản đồ mô-đun cho mục tiêu này, nhưng sẽ chuyển hàm đã cung cấp bản đồ mô-đun cho trình biên dịch.
module_name

String; optional

Đặt tên mô-đun cho mục tiêu này. Theo mặc định, tên mô-đun là đường dẫn mục tiêu tất cả ký hiệu đặc biệt được thay thế bằng _, ví dụ: //foo/baz:bar có thể được nhập dưới dạng foo_baz_bar.
non_arc_srcs

List of labels; optional

Danh sách các tệp Target-C được xử lý để tạo thư viện mục tiêu KHÔNG sử dụng ARC. Các tệp trong thuộc tính này được xử lý rất giống với các tệp trong srcs, nhưng được biên dịch mà không bật ARC.
pch

Label; optional

Tệp tiêu đề để thêm vào trước mỗi tệp nguồn đang được biên dịch (cả hai Arc và không thuộc cung). Bạn không nên sử dụng tệp pch trong tệp BUILD và bạn nên được coi là không dùng nữa. Vì các tệp pch không thực sự được biên dịch trước, nên một cải tiến tốc độ bản dựng và thay vào đó chỉ là một phần phụ thuộc chung. Từ một bản dựng quan điểm hiệu quả, bạn thực sự tốt hơn bao gồm cả những gì bạn cần trực tiếp vào các nguồn mà bạn cần.
runtime_deps

List of labels; optional

Danh sách mục tiêu khung bị tải muộn trong thời gian chạy. Chúng được bao gồm trong gói ứng dụng nhưng không được liên kết tại thời điểm xây dựng.
sdk_dylibs

List of strings; optional

Tên của thư viện SDK .dylib để liên kết. Ví dụ: "libz" hoặc "liblưu trữ". "libc++" sẽ được tự động đưa vào nếu tệp nhị phân có bất kỳ mã C++ hoặc Các nguồn Target-C++ trong cây phụ thuộc của nó. Khi liên kết một tệp nhị phân, tất cả các thư viện có tên trong đồ thị phụ thuộc bắc cầu của tệp nhị phân đó là đã sử dụng.
sdk_frameworks

List of strings; optional

Tên của các khung SDK để liên kết (ví dụ: "AddressBook", "QuartzCore"). "UIKit" và "Nền tảng" luôn được đưa vào khi xây dựng cho iOS, tvOS, visionOS, và nền tảng watchOS. Đối với macOS, chỉ "Foundation" (Nền tảng) luôn được đưa vào.

Khi liên kết một tệp nhị phân cấp cao nhất của Apple, tất cả khung SDK được liệt kê trong tệp nhị phân đó biểu đồ phần phụ thuộc bắc cầu được liên kết.

sdk_includes

List of strings; optional

Danh sách #include/#import đường dẫn tìm kiếm để thêm vào mục tiêu này và tất cả các mục tiêu phụ thuộc, trong đó mỗi đường dẫn tương ứng với $(SDKROOT)/usr/include
textual_hdrs

List of labels; optional

Danh sách các tệp C, C++, Khoảnh khắc - C và được đưa vào dưới dạng tiêu đề bởi tệp nguồn trong quy tắc này hoặc bởi người dùng thư viện của bạn. Không giống như hdr, các giá trị này sẽ không được biên dịch riêng biệt với nguồn.
weak_sdk_frameworks

List of strings; optional

Tên khung SDK cần liên kết yếu. Ví dụ: "MediaAccessibility". Khác với khung SDK được liên kết thường xuyên, ký hiệu từ các khung được liên kết yếu sẽ không gây ra lỗi nếu chúng không xuất hiện trong thời gian chạy.

available_xcodes

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

Một thực thể quy tắc xcode_config có thể phụ thuộc vào hai mục tiêu của quy tắc này để cho biết các phiên bản xcode từ xa và cục bộ có sẵn. Điều này cho phép lựa chọn phiên bản xcode chính thức từ các mã xcode có sẵn chung.

Đối số

Thuộc tính
name

Name; required

Tên duy nhất cho mục tiêu này.

default

Label; required; nonconfigurable

Phiên bản xcode mặc định cho nền tảng này.
versions

List of labels; optional; nonconfigurable

Các phiên bản xcode có sẵn trên nền tảng này.

xcode_config

xcode_config(name, default, deprecation, distribs, features, licenses, local_versions, remote_versions, tags, testonly, versions, visibility)

Bản dựng --xcode_version_config có thể tham chiếu một mục tiêu duy nhất của quy tắc này để chuyển cờ --xcode_version thành phiên bản xcode chính thức được chấp nhận. Điều này cho phép lựa chọn phiên bản xcode chính thức từ một số bí danh đã đăng ký.

Đối số

Thuộc tính
name

Name; required

Tên duy nhất cho mục tiêu này.

default

Label; optional; nonconfigurable

Phiên bản chính thức mặc định của xcode để sử dụng. Phiên bản được chỉ định bởi mục tiêu xcode_version đã cung cấp sẽ được sử dụng nếu không có cờ bản dựng xcode_version nào được chỉ định. Đây là yêu cầu bắt buộc nếu có Đã đặt versions. Bạn có thể không thiết lập được chế độ này nếu remote_versions hoặc Đã đặt local_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. nội dung thay đổi được chấp nhận

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)

Đại diện cho một phiên bản xcode chính thức có bí danh được chấp nhận cho phiên bản xcode đó. Xem quy tắc xcode_config.

Đối số

Thuộc tính
name

Name; required

Tên duy nhất cho mục tiêu này.

default_ios_sdk_version

String; optional; nonconfigurable

Phiên bản sdk của iOS được sử dụng theo mặc định khi phiên bản xcode này đang được sử dụng. Cờ bản dựng ios_sdk_version sẽ ghi đè giá trị được chỉ định ở đây.
default_macos_sdk_version

String; optional; nonconfigurable

Phiên bản sdk macosx được sử dụng theo mặc định khi phiên bản xcode này đang được sử dụng. Cờ bản dựng macos_sdk_version sẽ ghi đè giá trị được chỉ định ở đây.
default_tvos_sdk_version

String; optional; nonconfigurable

Phiên bản SDK của tvos được sử dụng theo mặc định khi đang sử dụng phiên bản xcode này. Cờ bản dựng tvos_sdk_version sẽ ghi đè giá trị được chỉ định ở đây.
default_visionos_sdk_version

String; optional; nonconfigurable

Phiên bản Marketplace của sdk được sử dụng theo mặc định khi phiên bản xcode này đang được sử dụng. Cờ bản dựng visionos_sdk_version sẽ ghi đè giá trị được chỉ định ở đây.
default_watchos_sdk_version

String; optional; nonconfigurable

Phiên bản sdk của watchos được sử dụng theo mặc định khi phiên bản xcode này đang được sử dụng. Cờ bản dựng watchos_sdk_version sẽ ghi đè giá trị được chỉ định ở đây.
version

String; required; nonconfigurable

Số phiên bản chính thức của một phiên bản Xcode.