กฎ Objective-C

รายงานปัญหา ดูแหล่งที่มา Nightly · 8.3 · 8.2 · 8.1 · 8.0 · 7.6

กฎ

objc_import

ดูแหล่งที่มาของกฎ
objc_import(name, deps, hdrs, alwayslink, archives, compatible_with, deprecation, exec_compatible_with, exec_group_compatible_with, exec_properties, features, includes, package_metadata, restricted_to, sdk_dylibs, sdk_frameworks, sdk_includes, tags, target_compatible_with, testonly, textual_hdrs, toolchains, visibility, weak_sdk_frameworks)

กฎนี้จะห่อหุ้มไลบรารีแบบคงที่ที่คอมไพล์แล้วในรูปแบบของไฟล์ .a นอกจากนี้ ยังช่วยให้ส่งออกส่วนหัวและทรัพยากรได้โดยใช้แอตทริบิวต์เดียวกันกับที่ objc_library รองรับ

อาร์กิวเมนต์

Attributes
name

ชื่อ (ต้องระบุ)

ชื่อที่ไม่ซ้ำกันสำหรับเป้าหมายนี้

deps

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

รายการเป้าหมายที่เป้าหมายนี้ขึ้นอยู่กับ
hdrs

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

รายการไฟล์ส่วนหัว C, C++, Objective-C และ Objective-C++ ที่เผยแพร่ โดยไลบรารีนี้เพื่อให้แหล่งข้อมูลในกฎที่ขึ้นต่อกันรวมไว้

ส่วนหัวเหล่านี้อธิบายอินเทอร์เฟซสาธารณะสำหรับไลบรารีและจะ พร้อมให้แหล่งที่มาในกฎนี้หรือในกฎที่ขึ้นอยู่กับกฎนี้ รวมไว้ ส่วนหัวที่ไม่ได้มีไว้ให้ไคลเอ็นต์ของไลบรารีนี้รวมไว้ ควรแสดงอยู่ในแอตทริบิวต์ srcs แทน

ระบบจะรวบรวมข้อมูลเหล่านี้แยกจากแหล่งที่มาหากเปิดใช้โมดูล

บูลีน ค่าเริ่มต้นคือ False

หากมีแพ็กเกจหรือไบนารีที่ขึ้นอยู่กับไลบรารีนี้ (โดยตรงหรือโดยอ้อม) ระบบจะลิงก์ในไฟล์ออบเจ็กต์ทั้งหมดสำหรับไฟล์ที่ระบุไว้ใน srcs และ non_arc_srcs แม้ว่าบางไฟล์จะไม่มี สัญลักษณ์ที่ไบนารีอ้างอิงก็ตาม ซึ่งจะมีประโยชน์ในกรณีที่โค้ดไม่ได้เรียกอย่างชัดเจนโดยโค้ดใน ไบนารี เช่น หากโค้ดลงทะเบียนเพื่อรับการเรียกกลับบางอย่าง ที่ได้รับจากบริการบางอย่าง
archives

รายการป้ายกำกับ (ต้องระบุ)

รายการไฟล์ .a ที่ระบุให้กับเป้าหมาย Objective-C ซึ่ง ขึ้นอยู่กับเป้าหมายนี้
includes

รายการสตริง ค่าเริ่มต้นคือ []

รายการ#include/#importเส้นทางการค้นหาที่จะเพิ่มลงในเป้าหมายนี้ และเป้าหมายที่ขึ้นอยู่กับเป้าหมายนี้ทั้งหมด เพื่อรองรับไลบรารีของบุคคลที่สามและไลบรารีโอเพนซอร์สที่ไม่ได้ ระบุเส้นทางของทั้งเวิร์กสเปซในคำสั่ง #import/#include

ระบบจะตีความเส้นทางที่สัมพันธ์กับไดเรกทอรีแพ็กเกจ และจะรวม ราก genfiles และ bin (เช่น blaze-genfiles/pkg/includedir และ blaze-out/pkg/includedir) นอกเหนือจาก รูทไคลเอ็นต์จริง

ซึ่งต่างจาก COPTS โดยระบบจะเพิ่มแฟล็กเหล่านี้สำหรับกฎนี้ และทุกกฎที่ขึ้นอยู่กับกฎนี้ (หมายเหตุ: ไม่ใช่กฎที่ขึ้นอยู่กับกฎนี้) โปรด ระมัดระวังเป็นอย่างยิ่ง เนื่องจากอาจส่งผลกระทบในวงกว้าง หากไม่แน่ใจ ให้เพิ่ม Flag "-iquote" ไปยัง COPTS แทน

sdk_dylibs

รายการสตริง ค่าเริ่มต้นคือ []

ชื่อของไลบรารี .dylib ของ SDK ที่จะลิงก์ด้วย เช่น "libz" หรือ "libarchive" ระบบจะรวม "libc++" โดยอัตโนมัติหากไบนารีมีแหล่งที่มาของ C++ หรือ Objective-C++ ในแผนผังการอ้างอิง เมื่อลิงก์ไบนารี ระบบจะใช้ไลบรารีทั้งหมดที่ระบุชื่อไว้ในกราฟการอ้างอิงแบบทรานซิทีฟของไบนารีนั้น
sdk_frameworks

รายการสตริง ค่าเริ่มต้นคือ []

ชื่อเฟรมเวิร์ก SDK ที่จะลิงก์ด้วย (เช่น "AddressBook", "QuartzCore")

เมื่อลิงก์ไบนารีของ 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, conlyopts, copts, cxxopts, defines, deprecation, enable_modules, exec_compatible_with, exec_group_compatible_with, exec_properties, features, implementation_deps, includes, linkopts, module_map, module_name, non_arc_srcs, package_metadata, pch, restricted_to, sdk_dylibs, sdk_frameworks, sdk_includes, stamp, tags, target_compatible_with, testonly, textual_hdrs, toolchains, visibility, weak_sdk_frameworks)

กฎนี้จะสร้างไลบรารีแบบคงที่จากไฟล์ต้นฉบับ Objective-C ที่ระบุ

อาร์กิวเมนต์

Attributes
name

ชื่อ (ต้องระบุ)

ชื่อที่ไม่ซ้ำกันสำหรับเป้าหมายนี้

deps

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

รายการเป้าหมายที่เป้าหมายนี้ขึ้นอยู่กับ
srcs

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

รายการไฟล์ต้นฉบับและส่วนหัวของ C, C++, Objective-C และ Objective-C++ และ/หรือไฟล์ต้นฉบับแอสเซมบลี (`.s`, `.S` หรือ `.asm`) ที่ประมวลผลเพื่อสร้าง เป้าหมายไลบรารี ไฟล์เหล่านี้คือไฟล์ที่คุณเช็คอิน รวมถึงไฟล์ที่สร้างขึ้น ระบบจะคอมไพล์ไฟล์ต้นฉบับเป็นไฟล์ .o ด้วย Clang ไฟล์ส่วนหัว อาจรวม/นำเข้าโดยแหล่งที่มาหรือส่วนหัวใดๆ ในแอตทริบิวต์ srcs ของเป้าหมายนี้ แต่ไม่ใช่โดยส่วนหัวใน hdrs หรือเป้าหมายใดๆ ที่ขึ้นอยู่กับกฎนี้ นอกจากนี้ คุณยังระบุไฟล์ .o ที่คอมไพล์ล่วงหน้าเป็น srcs ได้ด้วย โปรดระมัดระวัง เพื่อให้สถาปัตยกรรมของไฟล์ .o ที่ระบุมีความสอดคล้องกับสถาปัตยกรรมของ บิลด์เพื่อหลีกเลี่ยงข้อผิดพลาดของลิงก์เกอร์สัญลักษณ์ที่ขาดหายไป
hdrs

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

รายการไฟล์ส่วนหัว C, C++, Objective-C และ Objective-C++ ที่เผยแพร่ โดยไลบรารีนี้เพื่อให้แหล่งข้อมูลในกฎที่ขึ้นต่อกันรวมไว้

ส่วนหัวเหล่านี้อธิบายอินเทอร์เฟซสาธารณะสำหรับไลบรารีและจะ พร้อมให้แหล่งที่มาในกฎนี้หรือในกฎที่ขึ้นอยู่กับกฎนี้ รวมไว้ ส่วนหัวที่ไม่ได้มีไว้ให้ไคลเอ็นต์ของไลบรารีนี้รวมไว้ ควรแสดงอยู่ในแอตทริบิวต์ srcs แทน

ระบบจะรวบรวมข้อมูลเหล่านี้แยกจากแหล่งที่มาหากเปิดใช้โมดูล

บูลีน ค่าเริ่มต้นคือ False

หากมีแพ็กเกจหรือไบนารีที่ขึ้นอยู่กับไลบรารีนี้ (โดยตรงหรือโดยอ้อม) ระบบจะลิงก์ในไฟล์ออบเจ็กต์ทั้งหมดสำหรับไฟล์ที่ระบุไว้ใน srcs และ non_arc_srcs แม้ว่าบางไฟล์จะไม่มี สัญลักษณ์ที่ไบนารีอ้างอิงก็ตาม ซึ่งจะมีประโยชน์ในกรณีที่โค้ดไม่ได้เรียกอย่างชัดเจนโดยโค้ดใน ไบนารี เช่น หากโค้ดลงทะเบียนเพื่อรับการเรียกกลับบางอย่าง ที่ได้รับจากบริการบางอย่าง
conlyopts

รายการสตริง ค่าเริ่มต้นคือ []

แฟล็กเพิ่มเติมที่จะส่งไปยังคอมไพเลอร์สำหรับไฟล์ C ขึ้นอยู่กับการแทนที่ "Make variable" และ การแยกโทเค็น Bourne Shell โดยแฟล็กเหล่านี้จะมีผลกับเป้าหมายนี้เท่านั้น และจะไม่มีผลกับเป้าหมายที่ขึ้นอยู่กับเป้าหมายนี้ หรือเป้าหมายที่เป้าหมายนี้ขึ้นอยู่กับ

โปรดทราบว่าสำหรับโปรเจ็กต์ Xcode ที่สร้างขึ้น ระบบจะแยกวิเคราะห์เส้นทางไดเรกทอรีที่ระบุโดยใช้แฟล็ก "-I" ใน copts, เพิ่ม "$(WORKSPACE_ROOT)/" ไว้ข้างหน้าหากเป็นเส้นทางแบบสัมพัทธ์ และเพิ่มลงในเส้นทางการค้นหาส่วนหัวสำหรับเป้าหมาย Xcode ที่เชื่อมโยง

copts

รายการสตริง ค่าเริ่มต้นคือ []

Flag เพิ่มเติมที่จะส่งไปยังคอมไพเลอร์ ขึ้นอยู่กับการแทนที่ "Make variable" และ การแยกโทเค็น Bourne Shell โดยแฟล็กเหล่านี้จะมีผลกับเป้าหมายนี้เท่านั้น และจะไม่มีผลกับเป้าหมายที่ขึ้นอยู่กับเป้าหมายนี้ หรือเป้าหมายที่เป้าหมายนี้ขึ้นอยู่กับ

โปรดทราบว่าสำหรับโปรเจ็กต์ Xcode ที่สร้างขึ้น ระบบจะแยกวิเคราะห์เส้นทางไดเรกทอรีที่ระบุโดยใช้แฟล็ก "-I" ใน copts, เพิ่ม "$(WORKSPACE_ROOT)/" ไว้ข้างหน้าหากเป็นเส้นทางแบบสัมพัทธ์ และเพิ่มลงในเส้นทางการค้นหาส่วนหัวสำหรับเป้าหมาย Xcode ที่เชื่อมโยง

cxxopts

รายการสตริง ค่าเริ่มต้นคือ []

แฟล็กเพิ่มเติมที่จะส่งไปยังคอมไพเลอร์สำหรับไฟล์ Objective-C++ และ C++ ขึ้นอยู่กับการแทนที่ "Make variable" และ การแยกโทเค็น Bourne Shell โดยแฟล็กเหล่านี้จะมีผลกับเป้าหมายนี้เท่านั้น และจะไม่มีผลกับเป้าหมายที่ขึ้นอยู่กับเป้าหมายนี้ หรือเป้าหมายที่เป้าหมายนี้ขึ้นอยู่กับ

โปรดทราบว่าสำหรับโปรเจ็กต์ Xcode ที่สร้างขึ้น ระบบจะแยกวิเคราะห์เส้นทางไดเรกทอรีที่ระบุโดยใช้แฟล็ก "-I" ใน copts, เพิ่ม "$(WORKSPACE_ROOT)/" ไว้ข้างหน้าหากเป็นเส้นทางแบบสัมพัทธ์ และเพิ่มลงในเส้นทางการค้นหาส่วนหัวสำหรับเป้าหมาย Xcode ที่เชื่อมโยง

defines

รายการสตริง ค่าเริ่มต้นคือ []

-D แฟล็กเพิ่มเติมที่จะส่งไปยังคอมไพเลอร์ โดยควรอยู่ในรูปแบบ KEY=VALUE หรือ KEY และจะส่งไปยังคอมไพเลอร์สำหรับเป้าหมายนี้ (เช่น copts ) รวมถึงไปยัง objc_ ทั้งหมดที่ขึ้นอยู่กับเป้าหมายนี้ด้วย ขึ้นอยู่กับการแทนที่ "Make variable" และ การแยกโทเค็น Bourne Shell
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/includedir และ blaze-out/pkg/includedir) นอกเหนือจาก รูทไคลเอ็นต์จริง

ซึ่งต่างจาก COPTS โดยระบบจะเพิ่มแฟล็กเหล่านี้สำหรับกฎนี้ และทุกกฎที่ขึ้นอยู่กับกฎนี้ (หมายเหตุ: ไม่ใช่กฎที่ขึ้นอยู่กับกฎนี้) โปรด ระมัดระวังเป็นอย่างยิ่ง เนื่องจากอาจส่งผลกระทบในวงกว้าง หากไม่แน่ใจ ให้เพิ่ม Flag "-iquote" ไปยัง COPTS แทน

linkopts

รายการสตริง ค่าเริ่มต้นคือ []

Flag เพิ่มเติมที่จะส่งไปยัง Linker
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 และ non-arc) เราไม่แนะนำให้ใช้ไฟล์ pch ในไฟล์ BUILD และควรพิจารณาว่าไฟล์นี้ เลิกใช้งานแล้ว เนื่องจากไฟล์ pch ไม่ได้คอมไพล์ล่วงหน้าจริงๆ การดำเนินการนี้จึงไม่ใช่การเพิ่มความเร็วในการบิลด์ แต่เป็นเพียงการขึ้นต่อกันทั่วโลก ในมุมมองด้านประสิทธิภาพการสร้าง คุณควรใส่สิ่งที่คุณต้องการลงในแหล่งที่มาโดยตรงในที่ที่คุณต้องการ
sdk_dylibs

รายการสตริง ค่าเริ่มต้นคือ []

ชื่อของไลบรารี .dylib ของ SDK ที่จะลิงก์ด้วย เช่น "libz" หรือ "libarchive" ระบบจะรวม "libc++" โดยอัตโนมัติหากไบนารีมีแหล่งที่มาของ C++ หรือ Objective-C++ ในแผนผังการอ้างอิง เมื่อลิงก์ไบนารี ระบบจะใช้ไลบรารีทั้งหมดที่ระบุชื่อไว้ในกราฟการอ้างอิงแบบทรานซิทีฟของไบนารีนั้น
sdk_frameworks

รายการสตริง ค่าเริ่มต้นคือ []

ชื่อเฟรมเวิร์ก SDK ที่จะลิงก์ด้วย (เช่น "AddressBook", "QuartzCore")

เมื่อลิงก์ไบนารีของ Apple ระดับบนสุด ระบบจะลิงก์เฟรมเวิร์ก SDK ทั้งหมดที่แสดงอยู่ในกราฟการอ้างอิงแบบทรานซิทีฟของไบนารีนั้น

sdk_includes

รายการสตริง ค่าเริ่มต้นคือ []

รายการเส้นทางการค้นหา #include/#import ที่จะเพิ่มลงในเป้าหมายนี้ และเป้าหมายที่ขึ้นอยู่กับเป้าหมายนี้ทั้งหมด โดยแต่ละเส้นทางจะสัมพันธ์กับ $(SDKROOT)/usr/include
stamp

บูลีน ค่าเริ่มต้นคือ False

textual_hdrs

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

รายการไฟล์ C, C++, Objective-C และ Objective-C++ ที่ รวมเป็นส่วนหัวโดยไฟล์ต้นฉบับในกฎนี้หรือโดยผู้ใช้ ไลบรารีนี้ ซึ่งต่างจาก hdrs ตรงที่ไฟล์เหล่านี้จะไม่คอมไพล์แยกจาก แหล่งที่มา
weak_sdk_frameworks

รายการสตริง ค่าเริ่มต้นคือ []

ชื่อของเฟรมเวิร์ก SDK ที่จะลิงก์อย่างหลวมๆ เช่น "MediaAccessibility" สัญลักษณ์จากเฟรมเวิร์กที่ลิงก์อย่างหลวมๆ จะไม่ทำให้เกิดข้อผิดพลาดหากไม่มีสัญลักษณ์เหล่านั้นในรันไทม์ ซึ่งแตกต่างจากเฟรมเวิร์ก SDK ที่ลิงก์เป็นประจำ