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