इस पेज पर, अलग-अलग लेवल पर C++ के नियमों को इंटिग्रेट करने का तरीका बताया गया है.
C++ टूलचेन को ऐक्सेस करना
Starlark के किसी नियम से, सीसी टूलचेन पर निर्भर रहने के लिए, आपको
@rules_cc//cc:find_cc_toolchain.bzl
पर उपलब्ध हेल्पर फ़ंक्शन का इस्तेमाल करना चाहिए.
अपने नियम में C++ टूलचेन पर निर्भर रहने के लिए, toolchains पैरामीटर को use_cc_toolchain() पर सेट करें. इसके बाद, नियम को लागू करने के लिए, find_cpp_toolchain(ctx) पाने के लिए
CcToolchainInfo का इस्तेमाल करें. rules_cc
के उदाहरणों में, काम करने वाला पूरा
उदाहरण देखा जा सकता है.
C++ टूलचेन का इस्तेमाल करके, कमांड लाइन और एनवायरमेंट वैरिएबल जनरेट करना
आम तौर पर, C++ टूलचेन को इंटिग्रेट करके, C++ के नियमों के जैसे ही कमांड लाइन फ़्लैग इस्तेमाल किए जाते हैं. हालांकि, इसके लिए C++ के ऐक्शन का सीधे तौर पर इस्तेमाल नहीं किया जाता. ऐसा इसलिए, क्योंकि अपने ऐक्शन लिखते समय, उन्हें C++ टूलचेन के साथ काम करना चाहिए. उदाहरण के लिए, C++ कमांड लाइन फ़्लैग को किसी ऐसे टूल पर पास करना जो बैकग्राउंड में C++ कंपाइलर को कॉल करता है.
C++ के नियम, फ़ीचर कॉन्फ़िगरेशन के आधार पर कमांड लाइन बनाने का एक खास तरीका इस्तेमाल करते हैं. कमांड लाइन बनाने के लिए, आपको इनकी ज़रूरत होगी:
featuresऔरaction_configs- येCcToolchainConfigInfoसे मिलते हैं और इन्हेंCcToolchainInfoमें एनकैप्सुलेट किया जाता हैFeatureConfiguration- यह cc_common.configure_features से मिलता है- सीसी टूलचेन कॉन्फ़िगरेशन वैरिएबल - यह cc_common.create_compile_variables या cc_common.create_link_variablesसे मिलता है.
अब भी टूल के हिसाब से गेटर मौजूद हैं. जैसे, 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 को फ़ॉलो करें.