C++ नियमों के साथ इंटिग्रेट करना

किसी समस्या की शिकायत करें सोर्स देखें Nightly · 7.4 . 7.3 · 7.2 · 7.1 · 7.0 · 6.5

इस पेज पर, अलग-अलग लेवल पर 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++ नियम, सुविधा के कॉन्फ़िगरेशन के आधार पर कमांड लाइन बनाने के लिए, एक खास तरीके का इस्तेमाल करते हैं. कमांड लाइन बनाने के लिए, आपके पास ये चीज़ें होनी चाहिए:

हालांकि, अब भी टूल के हिसाब से गेट्टर मौजूद हैं, जैसे कि 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 को फ़ॉलो करें.