इस पेज पर, अलग-अलग लेवल पर 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 को फ़ॉलो करें.