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

किसी समस्या की शिकायत करें सोर्स देखें Nightly · 8.0 . 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++ टूलचेन पर ले जाता है. इसके बाद, नियम लागू करने के लिए, CcToolchainInfo पाने के लिए find_cpp_toolchain(ctx) का इस्तेमाल करें. काम करने वाले पूरे उदाहरण को 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 को फ़ॉलो करें.