กฎ
- 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 จะมีไฟล์แพ็กเกจข้อมูลการแก้ไขข้อบกพร่อง ที่เหมาะสำหรับการแก้ไขข้อบกพร่องไบนารีที่ติดตั้งใช้งานจากระยะไกล หรือไฟล์ว่าง
อาร์กิวเมนต์
| Attributes | |
|---|---|
| name | ชื่อ (ต้องระบุ) ชื่อที่ไม่ซ้ำกันสำหรับเป้าหมายนี้ | 
| deps | รายการป้ายกำกับ ค่าเริ่มต้นคือ  ซึ่งอาจเป็นเป้าหมาย  | 
| srcs | รายการป้ายกำกับ ค่าเริ่มต้นคือ  ระบบจะคอมไพล์ไฟล์  ระบบจะไม่คอมไพล์ไฟล์  ต้องมีการกล่าวถึงไฟล์  หากชื่อของกฎอยู่ใน  
             
 ...และกฎใดๆ ที่สร้างไฟล์เหล่านั้น ส่วนขยายที่แตกต่างกันจะแสดงถึงภาษาโปรแกรมที่แตกต่างกันตาม ข้อตกลงของ gcc | 
| additional_linker_inputs | รายการป้ายกำกับ ค่าเริ่มต้นคือ  เช่น คุณระบุไฟล์ .res ของ Windows ที่คอมไพล์แล้วได้ที่นี่เพื่อฝังใน เป้าหมายไบนารี | 
| copts | รายการสตริง ค่าเริ่มต้นคือ  
            ระบบจะเพิ่มสตริงแต่ละรายการในแอตทริบิวต์นี้ตามลำดับที่ระบุไปยัง  
            หากแพ็กเกจประกาศฟีเจอร์
             | 
| defines | รายการสตริง ค่าเริ่มต้นคือ  -Dและเพิ่มลงในบรรทัดคำสั่งคอมไพล์ไปยังเป้าหมายนี้
          รวมถึงกฎทุกข้อที่ขึ้นอยู่กับเป้าหมายนี้ โปรดระมัดระวังเป็นอย่างยิ่ง เนื่องจากอาจส่งผลกระทบในวงกว้าง
          ได้ หากไม่แน่ใจ ให้เพิ่มค่าที่กำหนดไว้ในlocal_definesแทน | 
| includes | รายการสตริง ค่าเริ่มต้นคือ  
          ขึ้นอยู่กับการแทนที่ "สร้างตัวแปร"
          โดยระบบจะเพิ่ม  ต้องเพิ่มส่วนหัวลงใน srcs หรือ hdrs มิฉะนั้นกฎที่ขึ้นต่อกันจะใช้ส่วนหัวไม่ได้เมื่อมีการแซนด์บ็อกซ์การคอมไพล์ (ค่าเริ่มต้น) | 
| link_extra_lib | ป้ายกำกับ ค่าเริ่มต้นคือ  
            โดยค่าเริ่มต้น ไบนารี C++ จะลิงก์กับ  | 
| linkopts | รายการสตริง ค่าเริ่มต้นคือ  LINKOPTSก่อน
          ลิงก์เป้าหมายไบนารี
            องค์ประกอบแต่ละรายการในรายการนี้ที่ไม่ได้ขึ้นต้นด้วย  | 
| linkshared | บูลีน กำหนดค่าไม่ได้ ค่าเริ่มต้นคือ  linkshared=Trueในกฎ โดยค่าเริ่มต้น
        ตัวเลือกนี้จะปิดอยู่
          การมีแฟล็กนี้หมายความว่าการลิงก์เกิดขึ้นพร้อมกับแฟล็ก  
          หากคุณระบุทั้ง  | 
| linkstatic | บูลีน ค่าเริ่มต้นคือ  cc_binaryและcc_test: ลิงก์ไบนารีในโหมด
           แบบคงที่ สำหรับcc_library.linkstaticโปรดดูด้านล่าง
             โดยค่าเริ่มต้น ตัวเลือกนี้จะเปิดอยู่สำหรับ  
             หากเปิดใช้และเป็นไบนารีหรือการทดสอบ ตัวเลือกนี้จะบอกเครื่องมือบิลด์ให้ลิงก์ใน
              การลิงก์ไฟล์ที่เรียกใช้งานได้มี 3 วิธีหลักๆ ดังนี้ 
 
           แอตทริบิวต์  
           หาก  | 
| local_defines | รายการสตริง ค่าเริ่มต้นคือ  -Dและเพิ่มลงในบรรทัดคำสั่งคอมไพล์สำหรับเป้าหมายนี้
          แต่จะไม่เพิ่มลงในเป้าหมายที่ขึ้นอยู่กับเป้าหมายนี้ | 
| malloc | ป้ายกำกับ ค่าเริ่มต้นคือ  
            โดยค่าเริ่มต้น ไบนารี C++ จะลิงก์กับ  | 
| nocopts | สตริง ค่าเริ่มต้นคือ  COPTSที่มีอยู่ก่อนแล้วซึ่งตรงกับนิพจน์ทั่วไปนี้
          (รวมถึงค่าที่ระบุอย่างชัดเจนในแอตทริบิวต์ copts ของกฎ) จะถูกนำออกจากCOPTSเพื่อวัตถุประสงค์ในการคอมไพล์กฎนี้
          คุณแทบจะไม่ต้องใช้แอตทริบิวต์นี้ | 
| stamp | จำนวนเต็ม ค่าเริ่มต้นคือ  
 ระบบจะไม่สร้างไบนารีที่ประทับเวลาใหม่ เว้นแต่ว่ามีการเปลี่ยนแปลงในทรัพยากร Dependency | 
| 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", )
อาร์กิวเมนต์
| Attributes | |
|---|---|
| name | ชื่อ (ต้องระบุ) ชื่อที่ไม่ซ้ำกันสำหรับเป้าหมายนี้ | 
| deps | รายการป้ายกำกับ ค่าเริ่มต้นคือ  depsที่แอตทริบิวต์ทั่วไปที่กำหนดโดย
        กฎการสร้างส่วนใหญ่ | 
| hdrs | รายการป้ายกำกับ ค่าเริ่มต้นคือ  | 
| alwayslink | บูลีน ค่าเริ่มต้นคือ  หาก alwayslink ใช้ไม่ได้กับ VS 2017 ใน Windows นั่นเป็นเพราะปัญหาที่ทราบ โปรดอัปเกรด 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 หรือ
  srcs ของกฎ cc_* มีการบังคับใช้กฎข้อนี้แล้ว
  สำหรับกฎ cc_library ส่วนหัวใน hdrs จะประกอบด้วยอินเทอร์เฟซสาธารณะของ
  ไลบรารี และสามารถรวมได้โดยตรงจากทั้งไฟล์ใน hdrs และ
  srcs ของไลบรารีเอง รวมถึงจากไฟล์ใน hdrs และ
  srcs ของกฎ cc_* ที่แสดงไลบรารีใน 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 ซึ่งอาจรวม baz.h ซึ่งใน
  ทางกลับกันก็ได้รับอนุญาตให้รวม baz-impl.h ในทางเทคนิค การ
  คอมไพล์ไฟล์ .cc อาจรวมไฟล์ส่วนหัวใดก็ได้ใน hdrs หรือ srcs ใน
  cc_library ใดก็ได้ในทรานซิทีฟ deps ปิด ในกรณีนี้ คอมไพเลอร์อาจอ่าน baz.h และ baz-impl.h เมื่อคอมไพล์ foo.cc แต่ foo.cc ต้องไม่มี #include "baz.h" หากต้องการอนุญาต
  ให้ทำเช่นนั้นได้ คุณต้องเพิ่ม baz ลงใน deps
  ของ foo
  Bazel ต้องอาศัยการรองรับ Toolchain เพื่อบังคับใช้กฎการตรวจสอบการรวม
  เครื่องมือต้องรองรับlayering_checkและต้องขออย่างชัดเจน เช่น ผ่านแฟล็กบรรทัดคำสั่ง --features=layering_check หรือพารามิเตอร์ features ของฟังก์ชัน package Toolchain
  ที่ Bazel จัดเตรียมให้รองรับฟีเจอร์นี้กับ clang ใน Unix และ macOS เท่านั้น
อาร์กิวเมนต์
| Attributes | |
|---|---|
| name | ชื่อ (ต้องระบุ) ชื่อที่ไม่ซ้ำกันสำหรับเป้าหมายนี้ | 
| deps | รายการป้ายกำกับ ค่าเริ่มต้นคือ  ซึ่งอาจเป็นเป้าหมาย  | 
| srcs | รายการป้ายกำกับ ค่าเริ่มต้นคือ  ระบบจะคอมไพล์ไฟล์  ระบบจะไม่คอมไพล์ไฟล์  ต้องมีการกล่าวถึงไฟล์  หากชื่อของกฎอยู่ใน  
             
 ...และกฎใดๆ ที่สร้างไฟล์เหล่านั้น ส่วนขยายที่แตกต่างกันจะแสดงถึงภาษาโปรแกรมที่แตกต่างกันตาม ข้อตกลงของ gcc | 
| hdrs | รายการป้ายกำกับ ค่าเริ่มต้นคือ  นี่คือตำแหน่งที่แนะนำอย่างยิ่งสำหรับการประกาศไฟล์ส่วนหัวที่
             อธิบายอินเทอร์เฟซของไลบรารี ระบบจะทำให้ส่วนหัวเหล่านี้
             พร้อมใช้งานเพื่อให้แหล่งที่มาในกฎนี้หรือในกฎที่ขึ้นอยู่กับกฎนี้รวมไว้
             ส่วนหัวที่ไม่ได้มีไว้ให้ไคลเอ็นต์ของไลบรารีนี้รวมไว้ควรแสดงอยู่ในแอตทริบิวต์  | 
| additional_compiler_inputs | รายการป้ายกำกับ ค่าเริ่มต้นคือ  | 
| additional_linker_inputs | รายการป้ายกำกับ ค่าเริ่มต้นคือ  เช่น คุณระบุไฟล์ .res ของ Windows ที่คอมไพล์แล้วได้ที่นี่เพื่อฝังใน เป้าหมายไบนารี | 
| alwayslink | บูลีน ค่าเริ่มต้นคือ  srcsแม้ว่าบางไฟล์จะไม่มีสัญลักษณ์ที่ไบนารีอ้างอิงก็ตาม
        ซึ่งจะมีประโยชน์ในกรณีที่โค้ดไม่ได้เรียกอย่างชัดเจนโดยโค้ดใน
        ไบนารี เช่น หากโค้ดลงทะเบียนเพื่อรับการเรียกกลับบางอย่าง
        ที่ได้รับจากบริการบางอย่างหาก alwayslink ใช้ไม่ได้กับ VS 2017 ใน Windows นั่นเป็นเพราะปัญหาที่ทราบ โปรดอัปเกรด VS 2017 เป็นเวอร์ชันล่าสุด | 
| copts | รายการสตริง ค่าเริ่มต้นคือ  
            ระบบจะเพิ่มสตริงแต่ละรายการในแอตทริบิวต์นี้ตามลำดับที่ระบุไปยัง  
            หากแพ็กเกจประกาศฟีเจอร์
             | 
| defines | รายการสตริง ค่าเริ่มต้นคือ  -Dและเพิ่มลงในบรรทัดคำสั่งคอมไพล์ไปยังเป้าหมายนี้
          รวมถึงกฎทุกข้อที่ขึ้นอยู่กับเป้าหมายนี้ โปรดระมัดระวังเป็นอย่างยิ่ง เนื่องจากอาจส่งผลกระทบในวงกว้าง
          ได้ หากไม่แน่ใจ ให้เพิ่มค่าที่กำหนดไว้ใน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โปรดดูด้านล่าง
             โดยค่าเริ่มต้น ตัวเลือกนี้จะเปิดอยู่สำหรับ  
             หากเปิดใช้และเป็นไบนารีหรือการทดสอบ ตัวเลือกนี้จะบอกเครื่องมือบิลด์ให้ลิงก์ใน
              การลิงก์ไฟล์ที่เรียกใช้งานได้มี 3 วิธีหลักๆ ดังนี้ 
 
           แอตทริบิวต์  
           หาก  | 
| 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 สร้างโค้ด C++ จากไฟล์ .proto
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",
)
อาร์กิวเมนต์
| Attributes | |
|---|---|
| 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 ไม่ได้ควบคุมว่าจะส่งออกสัญลักษณ์ใด แต่จะใช้เฉพาะสิ่งที่คาดว่าจะส่งออกเพื่อแสดงข้อผิดพลาดในระยะการวิเคราะห์ หากไลบรารีที่แชร์ 2 รายการส่งออกเป้าหมายเดียวกัน
ระบบจะถือว่าการขึ้นต่อกันโดยตรงทั้งหมดของ cc_shared_library มีการส่งออก ดังนั้น Bazel จึงถือว่า foo ได้รับการส่งออกโดย foo_shared ในระหว่างการวิเคราะห์ foo_shared ไม่ได้ส่งออก baz
 ระบบจะถือว่าเป้าหมายทุกรายการที่ exports_filter
 ตรงกันจะได้รับการส่งออกด้วย
cc_library ทุกรายการในตัวอย่างควรปรากฏใน cc_shared_library ไม่เกิน 1 รายการ หากต้องการลิงก์ baz เข้ากับ
bar_shared ด้วย เราจะต้องเพิ่ม
tags = ["LINKABLE_MORE_THAN_ONCE"] ไปยัง baz
เนื่องจากแอตทริบิวต์ shared_lib_name ไฟล์ที่สร้างโดย
bar_shared จะมีชื่อเป็น bar.so ซึ่งแตกต่างจากชื่อ libbar.so ที่จะเป็นชื่อเริ่มต้นใน Linux
ข้อผิดพลาด
Two shared libraries in dependencies export the same symbols.
เหตุการณ์นี้จะเกิดขึ้นเมื่อใดก็ตามที่คุณสร้างเป้าหมายที่มีการอ้างอิง 2 รายการที่แตกต่างกันcc_shared_libraryซึ่งส่งออกเป้าหมายเดียวกัน หากต้องการแก้ไขปัญหานี้ คุณต้องหยุดการส่งออกไลบรารีในcc_shared_libraryการอ้างอิงรายการใดรายการหนึ่ง
Two shared libraries in dependencies link the same library statically
กรณีนี้จะเกิดขึ้นเมื่อใดก็ตามที่คุณสร้าง cc_shared_library ใหม่ที่มีการอ้างอิง cc_shared_library 2 รายการที่แตกต่างกันซึ่งลิงก์เป้าหมายเดียวกันแบบคงที่
คล้ายกับข้อผิดพลาดในการส่งออก
วิธีแก้ไขปัญหานี้วิธีหนึ่งคือการหยุดลิงก์ไลบรารีไปยังหนึ่งใน
cc_shared_library Dependency ในขณะเดียวกัน ผู้ที่ยังคงลิงก์อยู่
ต้องส่งออกไลบรารีเพื่อให้ผู้ที่ไม่ได้ลิงก์ยังคงมองเห็น
สัญลักษณ์ อีกวิธีหนึ่งคือการดึงไลบรารีที่สามซึ่งส่งออกเป้าหมาย
วิธีที่ 3 คือการแท็กผู้กระทำผิดcc_libraryด้วยLINKABLE_MORE_THAN_ONCE
แต่การแก้ไขนี้ไม่ควรเกิดขึ้นบ่อยนัก และคุณควรตรวจสอบให้แน่ใจว่าcc_libraryปลอดภัยที่จะลิงก์มากกว่า 1 ครั้ง
'//foo:foo' is already linked statically in '//bar:bar' but not exported`
ซึ่งหมายความว่าไลบรารีใน Transitive Closure ของ deps สามารถเข้าถึงได้
โดยไม่ต้องผ่านการอ้างอิง cc_shared_library รายการใดรายการหนึ่ง แต่มีการลิงก์
ไปยัง cc_shared_library อื่นใน dynamic_deps อยู่แล้วและไม่ได้
ส่งออก
วิธีแก้คือส่งออกจาก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 หากไลบรารีแบบไดนามิกที่คอมไพล์ล่วงหน้านี้เป็นทรัพยากร Dependency ของcc_librariesรายการใดรายการหนึ่ง cc_libraryนั้นจะต้องขึ้นต่อกันกับไลบรารีดังกล่าวโดยตรง
Trying to export a library already exported by a different shared library
คุณจะเห็นข้อผิดพลาดนี้หากในกฎปัจจุบัน คุณอ้างว่าต้องการส่งออกเป้าหมายที่การอ้างอิงแบบไดนามิกรายการใดรายการหนึ่งของคุณส่งออกอยู่แล้ว
หากต้องการแก้ไขปัญหานี้ ให้นำเป้าหมายออกจาก deps และใช้เฉพาะเป้าหมายจาก
การอ้างอิงแบบไดนามิก หรือตรวจสอบว่า exports_filter ไม่ได้จับเป้าหมายนี้
อาร์กิวเมนต์
| Attributes | |
|---|---|
| name | ชื่อ (ต้องระบุ) ชื่อที่ไม่ซ้ำกันสำหรับเป้าหมายนี้ | 
| deps | รายการป้ายกำกับ ค่าเริ่มต้นคือ  
        ระบบจะลิงก์การขึ้นต่อกันแบบทรานซิทีฟของไลบรารีของ Deps โดยตรงเหล่านี้ไปยังไลบรารีที่แชร์นี้
        ตราบใดที่  
        ในระหว่างการวิเคราะห์ การใช้กฎจะพิจารณาเป้าหมายที่ระบุใน
         
        การใช้งานจะทริกเกอร์ข้อผิดพลาดทุกครั้งที่มีการลิงก์ไลบรารีเดียวกันแบบคงที่
        ใน  | 
| additional_linker_inputs | รายการป้ายกำกับ ค่าเริ่มต้นคือ  user_link_flags | 
| dynamic_deps | รายการป้ายกำกับ ค่าเริ่มต้นคือ  cc_shared_libraryอื่นๆ ที่เป้าหมายปัจจุบันขึ้นอยู่กับ
        การติดตั้งใช้งาน  | 
| exports_filter | รายการสตริง ค่าเริ่มต้นคือ  
        ระบบจะถือว่าไลบรารีที่ใช้ร่วมกันจะส่งออกเป้าหมาย  
        โปรดทราบว่าแอตทริบิวต์นี้ไม่ได้เพิ่มขอบการอ้างอิงไปยังเป้าหมายเหล่านั้นจริงๆ แต่ เราอนุญาตให้ใช้ไวยากรณ์ต่อไปนี้ 
 
 | 
| 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
ไฟล์ข้อความที่มีป้ายกำกับของทรัพยากร Dependency แบบทรานซิทีฟของเป้าหมายที่แสดงใน
deps ซึ่งไม่ได้มีส่วนร่วมในไฟล์ออบเจ็กต์ใดๆ กับไลบรารีแบบคงที่ แต่มี
ไลบรารีแบบคงที่ แบบไดนามิก หรืออินเทอร์เฟซอย่างน้อย 1 รายการ ไลบรารีแบบคงที่ที่ได้
อาจกำหนดให้ไลบรารีเหล่านี้พร้อมใช้งานในเวลาลิงก์
linkopts
ไฟล์ข้อความที่มี linkopts ที่ผู้ใช้ระบุของ
การอ้างอิงแบบทรานซิทีฟทั้งหมดของเป้าหมายที่ระบุไว้ใน deps
สัญลักษณ์ซ้ำ
โดยค่าเริ่มต้น cc_static_library กฎจะตรวจสอบว่าไลบรารีแบบคงที่ที่ได้ไม่มีสัญลักษณ์ที่ซ้ำกัน หากมี บิลด์จะล้มเหลวพร้อมข้อความแสดงข้อผิดพลาด
ที่แสดงรายการสัญลักษณ์ที่ซ้ำกันและไฟล์ออบเจ็กต์ที่มีสัญลักษณ์เหล่านั้น
คุณปิดใช้การตรวจสอบนี้ต่อเป้าหมายหรือต่อแพ็กเกจได้โดยตั้งค่า
features = ["-symbol_check"] หรือปิดใช้ทั่วโลกผ่าน
--features=-symbol_check
การรองรับ Toolchain สำหรับ symbol_check
ชุดเครื่องมือ C++ ที่กำหนดค่าอัตโนมัติซึ่งมาพร้อมกับ Bazel รองรับฟีเจอร์
symbol_checkในทุกแพลตฟอร์ม Toolchain ที่กำหนดเองสามารถเพิ่มการรองรับ
ได้ 2 วิธีดังนี้
- การใช้การดำเนินการ ACTION_NAMES.validate_static_libraryและ การเปิดใช้ด้วยฟีเจอร์symbol_checkชุดเครื่องมือที่ตั้งค่าไว้ในการดำเนินการจะ เรียกใช้ด้วยอาร์กิวเมนต์ 2 รายการ ได้แก่ ไลบรารีแบบคงที่ที่จะตรวจสอบสัญลักษณ์ที่ซ้ำกัน และ เส้นทางของไฟล์ที่ต้องสร้างหากการตรวจสอบผ่าน
- มีsymbol_checkฟีเจอร์ที่เพิ่มแฟล็กของโปรแกรมเก็บถาวรซึ่งทำให้การดำเนินการสร้างไลบรารีแบบคงที่ล้มเหลวเนื่องจากมีสัญลักษณ์ที่ซ้ำกัน
อาร์กิวเมนต์
| Attributes | |
|---|---|
| name | ชื่อ (ต้องระบุ) ชื่อที่ไม่ซ้ำกันสำหรับเป้าหมายนี้ | 
| deps | รายการป้ายกำกับ ค่าเริ่มต้นคือ  Dependency ที่ไม่ได้ระบุไฟล์ออบเจ็กต์จะไม่รวมอยู่ในไลบรารีแบบคงที่ แต่ระบบจะรวบรวมป้ายกำกับของ Dependency เหล่านั้นไว้ในไฟล์ที่จัดทำโดย | 
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",
)
อาร์กิวเมนต์
| Attributes | |
|---|---|
| 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",
)
อาร์กิวเมนต์
| Attributes | |
|---|---|
| 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",
)
อาร์กิวเมนต์
| Attributes | |
|---|---|
| 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"
)
อาร์กิวเมนต์
| Attributes | |
|---|---|
| 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)
อาร์กิวเมนต์
| Attributes | |
|---|---|
| name | ชื่อ (ต้องระบุ) ชื่อที่ไม่ซ้ำกันสำหรับเป้าหมายนี้ | 
| deps | รายการป้ายกำกับ ค่าเริ่มต้นคือ  ซึ่งอาจเป็นเป้าหมาย  | 
| srcs | รายการป้ายกำกับ ค่าเริ่มต้นคือ  ระบบจะคอมไพล์ไฟล์  ระบบจะไม่คอมไพล์ไฟล์  ต้องมีการกล่าวถึงไฟล์  หากชื่อของกฎอยู่ใน  
             
 ...และกฎใดๆ ที่สร้างไฟล์เหล่านั้น ส่วนขยายที่แตกต่างกันจะแสดงถึงภาษาโปรแกรมที่แตกต่างกันตาม ข้อตกลงของ gcc | 
| additional_linker_inputs | รายการป้ายกำกับ ค่าเริ่มต้นคือ  เช่น คุณระบุไฟล์ .res ของ Windows ที่คอมไพล์แล้วได้ที่นี่เพื่อฝังใน เป้าหมายไบนารี | 
| copts | รายการสตริง ค่าเริ่มต้นคือ  
            ระบบจะเพิ่มสตริงแต่ละรายการในแอตทริบิวต์นี้ตามลำดับที่ระบุไปยัง  
            หากแพ็กเกจประกาศฟีเจอร์
             | 
| defines | รายการสตริง ค่าเริ่มต้นคือ  -Dและเพิ่มลงในบรรทัดคำสั่งคอมไพล์ไปยังเป้าหมายนี้
          รวมถึงกฎทุกข้อที่ขึ้นอยู่กับเป้าหมายนี้ โปรดระมัดระวังเป็นอย่างยิ่ง เนื่องจากอาจส่งผลกระทบในวงกว้าง
          ได้ หากไม่แน่ใจ ให้เพิ่มค่าที่กำหนดไว้ในlocal_definesแทน | 
| includes | รายการสตริง ค่าเริ่มต้นคือ  
          ขึ้นอยู่กับการแทนที่ "สร้างตัวแปร"
          โดยระบบจะเพิ่ม  ต้องเพิ่มส่วนหัวลงใน srcs หรือ hdrs มิฉะนั้นกฎที่ขึ้นต่อกันจะใช้ส่วนหัวไม่ได้เมื่อมีการแซนด์บ็อกซ์การคอมไพล์ (ค่าเริ่มต้น) | 
| link_extra_lib | ป้ายกำกับ ค่าเริ่มต้นคือ  
            โดยค่าเริ่มต้น ไบนารี C++ จะลิงก์กับ  | 
| linkopts | รายการสตริง ค่าเริ่มต้นคือ  LINKOPTSก่อน
          ลิงก์เป้าหมายไบนารี
            องค์ประกอบแต่ละรายการในรายการนี้ที่ไม่ได้ขึ้นต้นด้วย  | 
| linkstatic | บูลีน ค่าเริ่มต้นคือ  cc_binaryและcc_test: ลิงก์ไบนารีในโหมด
           แบบคงที่ สำหรับcc_library.linkstaticโปรดดูด้านล่าง
             โดยค่าเริ่มต้น ตัวเลือกนี้จะเปิดอยู่สำหรับ  
             หากเปิดใช้และเป็นไบนารีหรือการทดสอบ ตัวเลือกนี้จะบอกเครื่องมือบิลด์ให้ลิงก์ใน
              การลิงก์ไฟล์ที่เรียกใช้งานได้มี 3 วิธีหลักๆ ดังนี้ 
 
           แอตทริบิวต์  
           หาก  | 
| local_defines | รายการสตริง ค่าเริ่มต้นคือ  -Dและเพิ่มลงในบรรทัดคำสั่งคอมไพล์สำหรับเป้าหมายนี้
          แต่จะไม่เพิ่มลงในเป้าหมายที่ขึ้นอยู่กับเป้าหมายนี้ | 
| malloc | ป้ายกำกับ ค่าเริ่มต้นคือ  
            โดยค่าเริ่มต้น ไบนารี C++ จะลิงก์กับ  | 
| nocopts | สตริง ค่าเริ่มต้นคือ  COPTSที่มีอยู่ก่อนแล้วซึ่งตรงกับนิพจน์ทั่วไปนี้
          (รวมถึงค่าที่ระบุอย่างชัดเจนในแอตทริบิวต์ copts ของกฎ) จะถูกนำออกจากCOPTSเพื่อวัตถุประสงค์ในการคอมไพล์กฎนี้
          คุณแทบจะไม่ต้องใช้แอตทริบิวต์นี้ | 
| stamp | จำนวนเต็ม ค่าเริ่มต้นคือ  
 ระบบจะไม่สร้างไบนารีที่ประทับเวลาใหม่ เว้นแต่ว่ามีการเปลี่ยนแปลงในทรัพยากร Dependency | 
| 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) โดยส่วนใหญ่แล้วจะเป็นรูปแบบ glob ของกลุ่มไฟล์ที่รวมไฟล์ที่จำเป็นทั้งหมด
- 
      สร้างบรรทัดคำสั่งที่ถูกต้องสำหรับการดำเนินการ C++ ซึ่งทำได้โดยใช้
      CcToolchainConfigInfo(ดูรายละเอียดด้านล่าง)
  ใช้แอตทริบิวต์ toolchain_config เพื่อกำหนดค่าเครื่องมือ C++
  ดูเอกสารประกอบการกำหนดค่าเชนเครื่องมือ C++ และการเลือกเชนเครื่องมือโดยละเอียดได้ที่
  
    หน้า
  นี้
  ใช้ tags = ["manual"] เพื่อป้องกันไม่ให้สร้างและกำหนดค่า Toolchain
  โดยไม่จำเป็นเมื่อเรียกใช้ bazel build //...
อาร์กิวเมนต์
| Attributes | |
|---|---|
| name | ชื่อ (ต้องระบุ) ชื่อที่ไม่ซ้ำกันสำหรับเป้าหมายนี้ | 
| all_files | ป้ายกำกับ (ต้องระบุ)คอลเล็กชันของอาร์ติแฟกต์ cc_toolchain ทั้งหมด ระบบจะเพิ่มอาร์ติแฟกต์เหล่านี้เป็นอินพุตไปยังการดำเนินการทั้งหมดที่เกี่ยวข้องกับ rules_cc (ยกเว้นการดำเนินการที่ใช้ชุดอาร์ติแฟกต์ที่แม่นยำกว่าจากแอตทริบิวต์ด้านล่าง) Bazel ถือว่า all_filesเป็นซูเปอร์เซ็ต
        ของแอตทริบิวต์อื่นๆ ทั้งหมดที่ให้ผลลัพธ์ (เช่น การคอมไพล์ linkstamp ต้องใช้ทั้งไฟล์คอมไพล์
        และไฟล์ลิงก์ จึงใช้all_files)
        ซึ่งเป็นสิ่งที่  | 
| ar_files | ป้ายกำกับ ค่าเริ่มต้นคือ  รวบรวมอาร์ติแฟกต์ cc_toolchain ทั้งหมดที่จำเป็นสำหรับการดำเนินการเก็บถาวร | 
| as_files | ป้ายกำกับ ค่าเริ่มต้นคือ  รวบรวมอาร์ติแฟกต์ cc_toolchain ทั้งหมดที่จำเป็นสำหรับการดำเนินการแอสเซมบลี | 
| compiler_files | ป้ายกำกับ (ต้องระบุ)รวบรวมอาร์ติแฟกต์ cc_toolchain ทั้งหมดที่จำเป็นสำหรับการดำเนินการคอมไพล์ | 
| compiler_files_without_includes | ป้ายกำกับ ค่าเริ่มต้นคือ  | 
| coverage_files | ป้ายกำกับ ค่าเริ่มต้นคือ  | 
| dwp_files | ป้ายกำกับ (ต้องระบุ)รวบรวมอาร์ติแฟกต์ cc_toolchain ทั้งหมดที่จำเป็นสำหรับการดำเนินการ dwp | 
| dynamic_runtime_lib | ป้ายกำกับ ค่าเริ่มต้นคือ  ระบบจะใช้ตัวเลือกนี้เมื่อเปิดใช้ฟีเจอร์ "static_link_cpp_runtimes" และเราลิงก์ การอ้างอิงแบบไดนามิก | 
| exec_transition_for_inputs | บูลีน ค่าเริ่มต้นคือ  | 
| libc_top | ป้ายกำกับ ค่าเริ่มต้นคือ  | 
| linker_files | ป้ายกำกับ (ต้องระบุ)รวบรวมอาร์ติแฟกต์ cc_toolchain ทั้งหมดที่จำเป็นสำหรับการดำเนินการลิงก์ | 
| module_map | ป้ายกำกับ ค่าเริ่มต้นคือ  | 
| objcopy_files | ป้ายกำกับ (ต้องระบุ)รวบรวมอาร์ติแฟกต์ cc_toolchain ทั้งหมดที่จำเป็นสำหรับการดำเนินการ objcopy | 
| static_runtime_lib | ป้ายกำกับ ค่าเริ่มต้นคือ  โดยจะใช้เมื่อเปิดใช้ฟีเจอร์ "static_link_cpp_runtimes" และเราลิงก์ การอ้างอิงแบบคงที่ | 
| strip_files | ป้ายกำกับ (ต้องระบุ)รวบรวมอาร์ติแฟกต์ cc_toolchain ทั้งหมดที่จำเป็นสำหรับการดำเนินการ strip | 
| 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++
กฎนี้มีหน้าที่รับผิดชอบในเรื่องต่อไปนี้
- รวบรวม Toolchain C++ ที่เกี่ยวข้องทั้งหมด
- 
      การเลือก Toolchain รายการใดรายการหนึ่งขึ้นอยู่กับตัวเลือก --cpuและ--compilerที่ส่งไปยัง Bazel
ดูเอกสารประกอบการกำหนดค่าเชนเครื่องมือ C++ และการเลือกเชนเครื่องมือโดยละเอียดได้ที่ หน้า นี้
อาร์กิวเมนต์
| Attributes | |
|---|---|
| name | ชื่อ (ต้องระบุ) ชื่อที่ไม่ซ้ำกันสำหรับเป้าหมายนี้ | 
| toolchains | สตริงการแมปพจนานุกรมกับป้ายกำกับ กำหนดค่าไม่ได้ ต้องระบุแมปจากสตริง "<cpu>" หรือ "<cpu>|<compiler>" ไปยัง ป้ายกำกับ cc_toolchainระบบจะใช้ "<cpu>" เมื่อส่งเฉพาะ--cpuไปยัง Bazel และจะใช้ "<cpu>|<compiler>" เมื่อส่งทั้ง--cpuและ--compilerไปยัง Bazel ตัวอย่าง
 
          cc_toolchain_suite(
            name = "toolchain",
            toolchains = {
              "piii|gcc": ":my_cc_toolchain_for_piii_using_gcc",
              "piii": ":my_cc_toolchain_for_piii_using_default_compiler",
            },
          )
           |