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

किसी समस्या की शिकायत करें सोर्स देखें Nightly · 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 के साथ काम करने वाले एट्रिब्यूट.

तर्क

विशेषताएं
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) वास्तविक क्लाइंट रूट का उपयोग कर सकते हैं.

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

sdk_dylibs

स्ट्रिंग की सूची; डिफ़ॉल्ट रूप से []

SDK टूल की उन .dylib लाइब्रेरी के नाम जिनसे लिंक करना है. उदाहरण के लिए, "libz" या "libसंग्रह" में बदलना है. "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, 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 सोर्स फ़ाइलों से स्टैटिक लाइब्रेरी बनाता है.

तर्क

विशेषताएं
name

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

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

deps

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

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

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

C, C++, Objective-C, और Objective-C++ सोर्स और हेडर फ़ाइलों की सूची. साथ ही, लाइब्रेरी टारगेट बनाने के लिए प्रोसेस की गई (`.s`, `.S`, या `.asm`) असेंबली सोर्स फ़ाइलें. इनमें, चेक इन की गई फ़ाइलें और जनरेट की गई फ़ाइलें शामिल होती हैं. सोर्स फ़ाइलों को Clang के साथ .o फ़ाइलों में कंपाइल किया जाता है. हेडर फ़ाइलों को इस टारगेट के srcs एट्रिब्यूट में मौजूद किसी भी सोर्स या हेडर से शामिल/इंपोर्ट किया जा सकता है. हालांकि, hdrs में मौजूद हेडर या इस नियम पर निर्भर किसी भी टारगेट से ऐसा नहीं किया जा सकता. इसके अलावा, पहले से कंपाइल की गई .o फ़ाइलों को सोर्स के तौर पर दिखाया जा सकता है. इन बातों का ध्यान रखें पक्का करें कि दी गई .o फ़ाइलों और फ़ाइल फ़ोल्डर के कॉन्फ़िगरेशन में बिल्ड का इस्तेमाल किया जा सकता है, ताकि सिंबल लिंकर से जुड़ी गड़बड़ियां न छूटें.
hdrs

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

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

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

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

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

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

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

कंपाइलर को पास करने के लिए अतिरिक्त फ़्लैग. "Make variable" के बदले और Bourne shell टोकनाइज़ेशन के हिसाब से. ये फ़्लैग सिर्फ़ इस टारगेट पर लागू होंगे, न कि उन पर जिन पर यह टारगेट निर्भर करता है या जिन पर यह टारगेट निर्भर करता है.

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

defines

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

कंपाइलर को भेजने के लिए अतिरिक्त -D फ़्लैग. ये KEY=VALUE या सिर्फ़ KEY फ़ॉर्म में होने चाहिए. साथ ही, इन्हें सिर्फ़ इस टारगेट के लिए कंपाइलर को ही नहीं, बल्कि इस टारगेट पर निर्भर सभी objc_ को भी पास किया जाता है. "Make variable" के बदले और Bourne shell टोकनाइज़ेशन के हिसाब से.
enable_modules

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

-fmodules के ज़रिए क्लैंग मॉड्यूल सपोर्ट को चालू करता है. इसे 1 पर सेट करने पर, सिस्टम हेडर और दूसरे टारगेट को @इंपोर्ट किया जा सकेगा: @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 फ़ाइलों की सूची, जिन्हें ARC का इस्तेमाल न करने वाले लाइब्रेरी टारगेट बनाने के लिए प्रोसेस किया जाता है. इस एट्रिब्यूट में मौजूद फ़ाइलों को srcs एट्रिब्यूट को सबमिट किया जाता है, लेकिन ARC को चालू किए बिना कंपाइल किया जाता है.
pch

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

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

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

SDK टूल की उन .dylib लाइब्रेरी के नाम जिनसे लिंक करना है. उदाहरण के लिए, "libz" या "libसंग्रह" में बदलना है. "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 टूल के फ़्रेमवर्क और सिंबल के बीच फ़र्क़ कमज़ोर लिंक किए गए फ़्रेमवर्क से कोई गड़बड़ी नहीं होती, रनटाइम के दौरान मौजूद नहीं होते हैं.