इस पेज पर, अलग-अलग लेवल पर C++ नियमों के साथ इंटिग्रेट करने का तरीका बताया गया है.
C++ टूलचेन को ऐक्सेस करना
Starlark नियम से सीसी टूलचेन पर निर्भर करने के लिए, आपको @rules_cc//cc:find_cc_toolchain.bzl
पर उपलब्ध हेल्पर फ़ंक्शन का इस्तेमाल करना चाहिए.
अपने नियम में C++ टूलचेन पर निर्भर करने के लिए, toolchains
पैरामीटर को
use_cc_toolchain()
पर सेट करें. इसके बाद, नियम लागू करते समय, 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
नहीं देना चाहिए (java_library
पर निर्भर cc_binary
का कोई मतलब नहीं है). इसे JavaCcInfo
में रैप करना चाहिए.
काम करने वाले पूरे उदाहरण को rules_cc के उदाहरणों में देखा जा सकता है.
C++ नियमों के लॉजिक और कार्रवाइयों का फिर से इस्तेमाल करना
अभी स्टेबल नहीं है; एपीआई के स्टेबल होने के बाद, इस सेक्शन को अपडेट किया जाएगा. अप-टू-डेट जानकारी के लिए, #4570 को फ़ॉलो करें.