इस पेज पर, अलग-अलग लेवल पर C++ के नियमों को इंटिग्रेट करने का तरीका बताया गया है.
C++ टूलचेन को ऐक्सेस करना
C++ नियमों को प्लैटफ़ॉर्म और
toolchains
पर माइग्रेट करने की वजह से,
आपको
@bazel_tools//tools/cpp:toolchain_utils.bzl पर मौजूद हेल्पर फ़ंक्शन इस्तेमाल करना चाहिए,
यह टूलचेन के बंद और चालू होने, दोनों पर काम करता है. अपने नियम में C++
टूलचेन पर निर्भर होने के लिए, _cc_toolchain नाम का
Label
एट्रिब्यूट जोड़ें और उसे
@bazel_tools//tools/cpp:current_cc_toolchain (cc_toolchain_alias नियम का एक इंस्टेंस, जो चुने गए C++ टूलचेन पर ले जाता है).
इसके बाद, नियम लागू करने वाले पेज में, CcToolchainInfo पाने के लिए,
find_cpp_toolchain(ctx) का इस्तेमाल करें.
नियम_सीसी के उदाहरण में इसका पूरा उदाहरण दिया गया है.
C++ टूलचेन का इस्तेमाल करके, कमांड लाइन और एनवायरमेंट वैरिएबल जनरेट करना
आम तौर पर, C++ टूलचेन के साथ इंटिग्रेट करने के लिए वैसे ही कमांड लाइन फ़्लैग इस्तेमाल किए जा सकते हैं जैसे C++ के नियमों में किए जाते हैं. हालांकि, सीधे तौर पर C++ ऐक्शन का इस्तेमाल किए बिना ऐसा किया जा सकता है. इसकी वजह यह है कि अपनी खुद की कार्रवाइयां लिखते समय, उन्हें C++ टूलचेन के साथ समान रूप से व्यवहार करना चाहिए - उदाहरण के लिए, C++ कमांड लाइन फ़्लैग को उस टूल में भेजना जो पर्दे के पीछे C++ कंपाइलर को शुरू करता है.
C++ नियम, सुविधा कॉन्फ़िगरेशन पर आधारित, कमांड लाइन बनाने के लिए एक खास तरीके का इस्तेमाल करते हैं. कमांड लाइन बनाने के लिए, आपको इनकी ज़रूरत होगी:
featuresऔरaction_configs- येCcToolchainConfigInfoसे मिलती हैं और इन्हेंCcToolchainInfoमें इकट्ठा किया जाता हैFeatureConfiguration- cc_common.configure_features की मदद से वापस की गई- cc टूलchain कॉन्फ़िगरेशन वैरिएबल - cc_common.create_compile_variables या cc_common.create_link_variables के आधार पर दिखाया जाता है.
इसके बाद भी, कुछ टूल के लिए अलग से मिलने वाले गेटर मौजूद होते हैं, जैसे कि
compiler_executable.
इनके बजाय get_tool_for_action को प्राथमिकता दें, क्योंकि टूल से जुड़े खास गेटर
को बाद में हटा दिया जाएगा.
नियम_सीसी के उदाहरण में इसका पूरा उदाहरण दिया गया है.
C++ नियमों पर निर्भर करने वाले और/या C++ नियम पर निर्भर करने वाले Starlark नियम लागू करना
ज़्यादातर C++ नियमों से
CcInfo पता चलता है,
यह बताने वाली कंपनी है जिसमें CompilationContext
और
LinkingContext शामिल हैं.
इनकी मदद से, सभी ट्रांज़िटिव हेडर या लाइब्रेरी जैसी जानकारी को लिंक किया जा सकता है. CcInfo से और CcToolchainInfo कस्टम
Starlark नियमों से ज़रूरत की सारी जानकारी मिलनी चाहिए.
अगर पसंद के मुताबिक बनाया गया स्टारलार्क नियम CcInfo देता है, तो यह C++ नियमों को संकेत देता है कि वे भी इस पर निर्भर हो सकते हैं. हालांकि, ध्यान रखें - अगर आपको सिर्फ़
CcInfo को ग्राफ़ के ज़रिए, उस बाइनरी नियम पर लागू करना है जो इसका इस्तेमाल करता है, तो CcInfo को किसी दूसरी कंपनी में रैप करें. उदाहरण के लिए, अगर java_library नियम
java_binary तक नेटिव डिपेंडेंसी लागू करना चाहता है, तो इसे सीधे तौर पर
CcInfo नहीं देना चाहिए (java_library पर निर्भर करते हुए cc_binary का कोई मतलब नहीं है),
उसे रैप करना चाहिए, उदाहरण के लिए, JavaCcInfo.
नियम_सीसी के उदाहरण में इसका पूरा उदाहरण दिया गया है.
C++ नियमों के तर्क और कार्रवाइयों का फिर से इस्तेमाल करना
अभी तक स्टेबल नहीं; एपीआई के स्थिर होने पर यह सेक्शन अपडेट किया जाएगा. अप-टू-डेट जानकारी के लिए, #4570 को फ़ॉलो करें.