नियम
- cc_binary
- cc_import
- cc_library
- cc_proto_library
- cc_shared_library
- cc_static_library
- fdo_prefetch_hints
- fdo_profile
- memprof_profile
- propeller_optimize
- cc_test
- cc_toolchain
- cc_toolchain_suite
cc_binary
नियम का सोर्स देखेंcc_binary(name, deps, srcs, data, additional_linker_inputs, args, compatible_with, copts, defines, deprecation, distribs, env, exec_compatible_with, exec_properties, features, includes, licenses, link_extra_lib, linkopts, linkshared, linkstatic, local_defines, malloc, nocopts, output_licenses, restricted_to, stamp, tags, target_compatible_with, testonly, toolchains, visibility, win_def_file)
इंप्लिसिट आउटपुट टारगेट
name.stripped
(सिर्फ़ तब बनाया जाता है, जब साफ़ तौर पर अनुरोध किया गया हो): यह बाइनरी का स्ट्रिप्ड वर्शन होता है. डीबग सिंबल हटाने के लिए, बाइनरी परstrip -g
चलाया जाता है.--stripopt=-foo
का इस्तेमाल करके, कमांड लाइन पर स्ट्रिप के अतिरिक्त विकल्प दिए जा सकते हैं. यह आउटपुट सिर्फ़ तब जनरेट होता है, जब इसके लिए साफ़ तौर पर अनुरोध किया जाता है.name.dwp
(सिर्फ़ अनुरोध करने पर बनाया जाता है): अगर Fission चालू है, तो यह एक डीबग जानकारी वाला पैकेज फ़ाइल है. इसका इस्तेमाल, दूर से डिप्लॉय किए गए बाइनरी को डीबग करने के लिए किया जा सकता है. अन्यथा: खाली फ़ाइल.
तर्क
विशेषताएं | |
---|---|
name |
नाम; ज़रूरी है इस टारगेट के लिए यूनीक नाम. |
deps
|
लेबल की सूची; डिफ़ॉल्ट वैल्यू ये |
srcs
|
लेबल की सूची; डिफ़ॉल्ट वैल्यू सभी
सभी अगर किसी नियम का नाम
...और उन फ़ाइलों को जनरेट करने वाले नियम. अलग-अलग एक्सटेंशन, gcc के नियमों के मुताबिक अलग-अलग प्रोग्रामिंग भाषाओं को दिखाते हैं. |
additional_linker_inputs
|
लेबल की सूची; डिफ़ॉल्ट वैल्यू उदाहरण के लिए, कंपाइल की गई Windows .res फ़ाइलों को यहां दिया जा सकता है, ताकि उन्हें बाइनरी टारगेट में एम्बेड किया जा सके. |
copts
|
स्ट्रिंग की सूची; डिफ़ॉल्ट वैल्यू
इस एट्रिब्यूट में मौजूद हर स्ट्रिंग को, बाइनरी टारगेट कंपाइल करने से पहले
अगर पैकेज में सुविधा
|
defines
|
स्ट्रिंग की सूची; डिफ़ॉल्ट वैल्यू -D जोड़ा जाता है. साथ ही, इसे इस टारगेट के कंपाइल कमांड लाइन में जोड़ा जाता है. इसके अलावा, इसे इस पर निर्भर हर नियम में भी जोड़ा जाता है. इस बारे में बहुत सावधानी बरतें, क्योंकि इससे
काफ़ी असर पड़ सकता है. अगर आपको नहीं पता कि GTIN सही है या नहीं, तो इसके बजाय local_defines एट्रिब्यूट की वैल्यू तय करें.
|
includes
|
स्ट्रिंग की सूची; डिफ़ॉल्ट वैल्यू
"बदलाव के हिसाब से" विकल्प के तहत बदलाव किया जा सकता है.
हर स्ट्रिंग के पहले हेडर को srcs या hdrs में जोड़ा जाना चाहिए. ऐसा न करने पर, जब कंपाइलेशन सैंडबॉक्स किया जाता है (डिफ़ॉल्ट रूप से), तब वे निर्भर नियमों के लिए उपलब्ध नहीं होंगे. |
link_extra_lib
|
लेबल; डिफ़ॉल्ट वैल्यू
C++ बाइनरी, डिफ़ॉल्ट रूप से |
linkopts
|
स्ट्रिंग की सूची; डिफ़ॉल्ट वैल्यू LINKOPTS में जोड़ा जाता है.
इस सूची का हर वह एलिमेंट जो |
linkshared
|
बूलियन; कॉन्फ़िगर नहीं किया जा सकता; डिफ़ॉल्ट रूप से linkshared=True शामिल करें. डिफ़ॉल्ट रूप से, यह विकल्प बंद होता है.
इस फ़्लैग की मौजूदगी का मतलब है कि
|
linkstatic
|
बूलियन; डिफ़ॉल्ट वैल्यू cc_binary और cc_test के लिए: बाइनरी को स्टैटिक मोड में लिंक करें. cc_library.linkstatic के लिए: यहां दिया गया तरीका देखें.
डिफ़ॉल्ट रूप से, यह विकल्प
अगर यह विकल्प चालू है और यह बाइनरी या टेस्ट है, तो यह विकल्प बिल्ड टूल को बताता है कि जब भी संभव हो, उपयोगकर्ता लाइब्रेरी के लिए किसी एक्ज़ीक्यूटेबल को लिंक करने के तीन अलग-अलग तरीके हैं:
अगर |
local_defines
|
स्ट्रिंग की सूची; डिफ़ॉल्ट वैल्यू -D जोड़ा जाता है. साथ ही, इसे इस टारगेट के लिए कंपाइल कमांड लाइन में जोड़ा जाता है. हालांकि, इसे इसके डिपेंडेंट में नहीं जोड़ा जाता.
|
malloc
|
लेबल; डिफ़ॉल्ट वैल्यू
डिफ़ॉल्ट रूप से, C++ बाइनरी को |
nocopts
|
स्ट्रिंग; डिफ़ॉल्ट वैल्यू COPTS (इसमें नियम के copts एट्रिब्यूट में साफ़ तौर पर बताई गई वैल्यू भी शामिल हैं) को इस नियम को कंपाइल करने के लिए, COPTS से हटा दिया जाएगा.
इस एट्रिब्यूट की ज़रूरत बहुत कम पड़ती है.
|
stamp
|
पूर्णांक; डिफ़ॉल्ट वैल्यू
स्टैंप किए गए बाइनरी को तब तक फिर से नहीं बनाया जाता, जब तक उनकी डिपेंडेंसी में बदलाव न हो. |
win_def_file
|
लेबल; डिफ़ॉल्ट वैल्यू इस एट्रिब्यूट का इस्तेमाल सिर्फ़ तब किया जाना चाहिए, जब Windows टारगेट प्लैटफ़ॉर्म हो. इसका इस्तेमाल, शेयर की गई लाइब्रेरी को लिंक करते समय सिंबल एक्सपोर्ट करने के लिए किया जा सकता है. |
cc_import
नियम का सोर्स देखेंcc_import(name, deps, data, hdrs, alwayslink, compatible_with, deprecation, distribs, features, interface_library, licenses, restricted_to, shared_library, static_library, system_provided, tags, target_compatible_with, testonly, visibility)
cc_import
के नियमों की मदद से, उपयोगकर्ता पहले से कंपाइल की गई C/C++ लाइब्रेरी इंपोर्ट कर सकते हैं.
यहां इस्तेमाल के कुछ सामान्य उदाहरण दिए गए हैं:
1. स्टैटिक लाइब्रेरी को लिंक करना
cc_import( name = "mylib", hdrs = ["mylib.h"], static_library = "libmylib.a", # If alwayslink is turned on, # libmylib.a will be forcely linked into any binary that depends on it. # alwayslink = 1, )
cc_import( name = "mylib", hdrs = ["mylib.h"], shared_library = "libmylib.so", )
cc_import( name = "mylib", hdrs = ["mylib.h"], # mylib.lib is an import library for mylib.dll which will be passed to linker interface_library = "mylib.lib", # mylib.dll will be available for runtime shared_library = "mylib.dll", )
system_provided=True
(Windows) से लिंक करना
cc_import( name = "mylib", hdrs = ["mylib.h"], # mylib.lib is an import library for mylib.dll which will be passed to linker interface_library = "mylib.lib", # mylib.dll is provided by system environment, for example it can be found in PATH. # This indicates that Bazel is not responsible for making mylib.dll available. system_provided = 1, )
से लिंक करना Unix पर:
cc_import( name = "mylib", hdrs = ["mylib.h"], static_library = "libmylib.a", shared_library = "libmylib.so", ) # first will link to libmylib.a cc_binary( name = "first", srcs = ["first.cc"], deps = [":mylib"], linkstatic = 1, # default value ) # second will link to libmylib.so cc_binary( name = "second", srcs = ["second.cc"], deps = [":mylib"], linkstatic = 0, )
cc_import( name = "mylib", hdrs = ["mylib.h"], static_library = "libmylib.lib", # A normal static library interface_library = "mylib.lib", # An import library for mylib.dll shared_library = "mylib.dll", ) # first will link to libmylib.lib cc_binary( name = "first", srcs = ["first.cc"], deps = [":mylib"], linkstatic = 1, # default value ) # second will link to mylib.dll through mylib.lib cc_binary( name = "second", srcs = ["second.cc"], deps = [":mylib"], linkstatic = 0, )
cc_import
में include एट्रिब्यूट काम करता है. उदाहरण के लिए:
cc_import( name = "curl_lib", hdrs = glob(["vendor/curl/include/curl/*.h"]), includes = [ "vendor/curl/include" ], shared_library = "vendor/curl/lib/.libs/libcurl.dylib", )
तर्क
विशेषताएं | |
---|---|
name |
नाम; ज़रूरी है इस टारगेट के लिए यूनीक नाम. |
deps
|
लेबल की सूची; डिफ़ॉल्ट वैल्यू deps
के बारे में सामान्य टिप्पणियां देखें. बिल्ड करने के ज़्यादातर नियमों के हिसाब से तय किए गए सामान्य एट्रिब्यूट.
|
hdrs
|
लेबल की सूची; डिफ़ॉल्ट वैल्यू |
alwayslink
|
बूलियन; डिफ़ॉल्ट वैल्यू अगर Windows पर VS 2017 के साथ alwayslink काम नहीं करता है, तो इसकी वजह एक जानी-पहचानी समस्या है. कृपया VS 2017 को नए वर्शन में अपग्रेड करें. |
interface_library
|
लेबल; डिफ़ॉल्ट वैल्यू इन फ़ाइल टाइप का इस्तेमाल किया जा सकता है:
|
shared_library
|
लेबल; डिफ़ॉल्ट वैल्यू इन फ़ाइल टाइप का इस्तेमाल किया जा सकता है:
|
static_library
|
लेबल; डिफ़ॉल्ट वैल्यू इन फ़ाइल टाइप का इस्तेमाल किया जा सकता है:
|
system_provided
|
बूलियन; डिफ़ॉल्ट वैल्यू interface_library की वैल्यू दी जानी चाहिए और shared_library खाली होना चाहिए.
|
cc_library
नियम का सोर्स देखेंcc_library(name, deps, srcs, data, hdrs, additional_compiler_inputs, additional_linker_inputs, alwayslink, compatible_with, copts, defines, deprecation, distribs, exec_compatible_with, exec_properties, features, implementation_deps, include_prefix, includes, licenses, linkopts, linkstamp, linkstatic, local_defines, nocopts, restricted_to, strip_include_prefix, tags, target_compatible_with, testonly, textual_hdrs, toolchains, visibility, win_def_file)
हेडर शामिल करने की जांच की जा रही है
बिल्ड में इस्तेमाल की गई सभी हेडर फ़ाइलों को, cc_*
नियमों के hdrs
या srcs
में एलान किया जाना चाहिए. यह लागू है.
cc_library
नियमों के लिए, hdrs
में मौजूद हेडर, लाइब्रेरी का सार्वजनिक इंटरफ़ेस बनाते हैं. इन्हें सीधे तौर पर, hdrs
में मौजूद फ़ाइलों और लाइब्रेरी के srcs
के साथ-साथ, hdrs
और cc_*
नियमों के srcs
में मौजूद फ़ाइलों से भी शामिल किया जा सकता है. ये नियम, लाइब्रेरी को अपने deps
में शामिल करते हैं.
srcs
में मौजूद हेडर को सिर्फ़ hdrs
और लाइब्रेरी के srcs
में मौजूद फ़ाइलों से सीधे तौर पर शामिल किया जाना चाहिए. किसी हेडर को hdrs
या srcs
में रखने का फ़ैसला करते समय, आपको यह पूछना चाहिए कि क्या आपको इस लाइब्रेरी के उपभोक्ताओं को इसे सीधे तौर पर शामिल करने की अनुमति देनी है. यह फ़ैसला, प्रोग्रामिंग भाषाओं में public
और private
की विज़िबिलिटी के बीच लिए गए फ़ैसले के जैसा ही होता है.
cc_binary
और cc_test
नियमों का एक्सपोर्ट किया गया इंटरफ़ेस नहीं होता. इसलिए, इनमें hdrs
एट्रिब्यूट भी नहीं होता. बाइनरी या टेस्ट से सीधे तौर पर जुड़े सभी हेडर, srcs
में शामिल होने चाहिए.
इन नियमों को समझने के लिए, यहां दिया गया उदाहरण देखें.
cc_binary( name = "foo", srcs = [ "foo.cc", "foo.h", ], deps = [":bar"], ) cc_library( name = "bar", srcs = [ "bar.cc", "bar-impl.h", ], hdrs = ["bar.h"], deps = [":baz"], ) cc_library( name = "baz", srcs = [ "baz.cc", "baz-impl.h", ], hdrs = ["baz.h"], )
इस उदाहरण में, सीधे तौर पर शामिल किए जा सकने वाले आइटम की सूची यहां दी गई है. उदाहरण के लिए, foo.cc
में सीधे तौर पर foo.h
और bar.h
को शामिल किया जा सकता है, लेकिन baz.h
को नहीं.
फ़ाइल शामिल करें | शामिल करने की अनुमति है |
---|---|
foo.h | bar.h |
foo.cc | foo.h bar.h |
bar.h | bar-impl.h baz.h |
bar-impl.h | bar.h baz.h |
bar.cc | bar.h bar-impl.h baz.h |
baz.h | baz-impl.h |
baz-impl.h | baz.h |
baz.cc | baz.h baz-impl.h |
शामिल करने की जांच के नियम, सिर्फ़ सीधे तौर पर शामिल किए गए लोगों पर लागू होते हैं. ऊपर दिए गए उदाहरण में, foo.cc
को bar.h
शामिल करने की अनुमति है. bar.h
में baz.h
शामिल हो सकता है और baz.h
में baz-impl.h
शामिल हो सकता है. तकनीकी तौर पर, .cc
फ़ाइल के कंपाइलेशन में, hdrs
या srcs
में मौजूद कोई भी हेडर फ़ाइल शामिल हो सकती है. साथ ही, ट्रांज़िटिव deps
क्लोज़र में मौजूद किसी भी cc_library
में शामिल हो सकती है. इस मामले में, कंपाइलर foo.cc
को कंपाइल करते समय baz.h
और baz-impl.h
को पढ़ सकता है. हालांकि, foo.cc
में #include "baz.h"
नहीं होना चाहिए. इसके लिए, baz
को foo
के deps
में जोड़ना होगा.
Bazel, टूलचेन के साथ काम करता है, ताकि फ़ाइल शामिल करने से जुड़े नियमों को लागू किया जा सके.
layering_check
सुविधा के लिए, टूलचेन का साथ देना ज़रूरी है. साथ ही, इसके लिए साफ़ तौर पर अनुरोध करना ज़रूरी है. उदाहरण के लिए, --features=layering_check
कमांड-लाइन फ़्लैग या package
फ़ंक्शन के features
पैरामीटर के ज़रिए अनुरोध किया जा सकता है. Bazel की ओर से उपलब्ध कराई गई टूलचेन, इस सुविधा के साथ सिर्फ़ Unix और macOS पर clang के साथ काम करती हैं.
तर्क
विशेषताएं | |
---|---|
name |
नाम; ज़रूरी है इस टारगेट के लिए यूनीक नाम. |
deps
|
लेबल की सूची; डिफ़ॉल्ट वैल्यू ये |
srcs
|
लेबल की सूची; डिफ़ॉल्ट वैल्यू सभी
सभी अगर किसी नियम का नाम
...और उन फ़ाइलों को जनरेट करने वाले नियम. अलग-अलग एक्सटेंशन, gcc के नियमों के मुताबिक अलग-अलग प्रोग्रामिंग भाषाओं को दिखाते हैं. |
hdrs
|
लेबल की सूची; डिफ़ॉल्ट वैल्यू हेडर फ़ाइलों को इस जगह पर डिक्लेयर करना सबसे सही होता है. ये फ़ाइलें, लाइब्रेरी के इंटरफ़ेस के बारे में बताती हैं. इन हेडर को इस नियम या इससे जुड़े नियमों में शामिल करने के लिए उपलब्ध कराया जाएगा.
इस लाइब्रेरी के क्लाइंट को जिन हेडर को शामिल नहीं करना है उन्हें |
additional_compiler_inputs
|
लेबल की सूची; डिफ़ॉल्ट वैल्यू |
additional_linker_inputs
|
लेबल की सूची; डिफ़ॉल्ट वैल्यू उदाहरण के लिए, कंपाइल की गई Windows .res फ़ाइलों को यहां दिया जा सकता है, ताकि उन्हें बाइनरी टारगेट में एम्बेड किया जा सके. |
alwayslink
|
बूलियन; डिफ़ॉल्ट वैल्यू srcs में दी गई फ़ाइलों के लिए सभी ऑब्जेक्ट फ़ाइलों में लिंक करेगा. भले ही, कुछ में बाइनरी से रेफ़र किए गए कोई भी सिंबल मौजूद न हों.
यह तब काम आता है, जब आपके कोड को बाइनरी में कोड के ज़रिए साफ़ तौर पर कॉल नहीं किया जाता. उदाहरण के लिए, अगर आपका कोड किसी सेवा से मिले कॉलबैक को पाने के लिए रजिस्टर करता है.
अगर Windows पर VS 2017 के साथ alwayslink काम नहीं करता है, तो इसकी वजह एक जानी-पहचानी समस्या है. कृपया VS 2017 को नए वर्शन में अपग्रेड करें. |
copts
|
स्ट्रिंग की सूची; डिफ़ॉल्ट वैल्यू
इस एट्रिब्यूट में मौजूद हर स्ट्रिंग को, बाइनरी टारगेट कंपाइल करने से पहले
अगर पैकेज में सुविधा
|
defines
|
स्ट्रिंग की सूची; डिफ़ॉल्ट वैल्यू -D जोड़ा जाता है. साथ ही, इसे इस टारगेट के कंपाइल कमांड लाइन में जोड़ा जाता है. इसके अलावा, इसे इस पर निर्भर हर नियम में भी जोड़ा जाता है. इस बारे में बहुत सावधानी बरतें, क्योंकि इससे
काफ़ी असर पड़ सकता है. अगर आपको नहीं पता कि GTIN सही है या नहीं, तो इसके बजाय local_defines एट्रिब्यूट की वैल्यू तय करें.
|
implementation_deps
|
लेबल की सूची; डिफ़ॉल्ट वैल्यू deps के उलट, इन लाइब्रेरी के हेडर और शामिल किए गए पाथ (और उनके सभी ट्रांज़िटिव डिपेंडेंसी) का इस्तेमाल सिर्फ़ इस लाइब्रेरी को कंपाइल करने के लिए किया जाता है. इनका इस्तेमाल उन लाइब्रेरी के लिए नहीं किया जाता जो इस पर निर्भर करती हैं. implementation_deps के साथ बताई गई लाइब्रेरी अब भी उन बाइनरी टारगेट से जुड़ी हैं जो इस लाइब्रेरी पर निर्भर हैं.
फ़िलहाल, इसका इस्तेमाल cc_libraries तक ही सीमित है. साथ ही, इसे |
include_prefix
|
स्ट्रिंग; डिफ़ॉल्ट वैल्यू इस एट्रिब्यूट को सेट करने पर, इस नियम के इस प्रीफ़िक्स को जोड़ने से पहले, |
includes
|
स्ट्रिंग की सूची; डिफ़ॉल्ट वैल्यू
"बदलाव के हिसाब से" विकल्प के तहत बदलाव किया जा सकता है.
हर स्ट्रिंग के पहले हेडर को srcs या hdrs में जोड़ा जाना चाहिए. ऐसा न करने पर, जब कंपाइलेशन सैंडबॉक्स किया जाता है (डिफ़ॉल्ट रूप से), तब वे निर्भर नियमों के लिए उपलब्ध नहीं होंगे. |
linkopts
|
स्ट्रिंग की सूची; डिफ़ॉल्ट वैल्यू LINKOPTS में जोड़ा जाता है.
इस सूची का हर वह एलिमेंट जो |
linkstamp
|
लेबल; डिफ़ॉल्ट वैल्यू base पैकेज के लिए होना चाहिए.
|
linkstatic
|
बूलियन; डिफ़ॉल्ट वैल्यू cc_binary और cc_test के लिए: बाइनरी को स्टैटिक मोड में लिंक करें. cc_library.linkstatic के लिए: यहां दिया गया तरीका देखें.
डिफ़ॉल्ट रूप से, यह विकल्प
अगर यह विकल्प चालू है और यह बाइनरी या टेस्ट है, तो यह विकल्प बिल्ड टूल को बताता है कि जब भी संभव हो, उपयोगकर्ता लाइब्रेरी के लिए किसी एक्ज़ीक्यूटेबल को लिंक करने के तीन अलग-अलग तरीके हैं:
अगर |
local_defines
|
स्ट्रिंग की सूची; डिफ़ॉल्ट वैल्यू -D जोड़ा जाता है. साथ ही, इसे इस टारगेट के लिए कंपाइल कमांड लाइन में जोड़ा जाता है. हालांकि, इसे इसके डिपेंडेंट में नहीं जोड़ा जाता.
|
nocopts
|
स्ट्रिंग; डिफ़ॉल्ट वैल्यू COPTS (इसमें नियम के copts एट्रिब्यूट में साफ़ तौर पर बताई गई वैल्यू भी शामिल हैं) को इस नियम को कंपाइल करने के लिए, COPTS से हटा दिया जाएगा.
इस एट्रिब्यूट की ज़रूरत बहुत कम पड़ती है.
|
strip_include_prefix
|
स्ट्रिंग; डिफ़ॉल्ट वैल्यू इस विकल्प को सेट करने पर, इस नियम के अगर यह रिलेटिव पाथ है, तो इसे पैकेज के हिसाब से रिलेटिव पाथ माना जाता है. अगर यह ऐब्सलूट पाथ है, तो इसे रिपॉज़िटरी के हिसाब से पाथ माना जाता है.
|
textual_hdrs
|
लेबल की सूची; डिफ़ॉल्ट वैल्यू यह ऐसी हेडर फ़ाइलों के लिए लोकेशन है जिन्हें खुद से कंपाइल नहीं किया जा सकता. इसका मतलब है कि मान्य कोड बनाने के लिए, उन्हें हमेशा अन्य सोर्स फ़ाइलों में टेक्स्ट के तौर पर शामिल करना होता है. |
win_def_file
|
लेबल; डिफ़ॉल्ट वैल्यू इस एट्रिब्यूट का इस्तेमाल सिर्फ़ तब किया जाना चाहिए, जब Windows टारगेट प्लैटफ़ॉर्म हो. इसका इस्तेमाल, शेयर की गई लाइब्रेरी को लिंक करते समय सिंबल एक्सपोर्ट करने के लिए किया जा सकता है. |
cc_proto_library
नियम का सोर्स देखेंcc_proto_library(name, deps, data, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, licenses, restricted_to, tags, target_compatible_with, testonly, visibility)
cc_proto_library
, .proto
फ़ाइलों से C++ कोड जनरेट करता है.
deps
, proto_library
के नियमों के मुताबिक होना चाहिए.
उदाहरण:
cc_library( name = "lib", deps = [":foo_cc_proto"], ) cc_proto_library( name = "foo_cc_proto", deps = [":foo_proto"], ) proto_library( name = "foo_proto", )
तर्क
विशेषताएं | |
---|---|
name |
नाम; ज़रूरी है इस टारगेट के लिए यूनीक नाम. |
deps
|
लेबल की सूची; डिफ़ॉल्ट वैल्यू proto_library
नियमों की सूची, जिनसे C++ कोड जनरेट करना है.
|
cc_shared_library
नियम का सोर्स देखेंcc_shared_library(name, deps, additional_linker_inputs, dynamic_deps, exports_filter, shared_lib_name, tags, user_link_flags, win_def_file)
इससे शेयर की गई लाइब्रेरी बनती है.
उदाहरण
cc_shared_library( name = "foo_shared", deps = [ ":foo", ], dynamic_deps = [ ":bar_shared", ], additional_linker_inputs = [ ":foo.lds", ], user_link_flags = [ "-Wl,--version-script=$(location :foo.lds)", ], ) cc_library( name = "foo", srcs = ["foo.cc"], hdrs = ["foo.h"], deps = [ ":bar", ":baz", ], ) cc_shared_library( name = "bar_shared", shared_lib_name = "bar.so", deps = [":bar"], ) cc_library( name = "bar", srcs = ["bar.cc"], hdrs = ["bar.h"], ) cc_library( name = "baz", srcs = ["baz.cc"], hdrs = ["baz.h"], )
उदाहरण में, foo_shared
, foo
और baz
को स्टैटिक तरीके से लिंक करता है. baz
, ट्रांज़िटिव डिपेंडेंसी है. यह bar
को लिंक नहीं करता, क्योंकि इसे dynamic_dep
bar_shared
पहले से ही डाइनैमिक तौर पर उपलब्ध कराता है.
foo_shared
, लिंक करने वाली स्क्रिप्ट *.lds फ़ाइल का इस्तेमाल करता है. इससे यह कंट्रोल किया जा सकता है कि किन सिंबल को एक्सपोर्ट किया जाना चाहिए. cc_shared_library
नियम का लॉजिक यह कंट्रोल नहीं करता कि कौनसे सिंबल एक्सपोर्ट किए जाएं. यह सिर्फ़ उन सिंबल का इस्तेमाल करता है जिन्हें एक्सपोर्ट किया जाना है. इससे विश्लेषण के दौरान गड़बड़ियां दिखती हैं. ऐसा तब होता है, जब दो शेयर की गई लाइब्रेरी एक ही टारगेट एक्सपोर्ट करती हैं.
cc_shared_library
की हर डायरेक्ट डिपेंडेंसी को एक्सपोर्ट किया गया माना जाता है. इसलिए, विश्लेषण के दौरान Bazel यह मान लेता है कि foo
को foo_shared
एक्सपोर्ट कर रहा है. baz
को foo_shared
से एक्सपोर्ट नहीं किया जा सकता. exports_filter
से मैच होने वाले हर टारगेट को भी एक्सपोर्ट किया गया माना जाता है.
उदाहरण में मौजूद हर cc_library
, ज़्यादा से ज़्यादा एक cc_shared_library
में दिखना चाहिए. अगर हमें baz
को भी bar_shared
में लिंक करना है, तो हमें baz
में tags = ["LINKABLE_MORE_THAN_ONCE"]
जोड़ना होगा.
shared_lib_name
एट्रिब्यूट की वजह से, bar_shared
से जनरेट हुई फ़ाइल का नाम bar.so
होगा. हालांकि, Linux पर डिफ़ॉल्ट रूप से इसका नाम libbar.so
होता है.
गड़बड़ियां
Two shared libraries in dependencies export the same symbols.
ऐसा तब होगा, जब दो अलग-अलग cc_shared_library
डिपेंडेंसी एक ही टारगेट को एक्सपोर्ट कर रही हों. इस समस्या को ठीक करने के लिए, आपको cc_shared_library
डिपेंडेंसी में से किसी एक में लाइब्रेरी एक्सपोर्ट करने की सुविधा बंद करनी होगी.
Two shared libraries in dependencies link the same library statically
ऐसा तब होगा, जब दो अलग-अलग cc_shared_library
डिपेंडेंसी के साथ नया cc_shared_library
बनाया जा रहा हो और दोनों एक ही टारगेट को स्टैटिक तौर पर लिंक करती हों.
यह एक्सपोर्ट से जुड़ी गड़बड़ी की तरह ही है.
इस समस्या को ठीक करने का एक तरीका यह है कि लाइब्रेरी को cc_shared_library
की किसी एक डिपेंडेंसी से लिंक करना बंद कर दें. साथ ही, जो लाइब्रेरी अब भी लिंक है उसे लाइब्रेरी एक्सपोर्ट करनी होगी, ताकि जो लाइब्रेरी लिंक नहीं है उसे सिंबल दिखते रहें. दूसरा तरीका यह है कि टारगेट को एक्सपोर्ट करने वाली किसी तीसरे पक्ष की लाइब्रेरी का इस्तेमाल किया जाए.
तीसरा तरीका यह है कि समस्या पैदा करने वाले cc_library
को LINKABLE_MORE_THAN_ONCE
के साथ टैग किया जाए. हालांकि, ऐसा बहुत कम करना चाहिए. साथ ही, आपको यह पक्का करना चाहिए कि cc_library
को एक से ज़्यादा बार लिंक करना सुरक्षित हो.
'//foo:foo' is already linked statically in '//bar:bar' but not exported`
इसका मतलब है कि आपकी deps
के ट्रांज़िटिव क्लोज़र में मौजूद किसी लाइब्रेरी को cc_shared_library
डिपेंडेंसी में से किसी एक के बिना ऐक्सेस किया जा सकता है. हालांकि, यह dynamic_deps
में किसी अन्य cc_shared_library
से पहले ही लिंक हो चुकी है और इसे एक्सपोर्ट नहीं किया गया है.
इसका समाधान यह है कि इसे cc_shared_library
डिपेंडेंसी से एक्सपोर्ट करें या इसे एक्सपोर्ट करने वाली तीसरी cc_shared_library
को बाहर निकालें.
Do not place libraries which only contain a precompiled dynamic library in deps.
अगर आपके पास पहले से कंपाइल की गई डाइनैमिक लाइब्रेरी है, तो इसे मौजूदा cc_shared_library
टारगेट में स्टैटिक तौर पर लिंक करने की ज़रूरत नहीं है. साथ ही, इसे लिंक नहीं किया जा सकता. इसलिए, यह deps
के cc_shared_library
में शामिल नहीं है. अगर यह पहले से कंपाइल की गई डाइनैमिक लाइब्रेरी, आपकी किसी cc_libraries
की डिपेंडेंसी है, तो cc_libraries
को सीधे तौर पर इस पर निर्भर होना चाहिए.cc_library
Trying to export a library already exported by a different shared library
अगर मौजूदा नियम के तहत, ऐसे टारगेट को एक्सपोर्ट करने का दावा किया जा रहा है जिसे आपकी किसी डाइनैमिक डिपेंडेंसी से पहले ही एक्सपोर्ट किया जा रहा है, तो आपको यह गड़बड़ी दिखेगी.
इसे ठीक करने के लिए, deps
से टारगेट हटाएं और सिर्फ़ डाइनैमिक डिपेंडेंसी पर भरोसा करें. इसके अलावा, यह भी पक्का करें कि deps
इस टारगेट को कैप्चर न करे.exports_filter
तर्क
विशेषताएं | |
---|---|
name |
नाम; ज़रूरी है इस टारगेट के लिए यूनीक नाम. |
deps
|
लेबल की सूची; डिफ़ॉल्ट वैल्यू
इन डायरेक्ट डिपेंडेंसी की किसी भी ट्रांज़िटिव लाइब्रेरी डिपेंडेंसी को इस शेयर की गई लाइब्रेरी में तब तक लिंक किया जाएगा, जब तक उन्हें
विश्लेषण के दौरान, नियम लागू करने की प्रोसेस में,
अगर एक ही लाइब्रेरी को एक से ज़्यादा |
additional_linker_inputs
|
लेबल की सूची; डिफ़ॉल्ट वैल्यू user_link_flags एट्रिब्यूट का इस्तेमाल करें.
|
dynamic_deps
|
लेबल की सूची; डिफ़ॉल्ट वैल्यू cc_shared_library डिपेंडेंसी हैं जिन पर मौजूदा टारगेट निर्भर करता है.
|
exports_filter
|
स्ट्रिंग की सूची; डिफ़ॉल्ट वैल्यू
शेयर की गई लाइब्रेरी से किसी भी टारगेट
ध्यान दें कि यह एट्रिब्यूट, उन टारगेट में डिपेंडेंसी एज नहीं जोड़ रहा है. इसके बजाय, डिपेंडेंसी एज को इस सिंटैक्स का इस्तेमाल किया जा सकता है: foo/BUILD में मौजूद किसी भी टारगेट के लिए
|
shared_lib_name
|
स्ट्रिंग; डिफ़ॉल्ट वैल्यू |
user_link_flags
|
स्ट्रिंग की सूची; डिफ़ॉल्ट वैल्यू cc_shared_library( name = "foo_shared", additional_linker_inputs = select({ "//src/conditions:linux": [ ":foo.lds", ":additional_script.txt", ], "//conditions:default": []}), user_link_flags = select({ "//src/conditions:linux": [ "-Wl,-rpath,kittens", "-Wl,--version-script=$(location :foo.lds)", "-Wl,--script=$(location :additional_script.txt)", ], "//conditions:default": []}), ... ) |
win_def_file
|
लेबल; डिफ़ॉल्ट वैल्यू इस एट्रिब्यूट का इस्तेमाल सिर्फ़ तब किया जाना चाहिए, जब Windows टारगेट प्लैटफ़ॉर्म हो. इसका इस्तेमाल, शेयर की गई लाइब्रेरी को लिंक करते समय सिंबल एक्सपोर्ट करने के लिए किया जा सकता है. |
cc_static_library
नियम का सोर्स देखेंcc_static_library(name, deps, tags)
इससे बनने वाली स्टैटिक लाइब्रेरी में, deps
में दी गई सूची में शामिल टारगेट की ऑब्जेक्ट फ़ाइलें होती हैं. साथ ही, उनकी ट्रांज़िटिव डिपेंडेंसी भी होती हैं. इसमें PIC
ऑब्जेक्ट को प्राथमिकता दी जाती है.
आउटपुट ग्रुप
linkdeps
यह एक टेक्स्ट फ़ाइल होती है. इसमें deps
में दी गई उन ट्रांज़िटिव डिपेंडेंसी के लेबल होते हैं जिन्होंने स्टैटिक लाइब्रेरी में कोई ऑब्जेक्ट फ़ाइल नहीं दी है. हालांकि, वे कम से कम एक स्टैटिक, डाइनैमिक या इंटरफ़ेस लाइब्रेरी उपलब्ध कराती हैं. लिंक करने के समय, स्टैटिक लाइब्रेरी के लिए इन लाइब्रेरी का उपलब्ध होना ज़रूरी हो सकता है.
linkopts
यह एक टेक्स्ट फ़ाइल होती है. इसमें उपयोगकर्ता की ओर से दी गई linkopts
होती है. यह deps
में दी गई सभी ट्रांज़िटिव डिपेंडेंसी की होती है.
डुप्लीकेट सिंबल
डिफ़ॉल्ट रूप से, cc_static_library
नियम यह जांच करता है कि नतीजे के तौर पर मिली स्टैटिक लाइब्रेरी में कोई डुप्लीकेट सिंबल शामिल न हो. ऐसा होने पर, बिल्ड पूरा नहीं होता और गड़बड़ी का मैसेज दिखता है. इस मैसेज में, डुप्लीकेट सिंबल और उन्हें शामिल करने वाली ऑब्जेक्ट फ़ाइलों की सूची होती है.
इस जांच को हर टारगेट या हर पैकेज के लिए बंद किया जा सकता है. इसके लिए, features = ["-symbol_check"]
सेट करें. इसके अलावा, इसे --features=-symbol_check
के ज़रिए सभी टारगेट या पैकेज के लिए बंद किया जा सकता है.
symbol_check
के लिए टूलचेन का इस्तेमाल किया जा सकता है
Bazel के साथ शिप किए गए, अपने-आप कॉन्फ़िगर होने वाले C++ टूलचेन, सभी प्लैटफ़ॉर्म पर symbol_check
सुविधा के साथ काम करते हैं. कस्टम टूलचेन में, इसे दो तरीकों से जोड़ा जा सकता है:
ACTION_NAMES.validate_static_library
ऐक्शन लागू करना औरsymbol_check
सुविधा की मदद से इसे चालू करना. ऐक्शन में सेट किया गया टूल, दो आर्ग्युमेंट के साथ शुरू होता है. पहला आर्ग्युमेंट, डुप्लीकेट सिंबल की जांच करने के लिए स्टैटिक लाइब्रेरी होती है. दूसरा आर्ग्युमेंट, उस फ़ाइल का पाथ होता है जिसे जांच पास होने पर बनाया जाना चाहिए.symbol_check
सुविधा चालू होने पर, आर्काइवर फ़्लैग जुड़ जाते हैं. इनकी वजह से, डुप्लीकेट सिंबल पर स्टैटिक लाइब्रेरी बनाने की कार्रवाई पूरी नहीं हो पाती.
तर्क
विशेषताएं | |
---|---|
name |
नाम; ज़रूरी है इस टारगेट के लिए यूनीक नाम. |
deps
|
लेबल की सूची; डिफ़ॉल्ट वैल्यू जिन डिपेंडेंसी से कोई ऑब्जेक्ट फ़ाइल नहीं मिलती उन्हें स्टैटिक लाइब्रेरी में शामिल नहीं किया जाता. हालांकि, उनके लेबल को |
fdo_prefetch_hints
नियम का सोर्स देखेंfdo_prefetch_hints(name, compatible_with, deprecation, distribs, features, licenses, profile, restricted_to, tags, target_compatible_with, testonly, visibility)
यह एक ऐसी FDO प्रीफ़ेच हिंट प्रोफ़ाइल को दिखाता है जो वर्कस्पेस में है या किसी तय किए गए ऐब्सलूट पाथ पर है. उदाहरण:
fdo_prefetch_hints( name = "hints", profile = "//path/to/hints:profile.afdo", ) fdo_profile( name = "hints_abs", absolute_path_profile = "/absolute/path/profile.afdo", )
तर्क
विशेषताएं | |
---|---|
name |
नाम; ज़रूरी है इस टारगेट के लिए यूनीक नाम. |
profile
|
लेबल; डिफ़ॉल्ट वैल्यू |
fdo_profile
नियम का सोर्स देखेंfdo_profile(name, absolute_path_profile, compatible_with, deprecation, distribs, features, licenses, profile, proto_profile, restricted_to, tags, target_compatible_with, testonly, visibility)
यह एक ऐसी FDO प्रोफ़ाइल को दिखाता है जो वर्कस्पेस में है या किसी तय किए गए ऐब्सलूट पाथ पर है. उदाहरण:
fdo_profile( name = "fdo", profile = "//path/to/fdo:profile.zip", ) fdo_profile( name = "fdo_abs", absolute_path_profile = "/absolute/path/profile.zip", )
तर्क
विशेषताएं | |
---|---|
name |
नाम; ज़रूरी है इस टारगेट के लिए यूनीक नाम. |
absolute_path_profile
|
स्ट्रिंग; डिफ़ॉल्ट वैल्यू |
profile
|
लेबल; डिफ़ॉल्ट वैल्यू |
proto_profile
|
लेबल; डिफ़ॉल्ट वैल्यू |
memprof_profile
नियम का सोर्स देखेंmemprof_profile(name, absolute_path_profile, compatible_with, deprecation, distribs, features, licenses, profile, restricted_to, tags, target_compatible_with, testonly, visibility)
यह एक MEMPROF प्रोफ़ाइल को दिखाता है. यह प्रोफ़ाइल, वर्कस्पेस में या तय किए गए ऐब्सलूट पाथ पर मौजूद होती है. उदाहरण:
memprof_profile( name = "memprof", profile = "//path/to/memprof:profile.afdo", ) memprof_profile( name = "memprof_abs", absolute_path_profile = "/absolute/path/profile.afdo", )
तर्क
विशेषताएं | |
---|---|
name |
नाम; ज़रूरी है इस टारगेट के लिए यूनीक नाम. |
absolute_path_profile
|
स्ट्रिंग; डिफ़ॉल्ट वैल्यू |
profile
|
लेबल; डिफ़ॉल्ट वैल्यू |
propeller_optimize
नियम का सोर्स देखेंpropeller_optimize(name, compatible_with, deprecation, distribs, features, ld_profile, licenses, restricted_to, tags, target_compatible_with, testonly, visibility)
यह वर्कस्पेस में Propeller की ऑप्टिमाइज़ेशन प्रोफ़ाइल को दिखाता है. उदाहरण:
propeller_optimize( name = "layout", cc_profile = "//path:cc_profile.txt", ld_profile = "//path:ld_profile.txt" ) propeller_optimize( name = "layout_absolute", absolute_cc_profile = "/absolute/cc_profile.txt", absolute_ld_profile = "/absolute/ld_profile.txt" )
तर्क
विशेषताएं | |
---|---|
name |
नाम; ज़रूरी है इस टारगेट के लिए यूनीक नाम. |
ld_profile
|
लेबल; डिफ़ॉल्ट वैल्यू |
cc_test
नियम का सोर्स देखेंcc_test(name, deps, srcs, data, additional_linker_inputs, args, compatible_with, copts, defines, deprecation, distribs, env, env_inherit, exec_compatible_with, exec_properties, features, flaky, includes, licenses, link_extra_lib, linkopts, linkstatic, local, local_defines, malloc, nocopts, restricted_to, shard_count, size, stamp, tags, target_compatible_with, testonly, timeout, toolchains, visibility, win_def_file)
तर्क
विशेषताएं | |
---|---|
name |
नाम; ज़रूरी है इस टारगेट के लिए यूनीक नाम. |
deps
|
लेबल की सूची; डिफ़ॉल्ट वैल्यू ये |
srcs
|
लेबल की सूची; डिफ़ॉल्ट वैल्यू सभी
सभी अगर किसी नियम का नाम
...और उन फ़ाइलों को जनरेट करने वाले नियम. अलग-अलग एक्सटेंशन, gcc के नियमों के मुताबिक अलग-अलग प्रोग्रामिंग भाषाओं को दिखाते हैं. |
additional_linker_inputs
|
लेबल की सूची; डिफ़ॉल्ट वैल्यू उदाहरण के लिए, कंपाइल की गई Windows .res फ़ाइलों को यहां दिया जा सकता है, ताकि उन्हें बाइनरी टारगेट में एम्बेड किया जा सके. |
copts
|
स्ट्रिंग की सूची; डिफ़ॉल्ट वैल्यू
इस एट्रिब्यूट में मौजूद हर स्ट्रिंग को, बाइनरी टारगेट कंपाइल करने से पहले
अगर पैकेज में सुविधा
|
defines
|
स्ट्रिंग की सूची; डिफ़ॉल्ट वैल्यू -D जोड़ा जाता है. साथ ही, इसे इस टारगेट के कंपाइल कमांड लाइन में जोड़ा जाता है. इसके अलावा, इसे इस पर निर्भर हर नियम में भी जोड़ा जाता है. इस बारे में बहुत सावधानी बरतें, क्योंकि इससे
काफ़ी असर पड़ सकता है. अगर आपको नहीं पता कि GTIN सही है या नहीं, तो इसके बजाय local_defines एट्रिब्यूट की वैल्यू तय करें.
|
includes
|
स्ट्रिंग की सूची; डिफ़ॉल्ट वैल्यू
"बदलाव के हिसाब से" विकल्प के तहत बदलाव किया जा सकता है.
हर स्ट्रिंग के पहले हेडर को srcs या hdrs में जोड़ा जाना चाहिए. ऐसा न करने पर, जब कंपाइलेशन सैंडबॉक्स किया जाता है (डिफ़ॉल्ट रूप से), तब वे निर्भर नियमों के लिए उपलब्ध नहीं होंगे. |
link_extra_lib
|
लेबल; डिफ़ॉल्ट वैल्यू
C++ बाइनरी, डिफ़ॉल्ट रूप से |
linkopts
|
स्ट्रिंग की सूची; डिफ़ॉल्ट वैल्यू LINKOPTS में जोड़ा जाता है.
इस सूची का हर वह एलिमेंट जो |
linkstatic
|
बूलियन; डिफ़ॉल्ट वैल्यू cc_binary और cc_test के लिए: बाइनरी को स्टैटिक मोड में लिंक करें. cc_library.linkstatic के लिए: यहां दिया गया तरीका देखें.
डिफ़ॉल्ट रूप से, यह विकल्प
अगर यह विकल्प चालू है और यह बाइनरी या टेस्ट है, तो यह विकल्प बिल्ड टूल को बताता है कि जब भी संभव हो, उपयोगकर्ता लाइब्रेरी के लिए किसी एक्ज़ीक्यूटेबल को लिंक करने के तीन अलग-अलग तरीके हैं:
अगर |
local_defines
|
स्ट्रिंग की सूची; डिफ़ॉल्ट वैल्यू -D जोड़ा जाता है. साथ ही, इसे इस टारगेट के लिए कंपाइल कमांड लाइन में जोड़ा जाता है. हालांकि, इसे इसके डिपेंडेंट में नहीं जोड़ा जाता.
|
malloc
|
लेबल; डिफ़ॉल्ट वैल्यू
डिफ़ॉल्ट रूप से, C++ बाइनरी को |
nocopts
|
स्ट्रिंग; डिफ़ॉल्ट वैल्यू COPTS (इसमें नियम के copts एट्रिब्यूट में साफ़ तौर पर बताई गई वैल्यू भी शामिल हैं) को इस नियम को कंपाइल करने के लिए, COPTS से हटा दिया जाएगा.
इस एट्रिब्यूट की ज़रूरत बहुत कम पड़ती है.
|
stamp
|
पूर्णांक; डिफ़ॉल्ट वैल्यू
स्टैंप किए गए बाइनरी को तब तक फिर से नहीं बनाया जाता, जब तक उनकी डिपेंडेंसी में बदलाव न हो. |
win_def_file
|
लेबल; डिफ़ॉल्ट वैल्यू इस एट्रिब्यूट का इस्तेमाल सिर्फ़ तब किया जाना चाहिए, जब Windows टारगेट प्लैटफ़ॉर्म हो. इसका इस्तेमाल, शेयर की गई लाइब्रेरी को लिंक करते समय सिंबल एक्सपोर्ट करने के लिए किया जा सकता है. |
cc_toolchain
नियम का सोर्स देखेंcc_toolchain(name, all_files, ar_files, as_files, compatible_with, compiler_files, compiler_files_without_includes, coverage_files, deprecation, distribs, dwp_files, dynamic_runtime_lib, exec_transition_for_inputs, features, libc_top, licenses, linker_files, module_map, objcopy_files, restricted_to, static_runtime_lib, strip_files, supports_header_parsing, supports_param_files, tags, target_compatible_with, testonly, toolchain_config, toolchain_identifier, visibility)
यह C++ टूलचेन के बारे में बताता है.
यह नियम इन कामों के लिए ज़िम्मेदार है:
-
C++ कार्रवाइयों को चलाने के लिए ज़रूरी सभी आर्टफ़ैक्ट इकट्ठा किए जा रहे हैं. ऐसा
all_files
,compiler_files
,linker_files
या_files
से खत्म होने वाले अन्य एट्रिब्यूट जैसे एट्रिब्यूट की मदद से किया जाता है. ये आम तौर पर, सभी ज़रूरी फ़ाइलों को ग्लोब करने वाले फ़ाइलग्रुप होते हैं. -
C++ कार्रवाइयों के लिए सही कमांड लाइन जनरेट करना. ऐसा करने के लिए,
CcToolchainConfigInfo
provider का इस्तेमाल किया जाता है. इसकी जानकारी यहां दी गई है.
C++ टूलचेन को कॉन्फ़िगर करने के लिए, toolchain_config
एट्रिब्यूट का इस्तेमाल करें.
C++ टूलचेन कॉन्फ़िगरेशन और टूलचेन चुनने से जुड़े दस्तावेज़ के बारे में ज़्यादा जानकारी के लिए, यह
पेज
भी देखें.
tags = ["manual"]
का इस्तेमाल करें, ताकि bazel build //...
को शुरू करते समय टूलचेन को बिना वजह न बनाया और कॉन्फ़िगर न किया जाए
तर्क
विशेषताएं | |
---|---|
name |
नाम; ज़रूरी है इस टारगेट के लिए यूनीक नाम. |
all_files
|
लेबल; ज़रूरी है cc_toolchain के सभी आर्टफ़ैक्ट का कलेक्शन. इन आर्टफ़ैक्ट को, rules_cc से जुड़ी सभी कार्रवाइयों के लिए इनपुट के तौर पर जोड़ा जाएगा. हालांकि, उन कार्रवाइयों के लिए ऐसा नहीं किया जाएगा जो नीचे दिए गए एट्रिब्यूट से आर्टफ़ैक्ट के ज़्यादा सटीक सेट का इस्तेमाल कर रही हैं. Bazel यह मानता है किall_files , आर्टफ़ैक्ट उपलब्ध कराने वाले अन्य सभी एट्रिब्यूट का सुपरसेट है.उदाहरण के लिए, लिंकस्टैंप कंपाइलेशन के लिए कंपाइल और लिंक, दोनों फ़ाइलों की ज़रूरत होती है. इसलिए, यह all_files लेता है.
|
ar_files
|
लेबल; डिफ़ॉल्ट वैल्यू संग्रहित करने की कार्रवाइयों के लिए ज़रूरी सभी cc_toolchain आर्टफ़ैक्ट का कलेक्शन. |
as_files
|
लेबल; डिफ़ॉल्ट वैल्यू असेंबली की कार्रवाइयों के लिए ज़रूरी सभी cc_toolchain आर्टफ़ैक्ट का कलेक्शन. |
compiler_files
|
लेबल; ज़रूरी है कंपाइल करने की कार्रवाइयों के लिए ज़रूरी सभी cc_toolchain आर्टफ़ैक्ट का कलेक्शन. |
compiler_files_without_includes
|
लेबल; डिफ़ॉल्ट वैल्यू |
coverage_files
|
लेबल; डिफ़ॉल्ट वैल्यू |
dwp_files
|
लेबल; ज़रूरी है डीडब्ल्यूपी कार्रवाइयों के लिए ज़रूरी सभी cc_toolchain आर्टफ़ैक्ट का कलेक्शन. |
dynamic_runtime_lib
|
लेबल; डिफ़ॉल्ट वैल्यू इस फ़ील्ड का इस्तेमाल तब किया जाएगा, जब 'static_link_cpp_runtimes' सुविधा चालू हो और हम डिपेंडेंसी को डाइनैमिक तरीके से लिंक कर रहे हों. |
exec_transition_for_inputs
|
बूलियन; डिफ़ॉल्ट वैल्यू |
libc_top
|
लेबल; डिफ़ॉल्ट वैल्यू |
linker_files
|
लेबल; ज़रूरी है कार्रवाइयों को लिंक करने के लिए ज़रूरी सभी cc_toolchain आर्टफ़ैक्ट का कलेक्शन. |
module_map
|
लेबल; डिफ़ॉल्ट वैल्यू |
objcopy_files
|
लेबल; ज़रूरी है objcopy कार्रवाइयों के लिए ज़रूरी सभी cc_toolchain आर्टफ़ैक्ट का कलेक्शन. |
static_runtime_lib
|
लेबल; डिफ़ॉल्ट वैल्यू इसका इस्तेमाल तब किया जाएगा, जब 'static_link_cpp_runtimes' सुविधा चालू हो और हम डिपेंडेंसी को स्टैटिक तौर पर लिंक कर रहे हों. |
strip_files
|
लेबल; ज़रूरी है स्ट्रिप ऐक्शन के लिए ज़रूरी सभी cc_toolchain आर्टफ़ैक्ट का कलेक्शन. |
supports_header_parsing
|
बूलियन; डिफ़ॉल्ट वैल्यू |
supports_param_files
|
बूलियन; डिफ़ॉल्ट वैल्यू |
toolchain_config
|
लेबल; ज़रूरी है cc_toolchain_config_info की जानकारी देने वाले नियम का लेबल.
|
toolchain_identifier
|
स्ट्रिंग; बदला नहीं जा सकता; डिफ़ॉल्ट वैल्यू
समस्या #5380 ठीक होने तक, |
cc_toolchain_suite
नियम का सोर्स देखेंcc_toolchain_suite(name, compatible_with, deprecation, distribs, features, licenses, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)
यह C++ टूलचेन के कलेक्शन को दिखाता है.
यह नियम इन कामों के लिए ज़िम्मेदार है:
- सभी ज़रूरी C++ टूलचेन इकट्ठा किए जा रहे हैं.
-
--cpu
और--compiler
विकल्पों के आधार पर, एक टूलचेन चुनना. ये विकल्प Bazel को पास किए जाते हैं.
C++ टूलचेन कॉन्फ़िगरेशन और टूलचेन चुनने से जुड़े दस्तावेज़ के बारे में ज़्यादा जानकारी के लिए, यह पेज भी देखें.
तर्क
विशेषताएं | |
---|---|
name |
नाम; ज़रूरी है इस टारगेट के लिए यूनीक नाम. |
toolchains
|
डिक्शनरी, स्ट्रिंग को लेबल पर मैप करती है; बदलाव नहीं किया जा सकता; ज़रूरी है "<cpu>" या "<cpu>|<compiler>" स्ट्रिंग सेcc_toolchain लेबल तक का मैप. सिर्फ़ --cpu को Bazel में पास करने पर "<cpu>" का इस्तेमाल किया जाएगा. वहीं, --cpu और --compiler , दोनों को Bazel में पास करने पर "<cpu>|<compiler>" का इस्तेमाल किया जाएगा. उदाहरण:
cc_toolchain_suite( name = "toolchain", toolchains = { "piii|gcc": ":my_cc_toolchain_for_piii_using_gcc", "piii": ":my_cc_toolchain_for_piii_using_default_compiler", }, ) |