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

किसी समस्या की शिकायत करें सोर्स देखें 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 के साथ काम करने वाले एट्रिब्यूट का इस्तेमाल करके, हेडर और संसाधनों को भी एक्सपोर्ट किया जा सकता है.

तर्क

विशेषताएं
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 टूल के फ़्रेमवर्क लिंक हो जाते हैं.

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 फ़ाइलों को srcs के तौर पर दिया जा सकता है. उपलब्ध कराई गई .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_ को भी पास किया जाता है.copts "Make variable" के बदले और Bourne shell टोकनाइज़ेशन के हिसाब से.
enable_modules

बूलियन; डिफ़ॉल्ट तौर पर False

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

sdk_includes

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

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

बूलियन; डिफ़ॉल्ट तौर पर False

textual_hdrs

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

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

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

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