इस पेज पर बताया गया है कि आप अलग-अलग लेवल पर 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
पाएं.
काम करने का सही उदाहरण, Rules_cc उदाहरण में देखा जा सकता है.
C++ टूलचेन का उपयोग करके कमांड लाइन और एनवायरमेंट वैरिएबल जनरेट करना
आम तौर पर, C++ टूल का इस्तेमाल करते हुए, आप C++ टूल के साथ कमांड लाइन फ़्लैग भी लगा सकते हैं. इसकी वजह यह है कि अपनी कार्रवाइयां लिखते समय, उन्हें C++ टूल चेन के साथ काम करना चाहिए. उदाहरण के लिए, C++ कमांड लाइन पास करने से, ऐसे टूल की ओर ध्यान जाता है जो C++ कंपाइलर को पर्दे के पीछे शुरू करता है.
C++ नियम, सुविधा कॉन्फ़िगरेशन के आधार पर कमांड लाइन बनाने के खास तरीके का इस्तेमाल करते हैं. कमांड लाइन बनाने के लिए, आपको इन चीज़ों की ज़रूरत होगी:
features
औरaction_configs
- येCcToolchainConfigInfo
से आते हैं औरCcToolchainInfo
में जोड़े जाते हैंFeatureConfiguration
- cc_normal.configure_features ने लौटाया- cc टूलटिप कॉन्फ़िगरेशन कॉन्फ़िगरेशन - cc_कॉमन.create_compile_variables या cc_कॉमन.create_link_variables के ज़रिए मिले वैरिएबल.
इसमें अब भी टूल से जुड़े खास टूल मौजूद हैं, जैसे कि
compiler_executable.
इसके बजाय get_tool_for_action
को प्राथमिकता दें, क्योंकि टूल-विशिष्ट गैटरर को
बाद में निकाल दिया जाएगा.
काम करने का सही उदाहरण, Rules_cc उदाहरण में देखा जा सकता है.
Clar+ नियम और/या C++ नियम जिन पर निर्भर हैं, उन्हें लागू करना
ज़्यादातर C++ नियमों से,
CcInfo
की सेवा मिलती है.
इसमें CompilationContext
और
LinkingContext
शामिल है.
इनकी मदद से, लिंक की जाने वाली सभी ट्रांज़िटिव हेडर या लाइब्रेरी जैसी जानकारी को ऐक्सेस किया जा सकता है. CcInfo
और CcToolchainInfo
कस्टम स्टारलार्क नियमों के ज़रिए, वे सारी जानकारी पा सकते हैं जो उन्हें चाहिए.
अगर एक कस्टम स्टारलार्क नियम CcInfo
देता है, तो यह C++ नियमों का संकेत है कि वे भी इस पर निर्भर हो सकते हैं. हालांकि, सावधान रहें - अगर आपको सिर्फ़ CcInfo
को ग्राफ़ के ज़रिए बाइनरी नियम में भेजना है, जो कि उसका इस्तेमाल करता है, तो किसी दूसरी कंपनी में CcInfo
को रैप करें. उदाहरण के लिए, अगर java_library
नियम, java_binary
पर नेटिव डिपेंडेंसी लागू करना चाहता है, तो उसे सीधे CcInfo
नहीं देना चाहिए (cc_binary
के आधार पर cc_binary
का कोई मतलब नहीं होता), इसे उदाहरण के तौर पर, JavaCcInfo
में रैप करना चाहिए.
काम करने का सही उदाहरण, Rules_cc उदाहरण में देखा जा सकता है.
C++ नियमों के तर्क और कार्रवाइयों का फिर से इस्तेमाल करना
स्टेबल नहीं है; एपीआई के स्टेबल हो जाने के बाद यह सेक्शन अपडेट कर दिया जाएगा. अप-टू-डेट जानकारी के लिए #4570 का पालन करें.