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