C++ नियमों के साथ इंटिग्रेट करना

इस पेज पर, अलग-अलग लेवल पर C++ के नियमों को इंटिग्रेट करने का तरीका बताया गया है.

C++ टूलचेन को ऐक्सेस करना

C++ के नियमों को प्लैटफ़ॉर्म और टूलचेन पर माइग्रेट किया जा रहा है. इसलिए, आपको @bazel_tools//tools/cpp:toolchain_utils.bzl पर उपलब्ध हेल्पर फ़ंक्शन का इस्तेमाल करना चाहिए. यह फ़ंक्शन, टूलचेन के बंद और चालू, दोनों होने पर काम करता है. अपने नियम में C++ टूलचेन पर निर्भर रहने के लिए, Label नाम का _cc_toolchain एट्रिब्यूट जोड़ें. इसके बाद, इसे @bazel_tools//tools/cpp:current_cc_toolchain पर पॉइंट करें. यह cc_toolchain_alias नियम का एक इंस्टेंस है, जो फ़िलहाल चुने गए C++ टूलचेन पर पॉइंट करता है. इसके बाद, नियम के लागू होने के दौरान, find_cpp_toolchain(ctx) पाने के लिए CcToolchainInfoका इस्तेमाल करें. rules_cc के उदाहरणों में, काम करने वाला पूरा उदाहरण देखा जा सकता है .

C++ टूलचेन का इस्तेमाल करके, कमांड लाइन और एनवायरमेंट वैरिएबल जनरेट करना

आम तौर पर, C++ टूलचेन को इंटिग्रेट करने का मकसद, C++ के नियमों के जैसे ही कमांड लाइन फ़्लैग पाना होता है. हालांकि, इसके लिए C++ के ऐक्शन का सीधे तौर पर इस्तेमाल नहीं किया जाता. ऐसा इसलिए, क्योंकि हमारे अपने ऐक्शन लिखते समय, उन्हें C++ टूलचेन के साथ एक जैसा काम करना चाहिए. उदाहरण के लिए, C++ के कमांड लाइन फ़्लैग को किसी ऐसे टूल पर पास करना जो बैकग्राउंड में C++ कंपाइलर को कॉल करता है.

C++ के नियम, फ़ीचर कॉन्फ़िगरेशन के आधार पर कमांड लाइन बनाने का एक खास तरीका इस्तेमाल करते हैं. कमांड लाइन बनाने के लिए, आपको इनकी ज़रूरत होगी:

अब भी टूल के हिसाब से गेटर मौजूद हैं. जैसे, compiler_executable. इनके बजाय, get_tool_for_action का इस्तेमाल करें, क्योंकि टूल के हिसाब से गेटर को आने वाले समय में हटा दिया जाएगा.

rules_cc के उदाहरणों में, काम करने वाला पूरा उदाहरण देखा जा सकता है .

ऐसे Starlark नियम लागू करना जो C++ के नियमों पर निर्भर करते हैं और/या जिन पर C++ के नियम निर्भर कर सकते हैं

ज़्यादातर C++ के नियम, CcInfo उपलब्ध कराते हैं. यह एक ऐसा प्रोवाइडर है जिसमें CompilationContext और LinkingContext शामिल होते हैं. इनकी मदद से, ट्रांज़िटिव हेडर या लिंक करने के लिए लाइब्रेरी जैसी जानकारी ऐक्सेस की जा सकती है. CcInfo और CcToolchainInfo से, कस्टम Starlark के नियमों को वह सारी जानकारी मिलनी चाहिए जिसकी उन्हें ज़रूरत होती है.

अगर कोई कस्टम Starlark नियम, CcInfo उपलब्ध कराता है, तो यह C++ के नियमों के लिए एक सिग्नल है कि वे भी इस पर निर्भर रह सकते हैं. हालांकि, सावधान रहें. अगर आपको सिर्फ़ CcInfo को ग्राफ़ के ज़रिए बाइनरी नियम तक पहुंचाना है, तो CcInfo को किसी दूसरे प्रोवाइडर में रैप करें. उदाहरण के लिए, अगर java_library नियम, नेटिव डिपेंडेंसी को java_binary तक पहुंचाना चाहता है, तो उसे सीधे तौर पर CcInfo उपलब्ध नहीं कराना चाहिए. ऐसा इसलिए, क्योंकि cc_binary का java_library पर निर्भर होना सही नहीं है. इसके बजाय, उसे JavaCcInfo में रैप करना चाहिए.

rules_cc के उदाहरणों में, काम करने वाला पूरा उदाहरण देखा जा सकता है .

C++ के नियमों के लॉजिक और ऐक्शन का फिर से इस्तेमाल करना

यह सुविधा फ़िलहाल उपलब्ध नहीं है. एपीआई के स्थिर होने के बाद, इस सेक्शन को अपडेट किया जाएगा. अप-टू-डेट जानकारी के लिए, #4570 को फ़ॉलो करें.