नियम
- 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 से टारगेट हटाएं और सिर्फ़ डाइनैमिक डिपेंडेंसी पर भरोसा करें. इसके अलावा, यह भी पक्का करें कि 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की मदद से किया जाता है. इसकी जानकारी यहां दी गई है.
  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 | लेबल; ज़रूरी हैdwp कार्रवाइयों के लिए ज़रूरी सभी 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",
            },
          )
           |