กฎ Objective-C

รายงานปัญหา ดูแหล่งที่มา รุ่น Nightly · 8.0 7.4 . 7.3 · 7.2 · 7.1 · 7.0 · 6.5

กฎ

objc_import

ดูแหล่งที่มาของกฎ
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)

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

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

Attributes
name

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

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

deps

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

รายการเป้าหมายที่เป้าหมายนี้ใช้
hdrs

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

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

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

ระบบจะคอมไพล์ไฟล์เหล่านี้แยกจากซอร์สหากเปิดใช้โมดูล

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

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

sdk_dylibs

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

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

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

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

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

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, 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)

กฎนี้จะสร้างไลบรารีแบบคงที่จากไฟล์ซอร์ส 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

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

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

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

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

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

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

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

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

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

sdk_includes

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

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

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

textual_hdrs

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

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

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

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