नियम
- cc_binary
- cc_export
- cc_library
- cc_proto_library
- fdo_mypage_hints
- fdo_profile
- प्रॉपेलर_ऑप्टिमाइज़
- 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, 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
(सिर्फ़ तब बनाया गया, जब साफ़ तौर पर अनुरोध किया गया हो): अगर फ़िक्शन चालू है, तो दूर से डिप्लॉय की गई बाइनरी को डीबग करने के लिए, डीबग की जानकारी देने वाली एक पैकेज फ़ाइल. इसके अलावा: कोई खाली फ़ाइल.
तर्क
विशेषताएं | |
---|---|
name |
इस टारगेट के लिए खास नाम. |
deps
|
ये |
srcs
|
सभी
इस नियम के अगर किसी नियम का नाम
इन
...और उन फ़ाइलों को बनाने वाले नियम. अलग-अलग एक्सटेंशन, अलग-अलग प्रोग्रामिंग भाषाओं को gcc कन्वेंशन के हिसाब से दिखाते हैं. |
additional_linker_inputs
|
उदाहरण के लिए, बाइनरी टारगेट में एम्बेड करने के लिए, कंपाइल की गई Windows .res फ़ाइलें यहां दी जा सकती हैं. |
copts
|
बाइनरी टारगेट को कंपाइल करने से पहले, इस एट्रिब्यूट की हर स्ट्रिंग को
अगर पैकेज में सुविधा
|
defines
|
-D से पहले जोड़ा गया है. साथ ही, इस टारगेट पर कंपाइल करने के लिए कमांड लाइन के साथ-साथ, इससे जुड़े हर नियम में इसे जोड़ा जाता है. बहुत सावधानी बरतें, क्योंकि हो सकता है कि इसका असर लंबे समय तक रहे. संदिग्ध होने पर, local_defines में वैल्यू तय करें.
|
includes
|
"वैरिएबल बनाएं" विकल्प के तहत बदलाव करें.
हर स्ट्रिंग को हेडर को src या hdrs में जोड़ा जाना चाहिए, नहीं तो कंपाइलेशन सैंडबॉक्स (डिफ़ॉल्ट) होने पर वे निर्भर नियमों में उपलब्ध नहीं होंगे. |
linkopts
|
LINKOPTS में जोड़ दिया जाता है.
इस सूची का हर ऐसा एलिमेंट जो |
linkshared
|
linkshared=True शामिल करें. डिफ़ॉल्ट रूप से, यह विकल्प बंद होता है.
इस फ़्लैग की मौजूदगी का मतलब है कि
अगर आप |
linkstatic
|
cc_binary और
cc_test के लिए: बाइनरी को स्टैटिक
मोड में लिंक करें. cc_library.linkstatic के लिए नीचे देखें.
डिफ़ॉल्ट रूप से, यह विकल्प
अगर इसे चालू किया गया है और यह एक बाइनरी या टेस्ट है, तो जब भी संभव हो, इस विकल्प से बिल्ड टूल को एक्ज़ीक्यूटेबल को लिंक करने के लिए तीन अलग-अलग तरीके हैं:
अगर
अगर |
local_defines
|
-D से पहले जोड़ा जाता है. साथ ही, इस टारगेट के लिए कंपाइल कमांड लाइन में जोड़ा जाता है, लेकिन इसके डिपेंडेंसी में नहीं.
|
malloc
|
डिफ़ॉल्ट रूप से, C++ बाइनरी, |
nocopts
|
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, )2. शेयर की गई लाइब्रेरी को लिंक करना (यूनिक्स)
cc_import( name = "mylib", hdrs = ["mylib.h"], shared_library = "libmylib.so", )3. शेयर की गई लाइब्रेरी को इंटरफ़ेस लाइब्रेरी से लिंक करना (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 will be available for runtime shared_library = "mylib.dll", )4. शेयर की गई लाइब्रेरी को
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, )5. स्टैटिक या शेयर की गई लाइब्रेरी से लिंक करना
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, )Windows पर:
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, )
तर्क
विशेषताएं | |
---|---|
name |
इस टारगेट के लिए खास नाम. |
deps
|
deps के बारे में सामान्य टिप्पणियां देखें.
|
hdrs
|
|
alwayslink
|
अगर Windows पर, VS 2017 के साथ हमेशा लिंक काम नहीं करता है, तो किसी सामान्य समस्या की वजह से, VS 2017 को नए वर्शन पर अपग्रेड कर लें. |
interface_library
|
इन फ़ाइल टाइप का इस्तेमाल किया जा सकता है:
|
shared_library
|
इन फ़ाइल टाइप का इस्तेमाल किया जा सकता है:
|
static_library
|
इन फ़ाइल टाइप का इस्तेमाल किया जा सकता है:
|
system_provided
|
interface_library तय होना चाहिए और shared_library खाली होना चाहिए.
|
cc_library
नियम का सोर्स देखेंcc_library(name, deps, srcs, data, hdrs, 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 | foo.h Bar.h |
बार | Bar-impl.h baz.h |
बार-इंफ़ॉर्म.h | Bar.h baz.h |
बार.सीसी | Bar.h Bar-impl.h baz.h |
CANNOT TRANSLATE | baz-impl.h |
baz-impl.h | CANNOT TRANSLATE |
बाज़ार | baz.h baz-impl.h |
शामिल करने के लिए जांच के नियम सिर्फ़ सीधे तौर पर
शामिल करने पर लागू होते हैं. ऊपर दिए गए उदाहरण में foo.cc
को bar.h
शामिल करने की अनुमति है, जिसमें baz.h
शामिल हो सकता है, जो
baz-impl.h
को शामिल करने की अनुमति है. तकनीकी रूप से,
.cc
फ़ाइल के कंपाइलेशन में, कुछ समय के लिए
hdrs
या srcs
की कोई भी हेडर फ़ाइल,
ट्रांज़िटिव deps
बंद हो सकती है. इस मामले में, कंपाइलर foo.cc
को कंपाइल करते समय baz.h
और baz-impl.h
पढ़ सकता है, लेकिन foo.cc
में #include "baz.h"
नहीं होना चाहिए. ऐसा करने के लिए, baz
को foo
के deps
में जोड़ना ज़रूरी है.
बैजल, शामिल किए जाने की जांच के नियमों को लागू करने के लिए, टूलटिप सहायता पर निर्भर करता है.
layering_check
की सुविधा को टूलचेन की मदद से बनाया जाना चाहिए. साथ ही, इसे साफ़ तौर पर अनुरोध किया जाना चाहिए. उदाहरण के लिए, --features=layering_check
कमांड लाइन फ़्लैग या package
फ़ंक्शन के features
पैरामीटर का इस्तेमाल किया जाए. Bazel से मिले टूलचेन
इस सुविधा के साथ सिर्फ़ Unix और macOS पर काम करते हैं.
तर्क
विशेषताएं | |
---|---|
name |
इस टारगेट के लिए खास नाम. |
deps
|
ये |
srcs
|
सभी
इस नियम के अगर किसी नियम का नाम
इन
...और उन फ़ाइलों को बनाने वाले नियम. अलग-अलग एक्सटेंशन, अलग-अलग प्रोग्रामिंग भाषाओं को gcc कन्वेंशन के हिसाब से दिखाते हैं. |
hdrs
|
यह लाइब्रेरी के इंटरफ़ेस के बारे में जानकारी देने वाली, हेडर फ़ाइलों के बारे में जानकारी देने के लिए,
सबसे ज़्यादा पसंदीदा जगह है. इन हेडर को
इस नियम या इससे जुड़े नियमों के तहत सोर्स में शामिल करने के लिए उपलब्ध कराया जाएगा.
अगर इस लाइब्रेरी के क्लाइंट को हेडर का इस्तेमाल नहीं करना है, तो
|
alwayslink
|
srcs में मौजूद फ़ाइलों के लिए, सभी ऑब्जेक्ट फ़ाइलों से लिंक करेगा, भले ही कुछ में बाइनरी से रेफ़र किया गया कोई भी निशान न हो.
अगर आपके कोड को बाइनरी कोड से साफ़ तौर पर कॉल नहीं किया जाता है, तो यह काम का होता है. उदाहरण के लिए, अगर आपका कोड कुछ सेवा से मिले कुछ कॉलबैक पाने के लिए रजिस्टर होता है.
अगर Windows पर, VS 2017 के साथ हमेशा लिंक काम नहीं करता है, तो किसी सामान्य समस्या की वजह से, VS 2017 को नए वर्शन पर अपग्रेड कर लें. |
copts
|
बाइनरी टारगेट को कंपाइल करने से पहले, इस एट्रिब्यूट की हर स्ट्रिंग को
अगर पैकेज में सुविधा
|
defines
|
-D से पहले जोड़ा गया है. साथ ही, इस टारगेट पर कंपाइल करने के लिए कमांड लाइन के साथ-साथ, इससे जुड़े हर नियम में इसे जोड़ा जाता है. बहुत सावधानी बरतें, क्योंकि हो सकता है कि इसका असर लंबे समय तक रहे. संदिग्ध होने पर, local_defines में वैल्यू तय करें.
|
implementation_deps
|
deps
के उलट, इन लाइब्रेरी और उनके सभी ट्रांज़िटिव
पाथ के हेडर का इस्तेमाल, सिर्फ़ इस लाइब्रेरी के संग्रह के लिए किया जाता है, न कि इस पर निर्भर लाइब्रेरी के लिए. implementation_deps के साथ तय की गई लाइब्रेरी, अब भी उन बाइनरी टारगेट से लिंक की गई हैं जो इस लाइब्रेरी से जुड़ी हैं.
फ़िलहाल, इसे cc_libries तक सीमित किया गया है और इसे |
include_prefix
|
सेट होने पर, इस नियम के इस प्रीफ़िक्स को जोड़ने से पहले, |
includes
|
"वैरिएबल बनाएं" विकल्प के तहत बदलाव करें.
हर स्ट्रिंग को हेडर को src या hdrs में जोड़ा जाना चाहिए, नहीं तो कंपाइलेशन सैंडबॉक्स (डिफ़ॉल्ट) होने पर वे निर्भर नियमों में उपलब्ध नहीं होंगे. |
linkopts
|
LINKOPTS में जोड़ दिया जाता है.
इस सूची का हर ऐसा एलिमेंट जो |
linkstamp
|
base पैकेज में होनी चाहिए.
|
linkstatic
|
cc_binary और
cc_test के लिए: बाइनरी को स्टैटिक
मोड में लिंक करें. cc_library.linkstatic के लिए नीचे देखें.
डिफ़ॉल्ट रूप से, यह विकल्प
अगर इसे चालू किया गया है और यह एक बाइनरी या टेस्ट है, तो जब भी संभव हो, इस विकल्प से बिल्ड टूल को एक्ज़ीक्यूटेबल को लिंक करने के लिए तीन अलग-अलग तरीके हैं:
अगर
अगर |
local_defines
|
-D से पहले जोड़ा जाता है. साथ ही, इस टारगेट के लिए कंपाइल कमांड लाइन में जोड़ा जाता है, लेकिन इसके डिपेंडेंसी में नहीं.
|
nocopts
|
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++ कोड जनरेट किया जाता है.
|
CANNOT TRANSLATE
नियम का सोर्स देखेंfdo_prefetch_hints(name, compatible_with, deprecation, distribs, features, licenses, profile, restricted_to, tags, target_compatible_with, testonly, visibility)
एफ़डीओ के प्रीफ़ेच किए गए प्रीफ़ेच की प्रोफ़ाइल को दिखाता है जो फ़ाइल फ़ोल्डर में या तय किए गए किसी खास पाथ पर होता है. उदाहरण:
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_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
|
|
प्रोपेलर_ऑप्टिमाइज़
नियम का सोर्स देखेंpropeller_optimize(name, compatible_with, deprecation, distribs, features, ld_profile, licenses, restricted_to, tags, target_compatible_with, testonly, visibility)
फ़ाइल फ़ोल्डर में, प्रोपेलर ऑप्टिमाइज़ेशन प्रोफ़ाइल के बारे में बताता है. उदाहरण:
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, 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 से पहले जोड़ा गया है. साथ ही, इस टारगेट पर कंपाइल करने के लिए कमांड लाइन के साथ-साथ, इससे जुड़े हर नियम में इसे जोड़ा जाता है. बहुत सावधानी बरतें, क्योंकि हो सकता है कि इसका असर लंबे समय तक रहे. संदिग्ध होने पर, local_defines में वैल्यू तय करें.
|
includes
|
"वैरिएबल बनाएं" विकल्प के तहत बदलाव करें.
हर स्ट्रिंग को हेडर को src या hdrs में जोड़ा जाना चाहिए, नहीं तो कंपाइलेशन सैंडबॉक्स (डिफ़ॉल्ट) होने पर वे निर्भर नियमों में उपलब्ध नहीं होंगे. |
linkopts
|
LINKOPTS में जोड़ दिया जाता है.
इस सूची का हर ऐसा एलिमेंट जो |
linkstatic
|
cc_binary और
cc_test के लिए: बाइनरी को स्टैटिक
मोड में लिंक करें. cc_library.linkstatic के लिए नीचे देखें.
डिफ़ॉल्ट रूप से, यह विकल्प
अगर इसे चालू किया गया है और यह एक बाइनरी या टेस्ट है, तो जब भी संभव हो, इस विकल्प से बिल्ड टूल को एक्ज़ीक्यूटेबल को लिंक करने के लिए तीन अलग-अलग तरीके हैं:
अगर
अगर |
local_defines
|
-D से पहले जोड़ा जाता है. साथ ही, इस टारगेट के लिए कंपाइल कमांड लाइन में जोड़ा जाता है, लेकिन इसके डिपेंडेंसी में नहीं.
|
malloc
|
डिफ़ॉल्ट रूप से, C++ बाइनरी, |
nocopts
|
COPTS को
COPTS से हटा दिया जाएगा. इसमें, नियम के ऑप्टस एट्रिब्यूट में दी गई वैल्यू भी शामिल हैं.
इस एट्रिब्यूट की शायद ही कभी ज़रूरत पड़े.
|
stamp
|
स्टैंपर की गई बाइनरी को तब तक फिर से नहीं बनाया जाता है, जब तक उनकी डिपेंडेंसी नहीं बदलती. |
win_def_file
|
इस एट्रिब्यूट का इस्तेमाल सिर्फ़ तब किया जाना चाहिए, जब Windows टारगेट किया गया प्लैटफ़ॉर्म हो. इसका इस्तेमाल, शेयर की गई लाइब्रेरी को लिंक करने के दौरान सिंबल एक्सपोर्ट करने के लिए किया जा सकता है. |
cc_toolchain
नियम का सोर्स देखेंcc_toolchain(name, all_files, ar_files, as_files, compatible_with, compiler, compiler_files, compiler_files_without_includes, coverage_files, cpu, 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
सेवा देने वाली कंपनी की मदद से किया जाता है. इसकी जानकारी नीचे दी गई है.
C++ टूलचेन कॉन्फ़िगर करने के लिए, toolchain_config
एट्रिब्यूट का इस्तेमाल करें.
इसके अलावा, C++ टूल कॉन्फ़िगरेशन और टूलचेन चुनने से जुड़े दस्तावेज़ों के लिए, यह
पेज
भी देखें.
bazel build //...
का इस्तेमाल करते समय, अनचाहे और अनचाहे तरीके से
कॉन्फ़िगर की गई चेन को रोकने के लिए, tags = ["manual"]
का इस्तेमाल करें
तर्क
विशेषताएं | |
---|---|
name |
इस टारगेट के लिए खास नाम. |
all_files
|
all_files , आर्टफ़ैक्ट से जुड़े दूसरे सभी एट्रिब्यूट की सुपरसेट है (जैसे कि linksamp कंपाइलेशन के लिए कंपाइल और लिंक, दोनों फ़ाइलें ज़रूरी हैं, इसलिए इसमें all_files लगते हैं).
|
ar_files
|
संग्रह की कार्रवाइयों के लिए ज़रूरी सभी cc_toolchain कलाकृतियों का संग्रह. |
as_files
|
असेंबली कार्रवाइयों के लिए ज़रूरी सभी cc_toolchain आर्टफ़ैक्ट का संग्रह. |
compiler
|
toolchain_identifier एट्रिब्यूट का इस्तेमाल करें.
CROSSTOOL के
स्टारलार्क
में माइग्रेट किए जाने
के बाद यह ग़ैर-ज़रूरी आवाज़ें कम कर देगा. साथ ही, इसे
#7075 तक हटा दिया जाएगा.
अगर यह नीति सेट है, तो उसे क्रॉसटूल_config.toolchain चुनने में इस्तेमाल किया जाएगा. इसे --सीपीयू बेज़ल विकल्प के मुकाबले प्राथमिकता दी जाएगी. |
compiler_files
|
|
compiler_files_without_includes
|
|
coverage_files
|
|
cpu
|
अगर यह नीति सेट है, तो उसे क्रॉसटूल_config.toolchain चुनने में इस्तेमाल किया जाएगा. इसे --सीपीयू बेज़ल विकल्प के मुकाबले प्राथमिकता दी जाएगी. |
dwp_files
|
|
dynamic_runtime_lib
|
इसका इस्तेमाल 'static_link_cpp_runtimes' सुविधा के चालू होने पर, और डिपेंडेंसी को डाइनैमिक तौर पर लिंक किया जाएगा. |
exec_transition_for_inputs
|
|
libc_top
|
|
linker_files
|
|
module_map
|
|
objcopy_files
|
|
static_runtime_lib
|
इसका इस्तेमाल तब किया जाएगा, जब 'static_link_cpp_runtimes' सुविधा चालू हो और हम डिपेंडेंसी को स्टैटिक तौर पर लिंक कर रहे हों. |
strip_files
|
|
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++ टूलचेन इकट्ठा करना.
-
Bazel को दिए गए
--cpu
और--compiler
विकल्पों के आधार पर, एक टूल चेन चुनें.
इसके अलावा, C++ टूल कॉन्फ़िगरेशन और टूलचेन चुनने से जुड़े दस्तावेज़ों के लिए, यह पेज भी देखें.
तर्क
विशेषताएं | |
---|---|
name |
इस टारगेट के लिए खास नाम. |
toolchains
|
cc_toolchain लेबल से दिखाया गया मैप. अगर "--cpu ," और "--compiler " दोनों को "Bel" में पास किया जाता है, तो "<cpu>" का इस्तेमाल --cpu को सिर्फ़ तब किया जाएगा, जब "<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", }, ) |