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