Aturan Objective-C

Laporkan masalah Lihat sumber Malam · 7,3 · 7,2 · 7,1 · 7,0 · 6,5

Aturan

j2objc_library

Lihat sumber aturan
j2objc_library(name, deps, compatible_with, deprecation, distribs, entry_classes, exec_compatible_with, exec_properties, features, jre_deps, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)

Aturan ini menggunakan J2ObjC untuk menerjemahkan sumber Java file ke Objective-C, yang kemudian dapat digunakan sebagai dependensi objc_library dan objc_binary aturan. Informasi mendetail tentang J2ObjC dapat ditemukan di Situs J2ObjC

Flag transpilasi J2ObjC kustom dapat ditentukan menggunakan flag build --j2objc_translation_flags di command line.

Perlu diketahui bahwa file yang diterjemahkan yang disertakan dalam target j2objc_library akan dikompilasi menggunakan konfigurasi kompilasi {i>default<i}, konfigurasi yang sama seperti aturan objc_library tanpa opsi kompilasi yang ditentukan dalam atribut.

Selain itu, kode yang dihasilkan dihapus duplikatnya di tingkat target, bukan tingkat sumber. Jika Anda memiliki dua berbagai target Java yang menyertakan file sumber Java yang sama, Anda mungkin melihat error simbol duplikat pada waktu penautan. Cara yang benar untuk menyelesaikan masalah ini adalah dengan memindahkan file sumber Java bersama ke target umum terpisah yang dapat diandalkan.

Argumen

Atribut
name

Nama; wajib diisi

Nama unik untuk target ini.

deps

Daftar label; default adalah []

Daftar j2objc_library, java_library, Target java_import dan java_proto_library yang berisi File Java yang akan ditranspilasi ke Objective-C.

Semua target java_library dan java_import yang dapat dicapai secara transitif melalui exports, deps, dan runtime_deps akan diterjemahkan dan dikompilasi, termasuk file yang dihasilkan oleh pemrosesan anotasi Java. Tidak ada dukungan untuk target code>java_import tanpa srcjar yang ditentukan.

Cara kerja terjemahan J2ObjC berbeda-beda tergantung pada jenis sumber Java file yang termasuk dalam penutupan transitif. Untuk setiap file sumber .java yang disertakan dalam srcs dari java_library, file sumber .h dan .m yang sesuai akan dibuat. Untuk setiap jar sumber yang disertakan dalam srcs java_library atau srcjar dari java_import, file sumber .h dan .m yang sesuai akan dibuat dengan semua kode untuk jar tersebut.

Pengguna dapat mengimpor file {i>header<i} yang dihasilkan J2ObjC dalam kode mereka. Jalur impor untuk file ini adalah jalur relatif akar dari artefak Java asli. Misalnya, //some/package/foo.java memiliki jalur impor some/package/foo.h dan //some/package/bar.srcjar memiliki some/package/bar.h

Jika aturan proto_library berada dalam penutupan transitif dari aturan ini, proto J2ObjC juga dibuat, dikompilasi, dan ditaut-in pada level biner. Untuk proto //some/proto/foo.proto, pengguna dapat mereferensikan kode yang dihasilkan menggunakan impor jalur some/proto/foo.j2objc.pb.h.

entry_classes

Daftar {i>string<i}; default-nya adalah []

Daftar class Java yang terjemahan ObjC-nya akan direferensikan secara langsung oleh pengguna kode ObjC. Atribut ini diperlukan jika tanda --j2objc_dead_code_removal aktif. Class Java harus ditentukan dalam nama kanonis seperti yang ditetapkan oleh aplikasi Java Spesifikasi Bahasa. Ketika flag --j2objc_dead_code_removal ditentukan, daftar class entri akan dikumpulkan secara transitif dan digunakan sebagai titik masuk untuk melakukan analisis kode yang sudah tidak berfungsi. Class yang tidak digunakan kemudian akan dihapus dari app bundle ObjC akhir.
jre_deps

Daftar label; default adalah []

Daftar library emulasi JRE tambahan yang dibutuhkan oleh semua kode Java yang diterjemahkan oleh j2objc_library aturan. Hanya fungsi JRE inti yang ditautkan secara default.

objc_import

Lihat sumber aturan
objc_import(name, deps, hdrs, alwayslink, archives, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, includes, restricted_to, sdk_dylibs, sdk_frameworks, sdk_includes, tags, target_compatible_with, testonly, textual_hdrs, toolchains, visibility, weak_sdk_frameworks)

Aturan ini mengenkapsulasi pustaka statis yang sudah dikompilasi dalam bentuk File .a. API ini juga memungkinkan ekspor header dan resource menggunakan metode atribut yang didukung oleh objc_library.

Argumen

Atribut
name

Nama; wajib diisi

Nama unik untuk target ini.

deps

Daftar label; default adalah []

Daftar target yang diandalkan target ini.
hdrs

Daftar label; default adalah []

Daftar file {i>header<i} C, C++, Objective-C, dan Objective-C++ yang dipublikasikan oleh library ini untuk disertakan oleh sumber dalam aturan dependen.

{i>Header<i} ini menjelaskan antarmuka publik untuk {i>library<i} dan akan disediakan untuk disertakan oleh sumber dalam aturan ini atau aturan. Header tidak dimaksudkan untuk disertakan oleh klien library ini harus tercantum dalam atribut srcs.

Kumpulan data ini akan dikompilasi secara terpisah dari sumber jika modul diaktifkan.

Boolean; default-nya adalah False

Jika 1, paket atau biner apa pun yang bergantung (langsung atau tidak langsung) pada {i>library<i} akan menautkan semua file objek untuk file yang tercantum dalam srcs dan non_arc_srcs, meskipun beberapa yang berisi tidak simbol yang direferensikan oleh biner. Fungsi ini berguna jika kode Anda tidak secara eksplisit dipanggil oleh kode di biner, misalnya, jika kode Anda mendaftar untuk menerima beberapa callback yang disediakan oleh beberapa layanan.
archives

Daftar label; wajib diisi

Daftar .a file yang diberikan ke target Objective-C yang bergantung pada target ini.
includes

Daftar {i>string<i}; default-nya adalah []

Daftar #include/#import jalur penelusuran untuk ditambahkan ke target ini dan semua target yang bergantung. Ini untuk mendukung library pihak ketiga dan open source yang tidak menentukan seluruh jalur ruang kerja di Pernyataan #import/#include.

Jalur ditafsirkan relatif terhadap direktori paket, dan genfile dan root bin (misalnya blaze-genfiles/pkg/includedir dan blaze-out/pkg/includedir) disertakan selain {i>root<i} klien yang sebenarnya.

Tidak seperti COPTS, tanda ini ditambahkan untuk aturan ini dan setiap aturan yang bergantung padanya. (Catatan: bukan aturan yang menjadi dependensinya.) Menjadi sangat berhati-hati, karena hal ini dapat menimbulkan jangkauan luas. Jika ragu, tambahkan "-iquote" flag ke COPTS.

sdk_dylibs

Daftar {i>string<i}; default-nya adalah []

Nama library .dylib SDK yang akan ditautkan. Misalnya, "libz" atau "libarchive". &quot;libc++&quot; disertakan secara otomatis jika biner memiliki {i>C++ <i}atau Sumber Objective-C++ dalam hierarki dependensinya. Saat menautkan biner, semua pustaka yang disebutkan dalam grafik dependensi transitif biner itu data
sdk_frameworks

Daftar {i>string<i}; default-nya adalah []

Nama framework SDK yang akan ditautkan (misalnya, "AddressBook", "QuartzCore").

Saat menautkan biner Apple tingkat atas, semua framework SDK yang tercantum dalam grafik dependensi transitif tertaut.

sdk_includes

Daftar {i>string<i}; default-nya adalah []

Daftar #include/#import jalur penelusuran untuk ditambahkan ke target ini dan semua target yang bergantung, di mana setiap jalur berhubungan $(SDKROOT)/usr/include.
textual_hdrs

Daftar label; default adalah []

Daftar file C, C++, Objective-C, dan Objective-C++ yang disertakan sebagai header menurut file sumber dalam aturan ini atau oleh pengguna library. Tidak seperti {i>hdr<i}, ini tidak akan dikompilasi secara terpisah dari sumber.
weak_sdk_frameworks

Daftar {i>string<i}; default-nya adalah []

Nama framework SDK yang ditautkan secara lemah. Contohnya, "MediaAccessibility". Perbedaan dengan framework SDK yang ditautkan secara rutin, simbol dari framework yang ditautkan secara lemah tidak menyebabkan error tidak ada pada runtime.

objc_library

Lihat sumber aturan
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, linkopts, module_map, module_name, non_arc_srcs, pch, restricted_to, sdk_dylibs, sdk_frameworks, sdk_includes, stamp, tags, target_compatible_with, testonly, textual_hdrs, toolchains, visibility, weak_sdk_frameworks)

Aturan ini menghasilkan library statis dari file sumber Objective-C yang ditentukan.

Argumen

Atribut
name

Nama; wajib diisi

Nama unik untuk target ini.

deps

Daftar label; default adalah []

Daftar target yang diandalkan target ini.
srcs

Daftar label; default adalah []

Daftar sumber dan header C, C++, Objective-C, dan Objective-C++ dan/atau file sumber assembly (`.s`, `.S`, atau `.asm`), yang diproses untuk membuat target library. Ini adalah file yang Anda check-in, serta file apa pun yang dihasilkan. File sumber dikompilasi menjadi file .o dengan Clang. File header dapat disertakan/diimpor oleh sumber atau header mana pun dalam atribut srcs target ini, tetapi bukan dengan header dalam hdrs atau target apa pun yang bergantung tentang aturan ini. Selain itu, file .o yang telah dikompilasi sebelumnya dapat diberikan sebagai srcs. Berhati-hatilah untuk memastikan konsistensi dalam arsitektur file .o yang disediakan dan build untuk menghindari error penaut simbol hilang.
hdrs

Daftar label; default adalah []

Daftar file {i>header<i} C, C++, Objective-C, dan Objective-C++ yang dipublikasikan oleh library ini untuk disertakan oleh sumber dalam aturan dependen.

{i>Header<i} ini menjelaskan antarmuka publik untuk {i>library<i} dan akan disediakan untuk disertakan oleh sumber dalam aturan ini atau aturan. Header tidak dimaksudkan untuk disertakan oleh klien library ini harus tercantum dalam atribut srcs.

Kumpulan data ini akan dikompilasi secara terpisah dari sumber jika modul diaktifkan.

Boolean; default-nya adalah False

Jika 1, paket atau biner apa pun yang bergantung (langsung atau tidak langsung) pada {i>library<i} akan menautkan semua file objek untuk file yang tercantum dalam srcs dan non_arc_srcs, meskipun beberapa yang berisi tidak simbol yang direferensikan oleh biner. Fungsi ini berguna jika kode Anda tidak secara eksplisit dipanggil oleh kode di biner, misalnya, jika kode Anda mendaftar untuk menerima beberapa callback yang disediakan oleh beberapa layanan.
copts

Daftar {i>string<i}; default-nya adalah []

Tanda tambahan untuk diteruskan ke compiler. Tunduk kepada substitusi "Buat variabel" dan Tokenisasi shell Bourne. Tanda ini hanya akan berlaku untuk target ini, dan tidak untuk yang itu tergantung, atau mereka yang bergantung padanya.

Perhatikan bahwa untuk project Xcode yang dihasilkan, jalur direktori yang ditentukan menggunakan "-I" tanda di copt diuraikan, diawali dengan "$(WORKSPACE_ROOT)/" jika jalur itu relatif, dan yang ditambahkan ke jalur penelusuran header untuk target Xcode terkait.

defines

Daftar {i>string<i}; default-nya adalah []

Tanda -D tambahan untuk diteruskan ke compiler. Mereka harus dalam dalam bentuk KEY=VALUE atau KEY saja dan merupakan diteruskan tidak hanya ke compiler untuk target ini (sebagai copts tetapi juga untuk semua dependensi objc_ dari target ini. Tunduk kepada substitusi "Buat variabel" dan Tokenisasi shell Bourne.
enable_modules

Boolean; default-nya adalah False

Mengaktifkan dukungan modul clang (melalui -fmodules). Menyetelnya ke 1 akan memungkinkan Anda @mengimpor header sistem dan target lainnya: @import UIKit; {i>@import path_to_package_target;<i}
implementation_deps

Daftar label; default adalah []

Daftar library lain yang menjadi target library. Tidak seperti dengan deps, header dan sertakan jalur library ini (dan semua dependensi transitif) hanya digunakan untuk kompilasi library ini, bukan library yang yang bergantung pada {i>database.<i} Library yang ditentukan dengan implementation_deps masih ditautkan dalam target biner yang bergantung pada library ini.
includes

Daftar {i>string<i}; default-nya adalah []

Daftar #include/#import jalur penelusuran untuk ditambahkan ke target ini dan semua target yang bergantung. Ini untuk mendukung library pihak ketiga dan open source yang tidak menentukan seluruh jalur ruang kerja di Pernyataan #import/#include.

Jalur ditafsirkan relatif terhadap direktori paket, dan genfile dan root bin (misalnya blaze-genfiles/pkg/includedir dan blaze-out/pkg/includedir) disertakan selain {i>root<i} klien yang sebenarnya.

Tidak seperti COPTS, tanda ini ditambahkan untuk aturan ini dan setiap aturan yang bergantung padanya. (Catatan: bukan aturan yang menjadi dependensinya.) Menjadi sangat berhati-hati, karena hal ini dapat menimbulkan jangkauan luas. Jika ragu, tambahkan "-iquote" flag ke COPTS.

linkopts

Daftar {i>string<i}; default-nya adalah []

Tanda tambahan yang akan diteruskan ke penaut.
module_map

Label; default adalah None

peta modul Clang kustom untuk target ini. Penggunaan peta modul kustom tidak disarankan. Paling sering sebaiknya pengguna menggunakan peta modul yang dihasilkan oleh Bazel. Jika ditentukan, Bazel tidak akan menghasilkan peta modul untuk target ini, tetapi akan meneruskan peta modul yang disediakan ke compiler.
module_name

String; default-nya adalah ""

Menetapkan nama modul untuk target ini. Secara {i>default<i} nama modul adalah jalur target dengan semua simbol khusus yang diganti dengan _, misalnya //foo/baz:bar dapat diimpor sebagai foo_baz_bar.
non_arc_srcs

Daftar label; default adalah []

Daftar file Objective-C yang diproses untuk membuat target library yang TIDAK menggunakan ARC. File dalam atribut ini diperlakukan sangat mirip dengan yang ada di srcs, tetapi dikompilasi tanpa mengaktifkan ARC.
pch

Label; default adalah None

File header untuk ditambahkan ke setiap file sumber yang dikompilasi (kedua busur dan non-arc). Penggunaan file {i>pch<i} secara aktif tidak disarankan dalam file BUILD, dan ini seharusnya dianggap tidak digunakan lagi. Karena file {i>pch<i} sebenarnya tidak dikompilasi sebelumnya, maka ini tidak peningkatan kecepatan {i>build<i}, dan bukan hanya dependensi global. Dari build sudut pandang efisiensi, sebenarnya lebih baik termasuk apa yang Anda butuhkan secara di sumber mana pun Anda membutuhkannya.
sdk_dylibs

Daftar {i>string<i}; default-nya adalah []

Nama library .dylib SDK yang akan ditautkan. Misalnya, "libz" atau "libarchive". &quot;libc++&quot; disertakan secara otomatis jika biner memiliki {i>C++ <i}atau Sumber Objective-C++ dalam hierarki dependensinya. Saat menautkan biner, semua pustaka yang disebutkan dalam grafik dependensi transitif biner itu data
sdk_frameworks

Daftar {i>string<i}; default-nya adalah []

Nama framework SDK yang akan ditautkan (misalnya, "AddressBook", "QuartzCore").

Saat menautkan biner Apple tingkat atas, semua framework SDK yang tercantum dalam grafik dependensi transitif tertaut.

sdk_includes

Daftar {i>string<i}; default-nya adalah []

Daftar #include/#import jalur penelusuran untuk ditambahkan ke target ini dan semua target yang bergantung, di mana setiap jalur berhubungan $(SDKROOT)/usr/include.
stamp

Boolean; default-nya adalah False

textual_hdrs

Daftar label; default adalah []

Daftar file C, C++, Objective-C, dan Objective-C++ yang disertakan sebagai header menurut file sumber dalam aturan ini atau oleh pengguna library. Tidak seperti {i>hdr<i}, ini tidak akan dikompilasi secara terpisah dari sumber.
weak_sdk_frameworks

Daftar {i>string<i}; default-nya adalah []

Nama framework SDK yang ditautkan secara lemah. Contohnya, "MediaAccessibility". Perbedaan dengan framework SDK yang ditautkan secara rutin, simbol dari framework yang ditautkan secara lemah tidak menyebabkan error tidak ada pada runtime.