ऑब्जेक्टिव-सी के नियम

नियम

objc_import

नियम का सोर्स देखें
objc_import(name, deps, hdrs, alwayslink, archives, aspect_hints, 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 के साथ काम करने वाली विशेषताओं का इस्तेमाल करके, हेडर और संसाधन भी एक्सपोर्ट किए जा सकते हैं.

तर्क

विशेषताएं
name

नाम; ज़रूरी है

इस टारगेट के लिए यूनीक नाम.

deps

लेबल की सूची; डिफ़ॉल्ट वैल्यू [] है

उन टारगेट की सूची जिन पर यह टारगेट निर्भर करता है.
hdrs

लेबल की सूची; डिफ़ॉल्ट वैल्यू [] है

इस लाइब्रेरी से पब्लिश की गई C, C++, Objective-C, और Objective-C++ हेडर फ़ाइलों की सूची. इन्हें निर्भरता वाले नियमों में शामिल किया जाना चाहिए.

इन हेडर में, लाइब्रेरी के सार्वजनिक इंटरफ़ेस के बारे में बताया गया है. इन्हें इस नियम या इससे जुड़े नियमों में शामिल करने के लिए उपलब्ध कराया जाएगा. इस लाइब्रेरी के क्लाइंट को जिन हेडर को शामिल नहीं करना है उन्हें srcs एट्रिब्यूट में शामिल किया जाना चाहिए.

अगर मॉड्यूल चालू हैं, तो इन्हें सोर्स से अलग कंपाइल किया जाएगा.

बूलियन; डिफ़ॉल्ट वैल्यू False है

अगर 1, तो इस लाइब्रेरी पर सीधे या परोक्ष रूप से निर्भर रहने वाला कोई भी बंडल या बाइनरी, srcs और non_arc_srcs में दी गई फ़ाइलों के लिए सभी ऑब्जेक्ट फ़ाइलों में लिंक होगा. भले ही, कुछ में बाइनरी से रेफ़रंस किए गए कोई भी सिंबल मौजूद न हों. यह तब काम आता है, जब आपके कोड को बाइनरी में कोड के ज़रिए साफ़ तौर पर कॉल नहीं किया जाता. उदाहरण के लिए, अगर आपका कोड किसी सेवा से मिले कॉलबैक को पाने के लिए रजिस्टर करता है.
archives

लेबल की सूची; ज़रूरी है

इस टारगेट पर निर्भर रहने वाले Objective-C टारगेट को दी गई .a फ़ाइलों की सूची.
includes

स्ट्रिंग की सूची; डिफ़ॉल्ट वैल्यू [] है

इस टारगेट और सभी डिपेंडेंट टारगेट में जोड़ने के लिए, #include/#import सर्च पाथ की सूची. ऐसा तीसरे पक्ष और ओपन-सोर्स लाइब्रेरी के लिए किया जाता है. ये लाइब्रेरी, अपने #import/#include स्टेटमेंट में पूरे वर्कस्पेस का पाथ नहीं बताती हैं.

पाथ को पैकेज डायरेक्ट्री के हिसाब से समझा जाता है. साथ ही, इसमें असली क्लाइंट रूट के अलावा, genfiles और bin रूट (जैसे, blaze-genfiles/pkg/includedir और blaze-out/pkg/includedir) भी शामिल होते हैं.

COPTS के उलट, ये फ़्लैग इस नियम और इस पर निर्भर हर नियम के लिए जोड़े जाते हैं. (ध्यान दें: यह उन नियमों के बारे में नहीं है जिन पर यह निर्भर करता है!) बहुत ज़्यादा सावधानी बरतें, क्योंकि इससे काफ़ी असर पड़ सकता है. अगर आपको किसी तरह का संदेह है, तो COPTS में "-iquote" फ़्लैग जोड़ें.

sdk_dylibs

स्ट्रिंग की सूची; डिफ़ॉल्ट वैल्यू [] है

लिंक करने के लिए, SDK टूल की .dylib लाइब्रेरी के नाम. उदाहरण के लिए, "libz" या "libarchive". अगर बाइनरी के डिपेंडेंसी ट्री में कोई C++ या Objective-C++ सोर्स मौजूद है, तो "libc++" को अपने-आप शामिल कर लिया जाता है. किसी बाइनरी को लिंक करते समय, उस बाइनरी के ट्रांज़िटिव डिपेंडेंसी ग्राफ़ में शामिल सभी लाइब्रेरी का इस्तेमाल किया जाता है.
sdk_frameworks

स्ट्रिंग की सूची; डिफ़ॉल्ट वैल्यू [] है

SDK फ़्रेमवर्क के नाम, जिन्हें लिंक करना है. उदाहरण के लिए, "AddressBook", "QuartzCore".

टॉप लेवल Apple बाइनरी को लिंक करने पर, उस बाइनरी के ट्रांज़िटिव डिपेंडेंसी ग्राफ़ में शामिल सभी एसडीके फ़्रेमवर्क लिंक हो जाते हैं.

sdk_includes

स्ट्रिंग की सूची; डिफ़ॉल्ट वैल्यू [] है

इस टारगेट और टारगेट करने के लिए चुने गए सभी आइटम में जोड़ने के लिए, #include/#import खोज पाथ की सूची. इसमें हर पाथ, #include/#import के हिसाब से होता है.$(SDKROOT)/usr/include
textual_hdrs

लेबल की सूची; डिफ़ॉल्ट वैल्यू [] है

इस नियम या इस लाइब्रेरी के उपयोगकर्ताओं की सोर्स फ़ाइलों में, हेडर के तौर पर शामिल की गई C, C++, Objective-C, और Objective-C++ फ़ाइलों की सूची. एचडीआर के उलट, इन्हें सोर्स से अलग कंपाइल नहीं किया जाएगा.
weak_sdk_frameworks

स्ट्रिंग की सूची; डिफ़ॉल्ट वैल्यू [] है

उन एसडीके फ़्रेमवर्क के नाम जिनसे कमज़ोर लिंक करना है. उदाहरण के लिए, "MediaAccessibility". आम तौर पर लिंक किए गए एसडीके फ़्रेमवर्क के मुकाबले, कमज़ोर तरीके से लिंक किए गए फ़्रेमवर्क के सिंबल, रनटाइम में मौजूद न होने पर गड़बड़ी नहीं करते.

objc_library

नियम का सोर्स देखें
objc_library(name, deps, srcs, data, hdrs, alwayslink, aspect_hints, 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 सोर्स फ़ाइलों से एक स्टैटिक लाइब्रेरी बनाता है.

तर्क

विशेषताएं
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, तो इस लाइब्रेरी पर सीधे या परोक्ष रूप से निर्भर रहने वाला कोई भी बंडल या बाइनरी, srcs और non_arc_srcs में दी गई फ़ाइलों के लिए सभी ऑब्जेक्ट फ़ाइलों में लिंक होगा. भले ही, कुछ में बाइनरी से रेफ़रंस किए गए कोई भी सिंबल मौजूद न हों. यह तब काम आता है, जब आपके कोड को बाइनरी में कोड के ज़रिए साफ़ तौर पर कॉल नहीं किया जाता. उदाहरण के लिए, अगर आपका कोड किसी सेवा से मिले कॉलबैक को पाने के लिए रजिस्टर करता है.
conlyopts

स्ट्रिंग की सूची; डिफ़ॉल्ट वैल्यू [] है

C फ़ाइलों के लिए, कंपाइलर को पास करने के लिए अतिरिक्त फ़्लैग. "बदलाव किया जा सकता है" के आधार पर बदलाव किया जा सकता है. साथ ही, Bourne shell tokenization के आधार पर बदलाव किया जा सकता है. ये फ़्लैग सिर्फ़ इस टारगेट पर लागू होंगे. ये उन टारगेट पर लागू नहीं होंगे जिन पर यह टारगेट निर्भर है या जो इस टारगेट पर निर्भर हैं.

ध्यान दें कि जनरेट किए गए Xcode प्रोजेक्ट के लिए, copts में "-I" फ़्लैग का इस्तेमाल करके तय किए गए डायरेक्ट्री पाथ को पार्स किया जाता है. अगर वे रिलेटिव पाथ हैं, तो उनके पहले "$(WORKSPACE_ROOT)/" जोड़ा जाता है. साथ ही, उन्हें Xcode के टारगेट से जुड़े हेडर सर्च पाथ में जोड़ा जाता है.

copts

स्ट्रिंग की सूची; डिफ़ॉल्ट वैल्यू [] है

कंपाइलर को पास करने के लिए अतिरिक्त फ़्लैग. "बदलाव किया जा सकता है" के आधार पर बदलाव किया जा सकता है. साथ ही, Bourne shell tokenization के आधार पर बदलाव किया जा सकता है. ये फ़्लैग सिर्फ़ इस टारगेट पर लागू होंगे. ये उन टारगेट पर लागू नहीं होंगे जिन पर यह टारगेट निर्भर है या जो इस टारगेट पर निर्भर हैं.

ध्यान दें कि जनरेट किए गए Xcode प्रोजेक्ट के लिए, copts में "-I" फ़्लैग का इस्तेमाल करके तय किए गए डायरेक्ट्री पाथ को पार्स किया जाता है. अगर वे रिलेटिव पाथ हैं, तो उनके पहले "$(WORKSPACE_ROOT)/" जोड़ा जाता है. साथ ही, उन्हें Xcode के टारगेट से जुड़े हेडर सर्च पाथ में जोड़ा जाता है.

cxxopts

स्ट्रिंग की सूची; डिफ़ॉल्ट वैल्यू [] है

Objective-C++ और C++ फ़ाइलों के लिए, कंपाइलर को पास करने के लिए अतिरिक्त फ़्लैग. "बदलाव किया जा सकता है" के आधार पर बदलाव किया जा सकता है. साथ ही, Bourne shell tokenization के आधार पर बदलाव किया जा सकता है. ये फ़्लैग सिर्फ़ इस टारगेट पर लागू होंगे. ये उन टारगेट पर लागू नहीं होंगे जिन पर यह टारगेट निर्भर है या जो इस टारगेट पर निर्भर हैं.

ध्यान दें कि जनरेट किए गए Xcode प्रोजेक्ट के लिए, copts में "-I" फ़्लैग का इस्तेमाल करके तय किए गए डायरेक्ट्री पाथ को पार्स किया जाता है. अगर वे रिलेटिव पाथ हैं, तो उनके पहले "$(WORKSPACE_ROOT)/" जोड़ा जाता है. साथ ही, उन्हें Xcode के टारगेट से जुड़े हेडर सर्च पाथ में जोड़ा जाता है.

defines

स्ट्रिंग की सूची; डिफ़ॉल्ट वैल्यू [] है

कंपाइलर को पास करने के लिए, अतिरिक्त -D फ़्लैग. ये KEY=VALUE या सिर्फ़ KEY के फ़ॉर्म में होने चाहिए. साथ ही, इन्हें इस टारगेट के कंपाइलर को (copts के तौर पर) ही नहीं, बल्कि इस टारगेट के सभी objc_ डिपेंडेंट को भी पास किया जाता है. "बदलाव किया जा सकता है" के आधार पर बदलाव किया जा सकता है. साथ ही, Bourne shell tokenization के आधार पर बदलाव किया जा सकता है.
enable_modules

बूलियन; डिफ़ॉल्ट वैल्यू False है

इस विकल्प से, clang मॉड्यूल के साथ काम करने की सुविधा चालू होती है (via -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 के उलट, ये फ़्लैग इस नियम और इस पर निर्भर हर नियम के लिए जोड़े जाते हैं. (ध्यान दें: यह उन नियमों के बारे में नहीं है जिन पर यह निर्भर करता है!) बहुत ज़्यादा सावधानी बरतें, क्योंकि इससे काफ़ी असर पड़ सकता है. अगर आपको किसी तरह का संदेह है, तो COPTS में "-iquote" फ़्लैग जोड़ें.

linkopts

स्ट्रिंग की सूची; डिफ़ॉल्ट वैल्यू [] है

लिंकर को पास करने के लिए अतिरिक्त फ़्लैग.
module_map

लेबल; डिफ़ॉल्ट वैल्यू None है

इस टारगेट के लिए कस्टम Clang मॉड्यूल मैप. कस्टम मॉड्यूल मैप का इस्तेमाल करने का सुझाव नहीं दिया जाता. ज़्यादातर उपयोगकर्ताओं को, Bazel से जनरेट किए गए मॉड्यूल मैप का इस्तेमाल करना चाहिए. अगर यह विकल्प दिया गया है, तो Bazel इस टारगेट के लिए मॉड्यूल मैप जनरेट नहीं करेगा. हालांकि, यह दिए गए मॉड्यूल मैप को कंपाइलर को पास करेगा.
module_name

स्ट्रिंग; डिफ़ॉल्ट वैल्यू "" है

इस कुकी का इस्तेमाल, इस टारगेट के लिए मॉड्यूल का नाम सेट करने के लिए किया जाता है. डिफ़ॉल्ट रूप से, मॉड्यूल का नाम टारगेट पाथ होता है.इसमें सभी खास सिंबल को _ से बदल दिया जाता है. उदाहरण के लिए, //foo/baz:bar को foo_baz_bar के तौर पर इंपोर्ट किया जा सकता है.
non_arc_srcs

लेबल की सूची; डिफ़ॉल्ट वैल्यू [] है

Objective-C फ़ाइलों की वह सूची जिन्हें प्रोसेस करके, ऐसी लाइब्रेरी टारगेट बनाई जाती है जो Automatic Reference Counting (ARC) का इस्तेमाल नहीं करती. इस एट्रिब्यूट में मौजूद फ़ाइलों को srcs एट्रिब्यूट में मौजूद फ़ाइलों की तरह ही माना जाता है. हालांकि, इन्हें एआरसी की सुविधा चालू किए बिना कंपाइल किया जाता है.
pch

लेबल; डिफ़ॉल्ट वैल्यू None है

हर सोर्स फ़ाइल में सबसे ऊपर जोड़ने के लिए हेडर फ़ाइल. इसे कंपाइल किया जा रहा है. इसमें arc और non-arc, दोनों तरह की फ़ाइलें शामिल हैं. BUILD फ़ाइलों में pch फ़ाइलों का इस्तेमाल करने से बचने की सलाह दी जाती है. साथ ही, इसे बंद कर देना चाहिए. pch फ़ाइलें असल में प्रीकंपाइल नहीं की जाती हैं. इसलिए, इससे बिल्ड की स्पीड नहीं बढ़ती. इसके बजाय, यह सिर्फ़ एक ग्लोबल डिपेंडेंसी है. बनाने की क्षमता के हिसाब से, आपको अपने सोर्स में सीधे तौर पर वह जानकारी शामिल करनी चाहिए जिसकी आपको ज़रूरत है.
sdk_dylibs

स्ट्रिंग की सूची; डिफ़ॉल्ट वैल्यू [] है

लिंक करने के लिए, SDK टूल की .dylib लाइब्रेरी के नाम. उदाहरण के लिए, "libz" या "libarchive". अगर बाइनरी के डिपेंडेंसी ट्री में कोई C++ या Objective-C++ सोर्स मौजूद है, तो "libc++" को अपने-आप शामिल कर लिया जाता है. किसी बाइनरी को लिंक करते समय, उस बाइनरी के ट्रांज़िटिव डिपेंडेंसी ग्राफ़ में शामिल सभी लाइब्रेरी का इस्तेमाल किया जाता है.
sdk_frameworks

स्ट्रिंग की सूची; डिफ़ॉल्ट वैल्यू [] है

SDK फ़्रेमवर्क के नाम, जिन्हें लिंक करना है. उदाहरण के लिए, "AddressBook", "QuartzCore".

टॉप लेवल Apple बाइनरी को लिंक करने पर, उस बाइनरी के ट्रांज़िटिव डिपेंडेंसी ग्राफ़ में शामिल सभी एसडीके फ़्रेमवर्क लिंक हो जाते हैं.

sdk_includes

स्ट्रिंग की सूची; डिफ़ॉल्ट वैल्यू [] है

इस टारगेट और टारगेट करने के लिए चुने गए सभी आइटम में जोड़ने के लिए, #include/#import खोज पाथ की सूची. इसमें हर पाथ, #include/#import के हिसाब से होता है.$(SDKROOT)/usr/include
stamp

बूलियन; डिफ़ॉल्ट वैल्यू False है

textual_hdrs

लेबल की सूची; डिफ़ॉल्ट वैल्यू [] है

इस नियम या इस लाइब्रेरी के उपयोगकर्ताओं की सोर्स फ़ाइलों में, हेडर के तौर पर शामिल की गई C, C++, Objective-C, और Objective-C++ फ़ाइलों की सूची. एचडीआर के उलट, इन्हें सोर्स से अलग कंपाइल नहीं किया जाएगा.
weak_sdk_frameworks

स्ट्रिंग की सूची; डिफ़ॉल्ट वैल्यू [] है

उन एसडीके फ़्रेमवर्क के नाम जिनसे कमज़ोर लिंक करना है. उदाहरण के लिए, "MediaAccessibility". आम तौर पर लिंक किए गए एसडीके फ़्रेमवर्क के मुकाबले, कमज़ोर तरीके से लिंक किए गए फ़्रेमवर्क के सिंबल, रनटाइम में मौजूद न होने पर गड़बड़ी नहीं करते.