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

अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है किसी समस्या की शिकायत करें सोर्स देखें रात · 7.3 · 7.2 · 7.1 · 7.0 · 6.5

इस पेज पर, अलग-अलग लेवल पर 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 जानकारी.