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

किसी समस्या की शिकायत करें सोर्स देखें Nightly · 7.4 . 7.3 · 7.2 · 7.1 · 7.0 · 6.5

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

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

प्लैटफ़ॉर्म और टूलचेन पर C++ नियमों के माइग्रेशन की वजह से, आपको @bazel_tools//tools/cpp:toolchain_utils.bzl पर उपलब्ध हेल्पर फ़ंक्शन का इस्तेमाल करना चाहिए. यह टूलचेन के बंद और चालू होने, दोनों ही स्थितियों में काम करता है. अपने नियम में C++ टूलचेन पर निर्भर करने के लिए, _cc_toolchain नाम का Label एट्रिब्यूट जोड़ें और उसे @bazel_tools//tools/cpp:current_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 नहीं देना चाहिए (java_library के आधार पर cc_binary समझ में नहीं आता है) चाहिए. साथ ही, इसे पूरी जानकारी के साथ रैप करना चाहिए, जैसे कि JavaCcInfo.

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

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

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