इस पेज पर, अलग-अलग लेवल पर C++ के नियमों को इंटिग्रेट करने का तरीका बताया गया है.
C++ टूलचेन को ऐक्सेस करना
C++ के नियमों को प्लैटफ़ॉर्म और टूलचेन में लगातार माइग्रेट करने की वजह से, आपको @bazel_tools//tools/cpp:toolchain_utils.bzl
पर उपलब्ध हेल्पर फ़ंक्शन का इस्तेमाल करना चाहिए.
यह टूलचेन बंद और चालू होने पर, दोनों ही स्थितियों में काम करता है. अपने नियम में C++ टूलचेन पर निर्भर रहने के लिए, _cc_toolchain
नाम का Label
एट्रिब्यूट जोड़ें. इसके बाद, एट्रिब्यूट को @bazel_tools//tools/cpp:current_cc_toolchain
(cc_toolchain_alias
नियम का उदाहरण, जो चुने गए C++ टूलचेन के बारे में बताता है) की ओर पॉइंट करें.
इसके बाद, नियम लागू करते समय, find_cpp_toolchain(ctx)
का इस्तेमाल करके CcToolchainInfo
पाएं.
काम करने का एक पूरा उदाहरण नियमों_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
को प्राथमिकता दें, क्योंकि खास टूल से जुड़े गैटर को आखिर में हटा दिया जाएगा.
काम करने का एक पूरा उदाहरण नियमों_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
.
काम करने का एक पूरा उदाहरण नियमों_cc के उदाहरण में देखा जा सकता है.
C++ नियमों के लॉजिक और कार्रवाइयों का दोबारा इस्तेमाल करना
अभी तक स्थिर नहीं है. एपीआई के स्थिर हो जाने के बाद, यह सेक्शन अपडेट कर दिया जाएगा. अप-टू-डेट जानकारी के लिए, #4570 को फ़ॉलो करें.