नियम
- cc_binary
- cc_import
- cc_library
- cc_proto_library
- fdo_prefetch_hints
- fdo_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, 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 के साथ जोड़ा जाता है और इस टारगेट के लिए कंपाइल कमांड लाइन में जोड़ा जाता है,
सभी नियम लागू कर सकते हैं. बहुत सावधान रहें, क्योंकि
दूर तक पहुंचने के लिए. संदेह होने पर, 'तय करें' वैल्यू
इसके बजाय, local_defines का इस्तेमाल करें.
|
includes
|
"वैरिएबल बनाएं" विकल्प पर निर्भर करता है.
हर स्ट्रिंग, हेडर, srcs या 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, 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 a 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, )
से लिंक किया जा रहा है यूनिक्स पर:
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, )
तर्क
विशेषताएं | |
---|---|
name |
इस टारगेट के लिए यूनीक नाम. |
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, 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)
हेडर को शामिल करने की जांच करना
बिल्ड में इस्तेमाल की जाने वाली सभी हेडर फ़ाइलों का एलान, hdrs
में किया जाना चाहिए या
cc_*
में से 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 | फ़ू.ह बार.ह |
bar.h | Bar-impl.h baz.h |
बार-इंप्लि.एच | बार.ह बाज़.एच |
bar.cc | बार.ह बार-इंप्ल.ह बाज़.एच |
baz.h | बाज़-इंप्ल॰एच |
बाज़-इंप्ल॰एच | baz.h |
baz.cc | बाज़.ह बाज़-इंप्ल.एच |
शामिल किए जाने की जांच के नियम सिर्फ़ सीधे तौर पर
शामिल किए गए हैं. ऊपर दिए गए उदाहरण में, foo.cc
की अनुमति है
bar.h
शामिल है, जिसमें baz.h
शामिल हो सकता है, जो
baz-impl.h
को शामिल करने की अनुमति है. तकनीकी रूप से,
एक .cc
फ़ाइल को कंपाइल करने में, कोई भी हेडर शामिल हो सकता है
फ़ाइल को hdrs
में या srcs
में
ट्रांज़िटिव deps
बंद स्थिति में कोई भी cc_library
. तय सीमा में
इस केस में कंपाइलर baz.h
और baz-impl.h
को पढ़ सकता है
foo.cc
को कंपाइल करते समय, लेकिन foo.cc
को
#include "baz.h"
शामिल है. इसके लिए
अनुमति है, baz
को deps
में जोड़ना ज़रूरी है
foo
महीने में से.
माफ़ करें, फ़िलहाल Basel को डायरेक्ट और ट्रांज़िट के बीच फ़र्क़ नहीं पड़ता
शामिल नहीं किया जा सकता, इसलिए यह ऐसे गड़बड़ी मामलों का पता नहीं लगा सकता जहां किसी फ़ाइल में गैर-कानूनी रूप से
हेडर होना चाहिए, जिसे सिर्फ़ ट्रांज़िट के दौरान शामिल करने की अनुमति हो. उदाहरण के लिए,
अगर ऊपर दिए गए उदाहरण में, सीधे तौर पर foo.cc
की शिकायत की गई है, तो बेज़ल शिकायत नहीं करेंगे
baz.h
शामिल है. ऐसा करना गैर-कानूनी होगा, क्योंकि foo
सीधे तौर पर baz
पर निर्भर नहीं करता है. फ़िलहाल, कोई गड़बड़ी नहीं हुई है
लेकिन इस तरह की गड़बड़ी की जांच करने की सुविधा आने वाले समय में जोड़ी जा सकती है.
तर्क
विशेषताएं | |
---|---|
name |
इस टारगेट के लिए यूनीक नाम. |
deps
|
ये |
srcs
|
सभी
सभी अगर किसी नियम का नाम
अनुमति वाले
...और उन फ़ाइलों को बनाने वाले किसी भी नियम की जानकारी शामिल कर सकते हैं. अलग-अलग एक्सटेंशन, अलग-अलग प्रोग्रामिंग भाषाओं को gcc कन्वेंशन के मुताबिक होना चाहिए. |
hdrs
|
यह हेडर फ़ाइलों का एलान करने के लिए सबसे ज़्यादा प्राथमिकता दी जाती है
लाइब्रेरी के इंटरफ़ेस के बारे में बताता है. इन हेडर को
का इस्तेमाल, इस नियम में मौजूद सोर्स से या अलग-अलग नियमों के तहत किया जा सकता है.
ऐसे हेडर जिन्हें इस लाइब्रेरी के क्लाइंट द्वारा शामिल नहीं किया जाना चाहिए
इसके बजाय, |
additional_compiler_inputs
|
|
additional_linker_inputs
|
उदाहरण के लिए, कंपाइल की गई Windows .res फ़ाइलों को यहां एम्बेड किया जा सकता है, ताकि उन्हें बाइनरी टारगेट. |
alwayslink
|
srcs , भले ही कुछ में बाइनरी से रेफ़र किया गया कोई सिंबल मौजूद न हो.
यह तब उपयोगी होता है, जब आपके कोड को स्पष्ट रूप से कोड द्वारा कॉल नहीं किया जाता है
बाइनरी, जैसे कि अगर आपका कोड कुछ कॉलबैक पाने के लिए रजिस्टर होता है
कुछ सेवाओं ने उपलब्ध कराया है.
अगर हमेशा लिंक Windows पर VS 2017 के साथ काम नहीं करता है, तो इसकी वजह से आम समस्या, कृपया अपने VS 2017 को सबसे नए वर्शन में अपग्रेड करें. |
copts
|
इस एट्रिब्यूट की हर स्ट्रिंग, दिए गए क्रम में
अगर पैकेज, सुविधा का एलान करता है
|
defines
|
-D के साथ जोड़ा जाता है और इस टारगेट के लिए कंपाइल कमांड लाइन में जोड़ा जाता है,
सभी नियम लागू कर सकते हैं. बहुत सावधान रहें, क्योंकि
दूर तक पहुंचने के लिए. संदेह होने पर, 'तय करें' वैल्यू
इसके बजाय, local_defines का इस्तेमाल करें.
|
implementation_deps
|
deps , हेडर और इन लाइब्रेरी के पाथ (और उनके सभी
ट्रांज़िटिव डिप) का इस्तेमाल सिर्फ़ इस लाइब्रेरी को कंपाइल करने के लिए किया जाता है, न कि उन लाइब्रेरी के लिए जिन्हें
निर्भर है. implementation_deps के साथ तय की गई लाइब्रेरी अब भी इसमें लिंक हैं
इस लाइब्रेरी पर निर्भर बाइनरी टारगेट.
फ़िलहाल, इसका इस्तेमाल cc_लाइब्रेरी तक सीमित किया गया है और उसे फ़्लैग किया गया है
|
include_prefix
|
अगर नीति को सेट किया जाता है, तो इस नियम के इससे पहले |
includes
|
"वैरिएबल बनाएं" विकल्प पर निर्भर करता है.
हर स्ट्रिंग, हेडर, srcs या 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++ कोड जनरेट करने के नियम तय करें.
|
fdo_prefetch_hints
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
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
|
"वैरिएबल बनाएं" विकल्प पर निर्भर करता है.
हर स्ट्रिंग, हेडर, srcs या 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
एट्रिब्यूट का इस्तेमाल करें.
इसे भी देखें
पेज
पढ़ें.
टूलचेन को बनाने और कॉन्फ़िगर होने से रोकने के लिए, tags = ["manual"]
का इस्तेमाल करें
bazel build //...
का इस्तेमाल करते समय ग़ैर-ज़रूरी नहीं
तर्क
विशेषताएं | |
---|---|
name |
इस टारगेट के लिए यूनीक नाम. |
all_files
|
all_files एक सुपरसेट है
आर्टफ़ैक्ट देने वाले दूसरे सभी एट्रिब्यूट शामिल हैं.उदाहरण के लिए, linkstamp को कंपाइल करना ज़रूरी है. इसके लिए,
और लिंक फ़ाइलें, इसलिए इसमें all_files लगता है).
|
ar_files
|
संग्रहित करने की कार्रवाइयों के लिए, सभी cc_toolchain आर्टफ़ैक्ट का कलेक्शन चाहिए. |
as_files
|
असेंबल करने की कार्रवाइयों के लिए सभी cc_toolchain आर्टफ़ैक्ट का कलेक्शन ज़रूरी है. |
compiler
|
toolchain_identifier एट्रिब्यूट का इस्तेमाल करें. यह पता नहीं चलेगा
के बाद
Starlark में CROSSTOOL का माइग्रेशन
और इसे इतने समय से हटा दिया जाएगा:
#7075.
इसे सेट करने पर, इसका इस्तेमाल Crosstool_config.toolchain को चुनने के लिए किया जाएगा. इसमें समय लगेगा --cpu Basel विकल्प पर प्राथमिकता. |
compiler_files
|
|
compiler_files_without_includes
|
|
coverage_files
|
|
cpu
|
इसे सेट करने पर, इसका इस्तेमाल Crosstool_config.toolchain को चुनने के लिए किया जाएगा. इसमें समय लगेगा --cpu Basel विकल्प पर प्राथमिकता. |
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++ के सभी ज़रूरी टूलचेन इकट्ठा करना.
-
--cpu
और--compiler
विकल्पों के आधार पर एक टूलचेन चुनना को भेजा गया.
इसे भी देखें पेज पढ़ें.
तर्क
विशेषताएं | |
---|---|
name |
इस टारगेट के लिए यूनीक नाम. |
toolchains
|
cc_toolchain लेबल. "<cpu>" का इस्तेमाल सिर्फ़ तब किया जाएगा, जब --cpu
बेज़ल को पास किया जाता है, और "<cpu>|<compiler>" का उपयोग तब किया जाएगा जब दोनों
--cpu और --compiler , Basel को भेज दिए गए हैं. उदाहरण:
cc_toolchain_suite( name = "toolchain", toolchains = { "piii|gcc": ":my_cc_toolchain_for_piii_using_gcc", "piii": ":my_cc_toolchain_for_piii_using_default_compiler", }, ) |