नियम
proto_lang_toolchain
नियम का सोर्स देखेंproto_lang_toolchain(name, blacklisted_protos, command_line, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, licenses, mnemonic, output_files, plugin, plugin_format_flag, progress_message, proto_compiler, restricted_to, runtime, tags, target_compatible_with, testonly, visibility)
अगर Bazel का इस्तेमाल किया जा रहा है, तो कृपया https://github.com/bazelbuild/rules_proto से नियम लोड करें.
इससे यह तय होता है कि LANG_proto_library नियम (जैसे, java_proto_library) को proto-कंपाइलर को कैसे कॉल करना चाहिए.
कुछ LANG_proto_library नियमों में, कमांड-लाइन फ़्लैग का इस्तेमाल करके यह तय किया जा सकता है कि किस टूलचेन का इस्तेमाल करना है. ज़्यादा जानकारी के लिए, उनसे जुड़े दस्तावेज़ देखें.
आम तौर पर, आपको इस तरह के नियम नहीं लिखने चाहिए. हालांकि, अगर आपको Java कंपाइलर को ट्यून करना है, तो नियम लिखे जा सकते हैं.
कोई कंपाइलर नहीं है. proto-कंपाइलर, उस proto_library नियम से लिया जाता है जिसे हम जोड़ते हैं. इसे Blaze को कमांड-लाइन फ़्लैग के तौर पर पास किया जाता है.
कई सुविधाओं के लिए, proto_library नियम पर proto-कंपाइलर को कॉल करना ज़रूरी होता है.
यह ज़रूरी है कि LANG_proto_library जिस कंपाइलर का इस्तेमाल करता है वह वही हो जिसका इस्तेमाल proto_library करता है.
उदाहरण
यहां एक आसान उदाहरण दिया गया है:
proto_lang_toolchain(
name = "javalite_toolchain",
command_line = "--javalite_out=shared,immutable:$(OUT)",
plugin = ":javalite_plugin",
runtime = ":protobuf_lite",
)
तर्क
| विशेषताएं | |
|---|---|
name |
नाम; ज़रूरी है इस टारगेट के लिए यूनीक नाम. |
blacklisted_protos
|
लेबल की सूची; डिफ़ॉल्ट वैल्यू है srcs एट्रिब्यूट में मौजूद फ़ाइलों के लिए कोई कोड जनरेट नहीं किया जाएगा.blacklisted_protos
इसका इस्तेमाल उन .proto फ़ाइलों के लिए किया जाता है जो पहले से ही proto रनटाइम में लिंक हैं. जैसे, any.proto.
|
command_line
|
स्ट्रिंग; ज़रूरी है कोड जनरेट करने के लिए, यह वैल्यू proto-कंपाइलर को पास की जाएगी. इसमें सिर्फ़ कोड-जनरेटर/प्लग-इन से जुड़े हिस्से शामिल करें. जैसे, -I पैरामीटर शामिल न करें)
|
mnemonic
|
स्ट्रिंग; डिफ़ॉल्ट वैल्यू |
output_files
|
स्ट्रिंग; डिफ़ॉल्ट वैल्यू $(OUT) में command_line को कैसे फ़ॉर्मैट किया जाता है. यह एक फ़ाइल का पाथ या एक से ज़्यादा फ़ाइलों के मामले में आउटपुट डायरेक्ट्री का पाथ हो सकता है.
संभावित वैल्यू ये हैं: "single", "multiple".
|
plugin
|
लेबल; डिफ़ॉल्ट वैल्यू --plugin=protoc-gen-PLUGIN=<executable>.
|
plugin_format_flag
|
स्ट्रिंग; डिफ़ॉल्ट वैल्यू --plugin=protoc-gen-PLUGIN=<executable>.
|
progress_message
|
स्ट्रिंग; डिफ़ॉल्ट वैल्यू |
proto_compiler
|
लेबल; डिफ़ॉल्ट वैल्यू |
runtime
|
लेबल; डिफ़ॉल्ट वैल्यू |
proto_library
नियम का सोर्स देखेंproto_library(name, deps, srcs, data, allow_exports, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, exports, features, import_prefix, licenses, restricted_to, strip_import_prefix, tags, target_compatible_with, testonly, visibility)
अब इस्तेमाल में नहीं है. कृपया इसके बजाय, https://github.com/bazelbuild/rules_proto का इस्तेमाल करें.
प्रोटोकॉल बफ़र की लाइब्रेरी तय करने के लिए, proto_library का इस्तेमाल करें
जिनका इस्तेमाल एक से ज़्यादा भाषाओं में किया जा सकता है. proto_library को, काम करने वाले नियमों की deps क्लॉज़ में शामिल किया जा सकता है
. जैसे, java_proto_library.
कमांड-लाइन पर कंपाइल करने पर, एक proto_library एक फ़ाइल बनाता है. इसका नाम
foo-descriptor-set.proto.bin होता है. यह उन मैसेज के लिए डिस्क्रिप्टर सेट होता है जो नियम srcs होते हैं. यह फ़ाइल, क्रम से लगाई गई FileDescriptorSet होती है. इसके बारे में
https://developers.google.com/protocol-buffers/docs/techniques#self-description में बताया गया है.
इसमें सिर्फ़ उन .proto फ़ाइलों की जानकारी होती है जिनका सीधे तौर पर proto_library नियम में ज़िक्र किया गया है. ट्रांज़िटिव डिस्क्रिप्टर सेट का कलेक्शन, [ProtoInfo].transitive_descriptor_sets Starlark प्रोवाइडर के ज़रिए उपलब्ध होता है.
ProtoInfo.java में मौजूद दस्तावेज़ देखें.
कोड को व्यवस्थित करने का सुझाया गया तरीका:
- हर
.protoफ़ाइल के लिए एकproto_libraryनियम. -
foo.protoनाम की फ़ाइल,foo_protoनाम के नियम में होगी. यह नियम, उसी पैकेज में मौजूद होगा. -
[language]_proto_libraryनाम केproto_libraryको रैप करने वालेfoo_protoकोfoo_[language]_protoकहा जाना चाहिए. साथ ही, यह उसी पैकेज में मौजूद होना चाहिए.
तर्क
| विशेषताएं | |
|---|---|
name |
नाम; ज़रूरी है इस टारगेट के लिए यूनीक नाम. |
deps
|
लेबल की सूची; डिफ़ॉल्ट वैल्यू है proto_library नियमों की सूची, जिन पर टारगेट निर्भर करता है.
एक proto_library सिर्फ़ अन्य
proto_library टारगेट पर निर्भर हो सकता है.
यह भाषा के हिसाब से बनी लाइब्रेरी पर निर्भर नहीं हो सकता.
|
srcs
|
लेबल की सूची; डिफ़ॉल्ट वैल्यू है .proto और .protodevel फ़ाइलों की सूची, जिन्हें
टारगेट बनाने के लिए प्रोसेस किया जाता है. आम तौर पर, यह सूची खाली नहीं होती. एक ऐसा इस्तेमाल का उदाहरण जहां srcs खाली हो सकता है वह alias-library है. यह proto_library नियम है, जिसमें deps में एक या उससे ज़्यादा अन्य proto_library शामिल हैं.
इस पैटर्न का इस्तेमाल, उदाहरण के लिए, किसी स्थायी नाम के तहत सार्वजनिक एपीआई एक्सपोर्ट करने के लिए किया जा सकता है.
|
allow_exports
|
लेबल; डिफ़ॉल्ट वैल्यू |
exports
|
proto_library टारगेट की सूची, जिन्हें proto सोर्स में "import public" के ज़रिए रेफ़र किया जा सकता है. |
import_prefix
|
स्ट्रिंग; डिफ़ॉल्ट वैल्यू सेट होने पर, इस नियम के
|
strip_import_prefix
|
स्ट्रिंग; डिफ़ॉल्ट वैल्यू सेट होने पर, इस नियम के अगर यह कोई रिलेटिव पाथ है (स्लैश से शुरू नहीं होता), तो इसे पैकेज से जुड़ा पाथ माना जाता है एक. अगर यह कोई ऐब्सलूट पाथ है, तो इसे डेटाबेस से जुड़ा पाथ माना जाता है. `strip_import_prefix` एट्रिब्यूट में मौजूद प्रीफ़िक्स को हटाने के बाद, |