इस पेज पर, अलग-अलग लेवल पर 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++ नियम, सुविधा के कॉन्फ़िगरेशन के आधार पर कमांड लाइन बनाने के लिए, एक खास तरीके का इस्तेमाल करते हैं. कमांड लाइन बनाने के लिए, आपको इन चीज़ों की ज़रूरत होगी:
features
औरaction_configs
- येCcToolchainConfigInfo
से आते हैं औरCcToolchainInfo
में शामिल होते हैंFeatureConfiguration
- cc_common.configure_features से दिखाया गया- cc टूलचेन कॉन्फ़िगरेशन वैरिएबल - 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
नहीं देना चाहिए (java_library
के आधार पर cc_binary
समझ में नहीं आता है) चाहिए. साथ ही, इसे पूरी जानकारी के साथ रैप करना चाहिए, जैसे कि JavaCcInfo
.
काम करने वाले पूरे उदाहरण को rules_cc के उदाहरणों में देखा जा सकता है.
C++ नियमों के लॉजिक और कार्रवाइयों का फिर से इस्तेमाल करना
अभी तक स्थिर नहीं है. एपीआई के स्थिर हो जाने के बाद, यह सेक्शन अपडेट कर दिया जाएगा. अप-टू-डेट जानकारी के लिए, #4570 को फ़ॉलो करें.