กฎ C / C++

กฎ

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: การแก้ไขข้อบกพร่อง ไฟล์แพ็กเกจข้อมูลที่เหมาะสำหรับการแก้ไขข้อบกพร่องของไบนารีที่ทำให้ใช้งานได้จากระยะไกล อื่นๆ: ไฟล์ว่าง

อาร์กิวเมนต์

Attributes
name

Name; required

ชื่อที่ไม่ซ้ำกันสำหรับเป้าหมายนี้

deps

List of labels; optional

รายการไลบรารีอื่นๆ ที่จะลิงก์กับเป้าหมายไบนารี

ซึ่งอาจเป็น cc_library หรือ objc_library เป้าหมาย

srcs

List of labels; optional

รายการไฟล์ C และ C++ ที่ประมวลผลเพื่อสร้างเป้าหมาย ไฟล์เหล่านี้คือไฟล์ต้นทางและส่วนหัว C/C++ อย่างใดอย่างหนึ่ง (แหล่งที่มาปกติ) รหัส) หรือสร้าง

ไฟล์ .cc, .c และ .cpp ทั้งหมดจะ ได้ ไฟล์เหล่านี้อาจสร้างขึ้น หากไฟล์ที่มีชื่ออยู่ใน outs ของกฎอื่น จะขึ้นอยู่กับกฎนั้นโดยอัตโนมัติ

ไฟล์ .h จะไม่ได้รับการคอมไพล์ แต่จะพร้อมใช้งานสำหรับ การรวมตามแหล่งที่มาในกฎนี้ ทั้ง .cc และ ไฟล์ .h รายการสามารถมีส่วนหัวที่แสดงใน srcs เหล่านี้หรือใน hdrs ของกฎใดๆ ก็ได้ที่แสดงใน อาร์กิวเมนต์ deps

ไฟล์ #included ทั้งหมดต้องมีการกล่าวถึงใน แอตทริบิวต์ srcs ของกฎนี้ หรือใน แอตทริบิวต์ hdrs ของ cc_library() ที่อ้างอิง รูปแบบที่แนะนำมีไว้สำหรับส่วนหัวที่เชื่อมโยงกับไลบรารี แสดงอยู่ในแอตทริบิวต์ hdrs ของไลบรารีนั้นและส่วนที่เหลือ ส่วนหัวที่เชื่อมโยงกับแหล่งที่มาของกฎนี้ที่จะปรากฏใน srcs โปรดดู "การตรวจสอบการรวมส่วนหัว" เพื่อดูคำอธิบายโดยละเอียด

หากชื่อของกฎอยู่ในภาษา srcs กฎนี้จะขึ้นอยู่กับกฎนั้นโดยอัตโนมัติ หาก outs ของกฎที่มีชื่อเป็น C หรือ C++ ไฟล์ต้นฉบับ ไฟล์จะถูกรวมเข้าเป็นกฎนี้ หากเป็นไฟล์ไลบรารี ไฟล์จะลิงก์กันมา

ไฟล์ srcs ประเภทที่อนุญาต:

  • ไฟล์ต้นฉบับ C และ C++: .c, .cc, .cpp, .cxx .c++ .C
  • ไฟล์ส่วนหัว C และ C++: .h, .hh, .hpp, .hxx .inc .inl .H
  • เครื่องมือประกอบที่มีโปรเซสเซอร์ล่วงหน้าแบบ C: .S
  • ที่เก็บถาวร: .a, .pic.a
  • "ลิงก์เสมอ" คลัง: .lo, .pic.lo
  • ไลบรารีที่ใช้ร่วมกัน มีการกำหนดเวอร์ชันหรือไม่ใช่เวอร์ชัน: .so วันที่ .so.version
  • ไฟล์ออบเจ็กต์: .o, .pic.o

...และกฎที่สร้างไฟล์เหล่านั้น ส่วนขยายที่แตกต่างกันจะแสดงภาษาโปรแกรมที่แตกต่างกันใน ตามข้อตกลง gcc

additional_linker_inputs

List of labels; optional

ส่งต่อไฟล์เหล่านี้ไปยังคำสั่ง Linker C++

ตัวอย่างเช่น ไฟล์ .res ของ Windows ที่คอมไพล์แล้วสามารถใส่ที่นี่เพื่อฝังใน เป้าหมายไบนารี

copts

List of strings; optional

เพิ่มตัวเลือกเหล่านี้ลงในคำสั่งคอมไพล์ C++ ขึ้นอยู่กับการแทนที่ "Makeตัวแปร" และ การแปลงข้อมูลเป็นโทเค็นของ Bourne Shell

ระบบจะเพิ่มแต่ละสตริงในแอตทริบิวต์นี้ตามลำดับที่ระบุให้กับ COPTS ก่อน กำลังคอมไพล์เป้าหมายไบนารี แฟล็กจะมีผลต่อการคอมไพล์เป้าหมายนี้เท่านั้น ไม่ใช่ ทรัพยากร Dependency ของไฟล์ดังกล่าว ดังนั้น โปรดระวังไฟล์ส่วนหัวที่อยู่ที่อื่นด้วย เส้นทางทั้งหมดควร จะสัมพัทธ์กับพื้นที่ทำงาน ไม่ใช่แพ็กเกจปัจจุบัน

หากแพ็กเกจแจ้งฟีเจอร์ no_copts_tokenization การแปลงข้อมูลเป็นโทเค็น Bourne Shell มีผลกับสตริงเท่านั้น ที่ประกอบด้วย "Make" เดียว ตัวแปร

defines

List of strings; optional

รายการกำหนดที่จะเพิ่มลงในบรรทัดคอมไพล์ ขึ้นอยู่กับ "ผู้ผลิต" การแทนที่ตัวแปรและ การแปลงข้อมูลเป็นโทเค็นของ Bourne Shell แต่ละสตริง ซึ่งต้องประกอบด้วยโทเค็นเชลล์ Bourne เดี่ยว มีการเพิ่ม -D ไว้ข้างหน้า และเพิ่มลงในบรรทัดคำสั่งคอมไพล์ไปยังเป้าหมายนี้ รวมทั้งกฎทุกกฎที่ขึ้นอยู่กับกฎนั้น โปรดระมัดระวังให้มาก เนื่องจาก ที่ส่งผลกระทบในวงกว้าง หากไม่แน่ใจ ให้เพิ่มกําหนดค่าให้กับ local_defines แทน
includes

List of strings; optional

รายการไดเรกทอรีรวมที่จะเพิ่มลงในบรรทัดคอมไพล์

ขึ้นอยู่กับการแทนที่ "Makeตัวแปร" สตริงแต่ละรายการจะเพิ่ม -isystem ไว้ข้างหน้า และเพิ่มลงใน COPTS กฎนี้ต่างจาก COPTS ตรงที่เพิ่มแฟล็กเหล่านี้ และทุกกฎที่เกี่ยวข้อง (หมายเหตุ: ไม่ใช่กฎเกณฑ์แต่อย่างใด) เป็น ระมัดระวังให้มาก เนื่องจากอาจส่งผลกระทบเป็นวงกว้าง หากไม่แน่ใจ ให้เพิ่ม "-I" แจ้งว่าเป็น COPTS แทน

ต้องเพิ่มส่วนหัวไปยัง src หรือ hdr ไม่เช่นนั้น ส่วนหัวจะไม่สามารถใช้ได้ เมื่อคอมไพล์เป็นแซนด์บ็อกซ์ (ค่าเริ่มต้น)

linkopts

List of strings; optional

เพิ่มแฟล็กเหล่านี้ลงในคำสั่ง Linker C++ ขึ้นอยู่กับ "ผู้ผลิต" การแทนที่ตัวแปร การแปลงข้อมูลเป็นโทเค็น Bourne Shell และ การขยายป้ายกำกับ ระบบจะเพิ่มแต่ละสตริงในแอตทริบิวต์นี้ไปยัง LINKOPTS ก่อน การลิงก์เป้าหมายไบนารี

องค์ประกอบของรายการนี้ที่ไม่ได้ขึ้นต้นด้วย $ หรือ - จะเป็น เป็นป้ายกำกับของเป้าหมายใน deps รายการไฟล์ที่สร้างโดยเป้าหมายดังกล่าวจะต่อท้าย Linker ตัวเลือก ระบบจะรายงานข้อผิดพลาดหากป้ายกำกับไม่ถูกต้องหรือ ไม่มีการประกาศใน deps

linkshared

Boolean; optional; nonconfigurable; default is False

สร้างไลบรารีที่ใช้ร่วมกัน หากต้องการเปิดใช้แอตทริบิวต์นี้ ให้ใส่ linkshared=True ในกฎ โดยค่าเริ่มต้น ตัวเลือกนี้ปิดอยู่

การมี Flag นี้แสดงว่ามีการลิงก์ด้วยแฟล็ก -shared ไปยัง gcc และไลบรารีที่ใช้ร่วมกันที่ได้เหมาะสมสำหรับการโหลดเข้าไปใน ตัวอย่างโปรแกรม Java อย่างไรก็ตาม สำหรับวัตถุประสงค์ของการสร้าง URL นี้จะไม่มีการเชื่อมโยงเข้ากับ ไบนารีแบบอิสระ เนื่องจากมีการสันนิษฐานว่าไลบรารีที่ใช้ร่วมกันที่สร้างด้วย โปรแกรมอื่นจะโหลดกฎ cc_binary ด้วยตัวเองเท่านั้น ดังนั้น ไม่ควรจะใช้แทน cc_library กฎ เราขอแนะนำให้หลีกเลี่ยงวิธีนี้ทั้งหมดเพื่อให้ปรับขนาดได้ และ เพียงแค่ให้ java_library อ้างอิงกฎ cc_library รายการ แทน

หากคุณระบุทั้ง linkopts=['-static'] และ linkshared=True คุณก็จะได้ชุดเครื่องมือสำเร็จรูปเพียงหน่วยเดียว หากคุณระบุทั้ง 2 อย่าง linkstatic=True และ linkshared=True คุณได้รับสิทธิ์ใช้บริการเดียว แบบครบวงจร

linkstatic

Boolean; optional; default is True

สำหรับ cc_binary และ cc_test: ลิงก์ไบนารีในแบบคงที่ สำหรับ cc_library.linkstatic: ดูด้านล่าง

โดยค่าเริ่มต้น ตัวเลือกนี้จะเปิดอยู่สำหรับ cc_binary และปิดอยู่สำหรับส่วนที่เหลือ

หากเปิดใช้และนี่เป็นไบนารีหรือการทดสอบ ตัวเลือกนี้จะบอกให้เครื่องมือบิลด์ลิงก์ .a แทน .so สำหรับไลบรารีของผู้ใช้เมื่อเป็นไปได้ ไลบรารีระบบบางส่วนอาจยังคงลิงก์แบบไดนามิก เช่นเดียวกับไลบรารีที่ จะไม่มีไลบรารีแบบคงที่ ดังนั้นไฟล์ปฏิบัติการที่ได้จะยังคง ดังนั้น จึงเป็นสิ่งส่วนใหญ่

การลิงก์ไฟล์ปฏิบัติการมี 3 วิธีที่แตกต่างกันดังนี้

  • STATIC ที่มีคุณลักษณะต่างๆ แบบเต็ม_static_link ซึ่งทุกอย่างมีการเชื่อมโยงแบบคงที่ เช่น "gcc -static foo.o libbar.a libbaz.a -lm"
    โหมดนี้เปิดใช้งานด้วยการระบุ fully_static_link ใน features
  • สแตติก ซึ่งไลบรารีของผู้ใช้ทั้งหมดมีการเชื่อมโยงแบบคงที่ (หากไลบรารีแบบคงที่ เวอร์ชันพร้อมใช้งาน) แต่ไลบรารีของระบบ (ไม่รวมไลบรารีรันไทม์ C/C++) มีการเชื่อมโยงแบบไดนามิก เช่น "gcc foo.o libfoo.a libbaz.a -lm"
    โหมดนี้เปิดใช้งานด้วยการระบุ linkstatic=True
  • ไดนามิก (ไลบรารีทั้งหมดจะมีการเชื่อมโยงแบบไดนามิก) (หากเวอร์ชันแบบไดนามิกคือ ใช้งานได้) เช่น "gcc foo.o libfoo.so libbaz.so -lm"
    โหมดนี้เปิดใช้งานด้วยการระบุ linkstatic=False

แอตทริบิวต์ linkstatic จะมีความหมายต่างออกไปหากใช้ใน กฎ cc_library() สำหรับไลบรารี C++ linkstatic=True จะระบุว่ามีเพียง อนุญาตให้มีการลิงก์แบบคงที่ จึงไม่มีการสร้าง .so linkstatic=False ทำ จะไม่ป้องกันการสร้างไลบรารีแบบคงที่ แอตทริบิวต์นี้มีไว้เพื่อควบคุม ของไลบรารีแบบไดนามิก

หากเป็น linkstatic=False เครื่องมือสร้างจะสร้างลิงก์สัญลักษณ์ไปยัง ไลบรารีที่ใช้ร่วมกันที่เกี่ยวข้องในพื้นที่ *.runfiles

local_defines

List of strings; optional

รายการกำหนดที่จะเพิ่มลงในบรรทัดคอมไพล์ ขึ้นอยู่กับ "ผู้ผลิต" การแทนที่ตัวแปรและ การแปลงข้อมูลเป็นโทเค็นของ Bourne Shell แต่ละสตริง ซึ่งต้องประกอบด้วยโทเค็นเชลล์ Bourne เดี่ยว มีการเพิ่ม -D ไว้ข้างหน้า และเพิ่มลงในบรรทัดคำสั่งคอมไพล์สำหรับเป้าหมายนี้ แต่ไม่ใช่เครือข่ายที่เกี่ยวข้อง
malloc

Label; optional; default is @bazel_tools//tools/cpp:malloc

ลบล้างทรัพยากร Dependency เริ่มต้นใน Malloc

โดยค่าเริ่มต้น ไบนารี C++ จะลิงก์กับ //tools/cpp:malloc ซึ่งเป็นไลบรารีว่างเปล่า ไบนารีจึงจะลงเอยด้วย libc Malloc ป้ายกำกับนี้ต้องอ้างอิงถึง cc_library หากเป็นการรวบรวมสำหรับผู้ใช้ที่ไม่ใช่ C++ ตัวเลือกนี้จะไม่มีผล ระบบจะละเว้นค่าของแอตทริบิวต์นี้หาก ระบุ linkshared=True แล้ว

nocopts

String; optional

นำรูปแบบการทำงานของคีย์เวิร์ดออกจากคำสั่งคอมไพล์ C++ ขึ้นอยู่กับ "ผู้ผลิต" แทน ระบบจะตีความค่าของแอตทริบิวต์นี้เป็นนิพจน์ทั่วไป COPTS ที่มีอยู่ก่อนหน้าซึ่งตรงกับนิพจน์ทั่วไปนี้ (รวมถึงค่าที่ระบุอย่างชัดแจ้งในแอตทริบิวต์ copts ของกฎ) จะถูกนำออกจาก COPTS เพื่อวัตถุประสงค์ในการรวบรวมกฎนี้ แอตทริบิวต์นี้ไม่จำเป็นเสมอไป
stamp

Integer; optional; default is -1

ระบุว่าจะเข้ารหัสข้อมูลบิลด์ลงในไบนารีหรือไม่ ค่าที่เป็นไปได้มีดังนี้
  • stamp = 1: ประทับตราข้อมูลบิลด์ลงในไบนารีเสมอ แม้ใน --nostamp บิลด์ ควรหลีกเลี่ยงการตั้งค่า เนื่องจากอาจทำให้การแคชระยะไกลหยุดทำงาน ไบนารีและการดำเนินการดาวน์สตรีมที่ใช้
  • stamp = 0: แทนที่ข้อมูลบิลด์ด้วยค่าคงที่เสมอ ช่วงเวลานี้ จะให้การแคชผลลัพธ์ของบิลด์ที่ดี
  • stamp = -1: การฝังข้อมูลบิลด์ควบคุมโดย Flag --[no]stamp

ระบบจะไม่สร้างไบนารีที่ประทับตราอีกครั้ง เว้นแต่ทรัพยากร Dependency จะมีการเปลี่ยนแปลง

win_def_file

Label; optional

ไฟล์ DEF ของ Windows ที่จะส่งไปยัง Linker

แอตทริบิวต์นี้ควรใช้เมื่อ 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,
)
2. การลิงก์ไลบรารีที่ใช้ร่วมกัน (Unix)
cc_import(
  name = "mylib",
  hdrs = ["mylib.h"],
  shared_library = "libmylib.so",
)
3. การลิงก์ไลบรารีที่ใช้ร่วมกันกับไลบรารีอินเทอร์เฟซ (Windows)
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",
)
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,
)

อาร์กิวเมนต์

Attributes
name

Name; required

ชื่อที่ไม่ซ้ำกันสำหรับเป้าหมายนี้

hdrs

List of labels; optional

รายการไฟล์ส่วนหัวที่เผยแพร่โดย ไลบรารีที่คอมไพล์ไว้ล่วงหน้านี้จะรวมโดยตรงโดยแหล่งที่มาในกฎที่เกี่ยวข้อง

Boolean; optional; default is False

หากเป็น 1 ไบนารีใดๆ ที่ขึ้นอยู่กับ (โดยตรงหรือโดยอ้อม) ใน C++ นี้ ไลบรารีที่คอมไพล์ไว้ล่วงหน้าแล้ว จะลิงก์ในไฟล์ออบเจ็กต์ทั้งหมดที่เก็บไว้ในไลบรารีแบบคงที่ แม้ว่าบางอันจะไม่มีสัญลักษณ์ที่ไบนารีอ้างอิงก็ตาม วิธีนี้มีประโยชน์หากโค้ดของคุณไม่ได้ถูกเรียกอย่างชัดแจ้งด้วยโค้ดใน ไบนารี เช่น หากโค้ดของคุณลงทะเบียนเพื่อให้รับการเรียกกลับ ที่ให้บริการโดยบางบริการ

หาก Alwayslink ใช้ไม่ได้กับ VS 2017 ใน Windows นั่นเป็นเพราะ ปัญหาที่ทราบแล้ว โปรดอัปเกรด VS 2017 เป็นเวอร์ชันล่าสุด

interface_library

Label; optional

ไลบรารีอินเทอร์เฟซเดียวสำหรับการลิงก์ไลบรารีที่ใช้ร่วมกัน

ประเภทไฟล์ที่อนุญาต: .ifso, .tbd, .lib, .so หรือ .dylib

shared_library

Label; optional

ไลบรารีที่ใช้ร่วมกันล่วงหน้ารายการเดียว Bazel ดูแลให้ ที่ต้องใช้ในระหว่างรันไทม์

ประเภทไฟล์ที่อนุญาต: .so, วันที่ .dll หรือ .dylib

static_library

Label; optional

ไลบรารีแบบคงที่ซึ่งคอมไพล์ไว้ล่วงหน้ารายการเดียว

ประเภทไฟล์ที่อนุญาต: .a, วันที่ .pic.a หรือ .lib

system_provided

Boolean; optional; default is False

หากเป็น 1 แสดงว่าระบบจัดเตรียมไลบรารีที่ใช้ร่วมกันที่ต้องใช้ขณะรันไทม์ ใน ในกรณีนี้ควรระบุ interface_library และ shared_library ควรเว้นว่างไว้

cc_library

cc_library(name, deps, srcs, data, hdrs, additional_compiler_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.hbar.h
foo.ccfoo.h bar.h
bar.hbar-impl.h baz.h
bar-impl.hบาซ
bar.ccbar.h bar-impl.h baz.h
baz.hbaz-impl.h
baz-impl.hbaz.h
baz.ccbaz.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 ไม่สามารถระบุระหว่างโดยตรงและทรานซิทีฟได้ รวม ดังนั้นจึงไม่สามารถตรวจพบกรณีข้อผิดพลาดที่ไฟล์มี ส่วนหัวโดยตรงที่ได้รับอนุญาตให้รวมแบบทรานซิชันเท่านั้น ตัวอย่างเช่น Bazel จะไม่บ่นหากในตัวอย่างข้างต้นคือ foo.cc โดยตรง รวม baz.h กรณีนี้ถือว่าผิดกฎหมาย เนื่องจาก foo ไม่ได้ขึ้นอยู่กับ baz โดยตรง ไม่มีข้อผิดพลาดเกิดขึ้นในขณะนี้ ในกรณีนั้น แต่อาจมีการเพิ่มการตรวจสอบข้อผิดพลาดดังกล่าวในอนาคต

อาร์กิวเมนต์

Attributes
name

Name; required

ชื่อที่ไม่ซ้ำกันสำหรับเป้าหมายนี้

deps

List of labels; optional

รายการไลบรารีอื่นๆ ที่จะลิงก์กับเป้าหมายไบนารี

ซึ่งอาจเป็น cc_library หรือ objc_library เป้าหมาย

srcs

List of labels; optional

รายการไฟล์ C และ C++ ที่ประมวลผลเพื่อสร้างเป้าหมาย ไฟล์เหล่านี้คือไฟล์ต้นทางและส่วนหัว C/C++ อย่างใดอย่างหนึ่ง (แหล่งที่มาปกติ) รหัส) หรือสร้าง

ไฟล์ .cc, .c และ .cpp ทั้งหมดจะ ได้ ไฟล์เหล่านี้อาจสร้างขึ้น หากไฟล์ที่มีชื่ออยู่ใน outs ของกฎอื่น จะขึ้นอยู่กับกฎนั้นโดยอัตโนมัติ

ไฟล์ .h จะไม่ได้รับการคอมไพล์ แต่จะพร้อมใช้งานสำหรับ การรวมตามแหล่งที่มาในกฎนี้ ทั้ง .cc และ ไฟล์ .h รายการสามารถมีส่วนหัวที่แสดงใน srcs เหล่านี้หรือใน hdrs ของกฎใดๆ ก็ได้ที่แสดงใน อาร์กิวเมนต์ deps

ไฟล์ #included ทั้งหมดต้องมีการกล่าวถึงใน แอตทริบิวต์ srcs ของกฎนี้ หรือใน แอตทริบิวต์ hdrs ของ cc_library() ที่อ้างอิง รูปแบบที่แนะนำมีไว้สำหรับส่วนหัวที่เชื่อมโยงกับไลบรารี แสดงอยู่ในแอตทริบิวต์ hdrs ของไลบรารีนั้นและส่วนที่เหลือ ส่วนหัวที่เชื่อมโยงกับแหล่งที่มาของกฎนี้ที่จะปรากฏใน srcs โปรดดู "การตรวจสอบการรวมส่วนหัว" เพื่อดูคำอธิบายโดยละเอียด

หากชื่อของกฎอยู่ในภาษา srcs กฎนี้จะขึ้นอยู่กับกฎนั้นโดยอัตโนมัติ หาก outs ของกฎที่มีชื่อเป็น C หรือ C++ ไฟล์ต้นฉบับ ไฟล์จะถูกรวมเข้าเป็นกฎนี้ หากเป็นไฟล์ไลบรารี ไฟล์จะลิงก์กันมา

ไฟล์ srcs ประเภทที่อนุญาต:

  • ไฟล์ต้นฉบับ C และ C++: .c, .cc, .cpp, .cxx .c++ .C
  • ไฟล์ส่วนหัว C และ C++: .h, .hh, .hpp, .hxx .inc .inl .H
  • เครื่องมือประกอบที่มีโปรเซสเซอร์ล่วงหน้าแบบ C: .S
  • ที่เก็บถาวร: .a, .pic.a
  • "ลิงก์เสมอ" คลัง: .lo, .pic.lo
  • ไลบรารีที่ใช้ร่วมกัน มีการกำหนดเวอร์ชันหรือไม่ใช่เวอร์ชัน: .so วันที่ .so.version
  • ไฟล์ออบเจ็กต์: .o, .pic.o

...และกฎที่สร้างไฟล์เหล่านั้น ส่วนขยายที่แตกต่างกันจะแสดงภาษาโปรแกรมที่แตกต่างกันใน ตามข้อตกลง gcc

hdrs

List of labels; optional

รายการไฟล์ส่วนหัวที่เผยแพร่โดย ไลบรารีนี้ที่จะถูกรวมโดยตรงโดยแหล่งที่มาในกฎที่ไม่เป็นอิสระ

นี่คือตำแหน่งที่แนะนำอย่างยิ่งสำหรับการประกาศไฟล์ส่วนหัวที่ อธิบายอินเทอร์เฟซสำหรับไลบรารี ระบบจะสร้างส่วนหัวเหล่านี้ พร้อมสำหรับการรวมโดยแหล่งที่มาในกฎนี้หรือในกฎที่ไม่เป็นอิสระ ส่วนหัวที่ไคลเอ็นต์ของไลบรารีนี้ไม่ควรรวมควรเป็น แสดงในแอตทริบิวต์ srcs แทนแม้ว่าจะ รวมโดยส่วนหัวที่เผยแพร่แล้ว โปรดดู "การรวมส่วนหัว กำลังตรวจสอบ" เพื่อดูคำอธิบายโดยละเอียด

additional_compiler_inputs

List of labels; optional

ไฟล์เพิ่มเติมที่คุณอาจต้องการส่งไปยังบรรทัดคำสั่งของคอมไพเลอร์ เช่น Sanitizer รายการละเว้น เป็นต้น ไฟล์ที่ระบุไว้ที่นี่จะสามารถใช้ในสำเนาที่มี $(location)

Boolean; optional; default is False

หากเป็น 1 ไบนารีใดๆ ที่ขึ้นอยู่กับ (โดยตรงหรือโดยอ้อม) ใน C++ นี้ Library จะเชื่อมโยงในไฟล์ออบเจ็กต์ทั้งหมดของไฟล์ที่แสดงอยู่ใน srcs แม้ว่าบางแอตทริบิวต์จะไม่มีสัญลักษณ์ที่ไบนารีอ้างอิงอยู่ วิธีนี้มีประโยชน์หากโค้ดของคุณไม่ได้ถูกเรียกอย่างชัดแจ้งด้วยโค้ดใน ไบนารี เช่น หากโค้ดของคุณลงทะเบียนเพื่อให้รับการเรียกกลับ ที่ให้บริการโดยบางบริการ

หาก Alwayslink ใช้ไม่ได้กับ VS 2017 ใน Windows นั่นเป็นเพราะ ปัญหาที่ทราบแล้ว โปรดอัปเกรด VS 2017 เป็นเวอร์ชันล่าสุด

copts

List of strings; optional

เพิ่มตัวเลือกเหล่านี้ลงในคำสั่งคอมไพล์ C++ ขึ้นอยู่กับการแทนที่ "Makeตัวแปร" และ การแปลงข้อมูลเป็นโทเค็นของ Bourne Shell

ระบบจะเพิ่มแต่ละสตริงในแอตทริบิวต์นี้ตามลำดับที่ระบุให้กับ COPTS ก่อน กำลังคอมไพล์เป้าหมายไบนารี แฟล็กจะมีผลต่อการคอมไพล์เป้าหมายนี้เท่านั้น ไม่ใช่ ทรัพยากร Dependency ของไฟล์ดังกล่าว ดังนั้น โปรดระวังไฟล์ส่วนหัวที่อยู่ที่อื่นด้วย เส้นทางทั้งหมดควร จะสัมพัทธ์กับพื้นที่ทำงาน ไม่ใช่แพ็กเกจปัจจุบัน

หากแพ็กเกจแจ้งฟีเจอร์ no_copts_tokenization การแปลงข้อมูลเป็นโทเค็น Bourne Shell มีผลกับสตริงเท่านั้น ที่ประกอบด้วย "Make" เดียว ตัวแปร

defines

List of strings; optional

รายการกำหนดที่จะเพิ่มลงในบรรทัดคอมไพล์ ขึ้นอยู่กับ "ผู้ผลิต" การแทนที่ตัวแปรและ การแปลงข้อมูลเป็นโทเค็นของ Bourne Shell แต่ละสตริง ซึ่งต้องประกอบด้วยโทเค็นเชลล์ Bourne เดี่ยว มีการเพิ่ม -D ไว้ข้างหน้า และเพิ่มลงในบรรทัดคำสั่งคอมไพล์ไปยังเป้าหมายนี้ รวมทั้งกฎทุกกฎที่ขึ้นอยู่กับกฎนั้น โปรดระมัดระวังให้มาก เนื่องจาก ที่ส่งผลกระทบในวงกว้าง หากไม่แน่ใจ ให้เพิ่มกําหนดค่าให้กับ local_defines แทน
implementation_deps

List of labels; optional

รายการของไลบรารีอื่นๆ ที่เป้าหมายไลบรารีอิงตาม ต่างจาก deps ส่วนหัว และระบุเส้นทางของไลบรารีเหล่านี้ (รวมถึงเส้นทางทั้งหมดของไลบรารี deps สับเปลี่ยน) จะใช้สำหรับการรวบรวมไลบรารีนี้เท่านั้น ไม่รวมถึงไลบรารีที่ ต้องพึ่งพาสิ่งนั้น ไลบรารีที่ระบุด้วย implementation_deps ยังคงลิงก์อยู่ใน เป้าหมายไบนารีที่ขึ้นอยู่กับไลบรารีนี้

สำหรับตอนนี้ การใช้งานจะถูกจำกัดไว้ที่ cc_libraries และได้รับการปกป้องโดย Flag --experimental_cc_implementation_deps

include_prefix

String; optional

คำนำหน้าที่จะเพิ่มลงในเส้นทางของส่วนหัวของกฎนี้

เมื่อตั้งค่าแล้ว ส่วนหัวในแอตทริบิวต์ hdrs ของกฎนี้จะเข้าถึงได้ at คือค่าของแอตทริบิวต์นี้ที่เพิ่มไว้ข้างหน้าเส้นทางที่สัมพันธ์กับที่เก็บ

ระบบนำคำนำหน้าในแอตทริบิวต์ strip_include_prefix ออกก่อนหน้านั้น เพิ่มคำนำหน้าแล้ว

includes

List of strings; optional

รายการไดเรกทอรีรวมที่จะเพิ่มลงในบรรทัดคอมไพล์

ขึ้นอยู่กับการแทนที่ "Makeตัวแปร" สตริงแต่ละรายการจะเพิ่ม -isystem ไว้ข้างหน้า และเพิ่มลงใน COPTS กฎนี้ต่างจาก COPTS ตรงที่เพิ่มแฟล็กเหล่านี้ และทุกกฎที่เกี่ยวข้อง (หมายเหตุ: ไม่ใช่กฎเกณฑ์แต่อย่างใด) เป็น ระมัดระวังให้มาก เนื่องจากอาจส่งผลกระทบเป็นวงกว้าง หากไม่แน่ใจ ให้เพิ่ม "-I" แจ้งว่าเป็น COPTS แทน

ต้องเพิ่มส่วนหัวไปยัง src หรือ hdr ไม่เช่นนั้น ส่วนหัวจะไม่สามารถใช้ได้ เมื่อคอมไพล์เป็นแซนด์บ็อกซ์ (ค่าเริ่มต้น)

linkopts

List of strings; optional

เพิ่มแฟล็กเหล่านี้ลงในคำสั่ง Linker C++ ขึ้นอยู่กับ "ผู้ผลิต" การแทนที่ตัวแปร การแปลงข้อมูลเป็นโทเค็น Bourne Shell และ การขยายป้ายกำกับ ระบบจะเพิ่มแต่ละสตริงในแอตทริบิวต์นี้ไปยัง LINKOPTS ก่อน การลิงก์เป้าหมายไบนารี

องค์ประกอบของรายการนี้ที่ไม่ได้ขึ้นต้นด้วย $ หรือ - จะเป็น เป็นป้ายกำกับของเป้าหมายใน deps รายการไฟล์ที่สร้างโดยเป้าหมายดังกล่าวจะต่อท้าย Linker ตัวเลือก ระบบจะรายงานข้อผิดพลาดหากป้ายกำกับไม่ถูกต้องหรือ ไม่มีการประกาศใน deps

linkstamp

Label; optional

คอมไพล์และลิงก์ไฟล์ต้นฉบับ C++ ที่ระบุลงในไฟล์สุดท้ายพร้อมกัน 2. ต้องใช้กลเม็ดนี้เพื่อใช้การประทับเวลา ข้อมูลลงในไบนารี หากเราคอมไพล์ไฟล์ต้นฉบับไปยัง ตามปกติ การประทับเวลาอาจไม่ถูกต้อง การคอมไพล์ Linktamp อาจไม่มีชุดของ แฟล็กคอมไพเลอร์ ดังนั้นจึงไม่ควรขึ้นอยู่กับสถานะใดเป็นพิเศษ ส่วนหัว ตัวเลือกคอมไพเลอร์ หรือตัวแปรบิลด์อื่นๆ ควรใช้ตัวเลือกนี้ใน แพ็กเกจ base
linkstatic

Boolean; optional; default is False

สำหรับ cc_binary และ cc_test: ลิงก์ไบนารีในแบบคงที่ สำหรับ cc_library.linkstatic: ดูด้านล่าง

โดยค่าเริ่มต้น ตัวเลือกนี้จะเปิดอยู่สำหรับ cc_binary และปิดอยู่สำหรับส่วนที่เหลือ

หากเปิดใช้และนี่เป็นไบนารีหรือการทดสอบ ตัวเลือกนี้จะบอกให้เครื่องมือบิลด์ลิงก์ .a แทน .so สำหรับไลบรารีของผู้ใช้เมื่อเป็นไปได้ ไลบรารีระบบบางส่วนอาจยังคงลิงก์แบบไดนามิก เช่นเดียวกับไลบรารีที่ จะไม่มีไลบรารีแบบคงที่ ดังนั้นไฟล์ปฏิบัติการที่ได้จะยังคง ดังนั้น จึงเป็นสิ่งส่วนใหญ่

การลิงก์ไฟล์ปฏิบัติการมี 3 วิธีที่แตกต่างกันดังนี้

  • STATIC ที่มีคุณลักษณะต่างๆ แบบเต็ม_static_link ซึ่งทุกอย่างมีการเชื่อมโยงแบบคงที่ เช่น "gcc -static foo.o libbar.a libbaz.a -lm"
    โหมดนี้เปิดใช้งานด้วยการระบุ fully_static_link ใน features
  • สแตติก ซึ่งไลบรารีของผู้ใช้ทั้งหมดมีการเชื่อมโยงแบบคงที่ (หากไลบรารีแบบคงที่ เวอร์ชันพร้อมใช้งาน) แต่ไลบรารีของระบบ (ไม่รวมไลบรารีรันไทม์ C/C++) มีการเชื่อมโยงแบบไดนามิก เช่น "gcc foo.o libfoo.a libbaz.a -lm"
    โหมดนี้เปิดใช้งานด้วยการระบุ linkstatic=True
  • ไดนามิก (ไลบรารีทั้งหมดจะมีการเชื่อมโยงแบบไดนามิก) (หากเวอร์ชันแบบไดนามิกคือ ใช้งานได้) เช่น "gcc foo.o libfoo.so libbaz.so -lm"
    โหมดนี้เปิดใช้งานด้วยการระบุ linkstatic=False

แอตทริบิวต์ linkstatic จะมีความหมายต่างออกไปหากใช้ใน กฎ cc_library() สำหรับไลบรารี C++ linkstatic=True จะระบุว่ามีเพียง อนุญาตให้มีการลิงก์แบบคงที่ จึงไม่มีการสร้าง .so linkstatic=False ทำ จะไม่ป้องกันการสร้างไลบรารีแบบคงที่ แอตทริบิวต์นี้มีไว้เพื่อควบคุม ของไลบรารีแบบไดนามิก

หากเป็น linkstatic=False เครื่องมือสร้างจะสร้างลิงก์สัญลักษณ์ไปยัง ไลบรารีที่ใช้ร่วมกันที่เกี่ยวข้องในพื้นที่ *.runfiles

local_defines

List of strings; optional

รายการกำหนดที่จะเพิ่มลงในบรรทัดคอมไพล์ ขึ้นอยู่กับ "ผู้ผลิต" การแทนที่ตัวแปรและ การแปลงข้อมูลเป็นโทเค็นของ Bourne Shell แต่ละสตริง ซึ่งต้องประกอบด้วยโทเค็นเชลล์ Bourne เดี่ยว มีการเพิ่ม -D ไว้ข้างหน้า และเพิ่มลงในบรรทัดคำสั่งคอมไพล์สำหรับเป้าหมายนี้ แต่ไม่ใช่เครือข่ายที่เกี่ยวข้อง
nocopts

String; optional

นำรูปแบบการทำงานของคีย์เวิร์ดออกจากคำสั่งคอมไพล์ C++ ขึ้นอยู่กับ "ผู้ผลิต" แทน ระบบจะตีความค่าของแอตทริบิวต์นี้เป็นนิพจน์ทั่วไป COPTS ที่มีอยู่ก่อนหน้าซึ่งตรงกับนิพจน์ทั่วไปนี้ (รวมถึงค่าที่ระบุอย่างชัดแจ้งในแอตทริบิวต์ copts ของกฎ) จะถูกนำออกจาก COPTS เพื่อวัตถุประสงค์ในการรวบรวมกฎนี้ แอตทริบิวต์นี้ไม่จำเป็นเสมอไป
strip_include_prefix

String; optional

คำนำหน้าที่จะตัดออกจากเส้นทางของส่วนหัวของกฎนี้

เมื่อตั้งค่าแล้ว ส่วนหัวในแอตทริบิวต์ hdrs ของกฎนี้จะเข้าถึงได้ ในเส้นทางโดยการตัดคำนำหน้านี้ออก

หากเป็นเส้นทางแบบสัมพัทธ์ ระบบจะใช้เส้นทางที่สัมพันธ์กับแพ็กเกจ หากเป็นวิธีการแบบสัมบูรณ์ ระบบเข้าใจว่าเป็นเส้นทางที่สัมพันธ์กับที่เก็บ

ระบบจะเพิ่มคำนำหน้าในแอตทริบิวต์ include_prefix หลังคำนำหน้านี้คือ ถูกตัดออก

textual_hdrs

List of labels; optional

รายการไฟล์ส่วนหัวที่เผยแพร่โดย ไลบรารีนี้ที่จะถูกรวมเป็นข้อความโดยแหล่งที่มาในกฎที่อ้างอิง

นี่คือตำแหน่งสำหรับการประกาศไฟล์ส่วนหัวที่ไม่สามารถคอมไพล์ด้วยตัวเองได้ กล่าวคือ จะต้องมีการรวมข้อความไว้โดยไฟล์ต้นฉบับอื่นๆ เสมอเพื่อให้ไฟล์ โค้ด

win_def_file

Label; optional

ไฟล์ DEF ของ Windows ที่จะส่งไปยัง Linker

แอตทริบิวต์นี้ควรใช้เมื่อ 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

Name; required

ชื่อที่ไม่ซ้ำกันสำหรับเป้าหมายนี้

deps

List of labels; optional

รายการ 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 ซึ่งอยู่ในพื้นที่ทำงานหรือในตำแหน่งที่ระบุ Absolute Path ตัวอย่าง

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

Name; required

ชื่อที่ไม่ซ้ำกันสำหรับเป้าหมายนี้

profile

Label; optional

ป้ายกำกับของโปรไฟล์คำแนะนำ ไฟล์คำแนะนำมีนามสกุล .afdo ป้ายกำกับยังสามารถชี้ไปยังกฎ fdo_absolute_path_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

Name; required

ชื่อที่ไม่ซ้ำกันสำหรับเป้าหมายนี้

absolute_path_profile

String; optional

เส้นทางสัมบูรณ์ไปยังโปรไฟล์ FDO ไฟล์ FDO สามารถมีนามสกุลต่อไปนี้ได้ .profraw สำหรับโปรไฟล์ LLVM ที่ไม่ได้จัดทำดัชนี, .profdata สำหรับโปรไฟล์ LLVM ที่จัดทำดัชนี, .zip ที่มีโปรไฟล์ Profraw ของ LLVM หรือ .afdo สำหรับโปรไฟล์ AutoFDO
profile

Label; optional

ป้ายกำกับของโปรไฟล์ FDO หรือกฎที่สร้างโปรไฟล์ดังกล่าว ไฟล์ FDO สามารถมี ส่วนขยายต่อไปนี้: .profraw สำหรับโปรไฟล์ LLVM ที่ไม่ได้จัดทำดัชนี, .profdata สำหรับ LLVM ที่จัดทำดัชนี โปรไฟล์, .zip ที่มีโปรไฟล์ Profraw LLVM, .afdo สำหรับโปรไฟล์ AutoFDO, .xfdo สำหรับ โปรไฟล์ XBinary ป้ายกำกับยังสามารถชี้ไปยังกฎ fdo_absolute_path_profile ได้ด้วย
proto_profile

Label; optional

ป้ายกำกับของโปรไฟล์ Protobuf

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

Name; required

ชื่อที่ไม่ซ้ำกันสำหรับเป้าหมายนี้

ld_profile

Label; optional

ป้ายกำกับของโปรไฟล์ที่ส่งไปยังการทำงานของลิงก์ ไฟล์นี้มี นามสกุล .txt

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)

อาร์กิวเมนต์

Attributes
name

Name; required

ชื่อที่ไม่ซ้ำกันสำหรับเป้าหมายนี้

deps

List of labels; optional

รายการไลบรารีอื่นๆ ที่จะลิงก์กับเป้าหมายไบนารี

ซึ่งอาจเป็น cc_library หรือ objc_library เป้าหมาย

srcs

List of labels; optional

รายการไฟล์ C และ C++ ที่ประมวลผลเพื่อสร้างเป้าหมาย ไฟล์เหล่านี้คือไฟล์ต้นทางและส่วนหัว C/C++ อย่างใดอย่างหนึ่ง (แหล่งที่มาปกติ) รหัส) หรือสร้าง

ไฟล์ .cc, .c และ .cpp ทั้งหมดจะ ได้ ไฟล์เหล่านี้อาจสร้างขึ้น หากไฟล์ที่มีชื่ออยู่ใน outs ของกฎอื่น จะขึ้นอยู่กับกฎนั้นโดยอัตโนมัติ

ไฟล์ .h จะไม่ได้รับการคอมไพล์ แต่จะพร้อมใช้งานสำหรับ การรวมตามแหล่งที่มาในกฎนี้ ทั้ง .cc และ ไฟล์ .h รายการสามารถมีส่วนหัวที่แสดงใน srcs เหล่านี้หรือใน hdrs ของกฎใดๆ ก็ได้ที่แสดงใน อาร์กิวเมนต์ deps

ไฟล์ #included ทั้งหมดต้องมีการกล่าวถึงใน แอตทริบิวต์ srcs ของกฎนี้ หรือใน แอตทริบิวต์ hdrs ของ cc_library() ที่อ้างอิง รูปแบบที่แนะนำมีไว้สำหรับส่วนหัวที่เชื่อมโยงกับไลบรารี แสดงอยู่ในแอตทริบิวต์ hdrs ของไลบรารีนั้นและส่วนที่เหลือ ส่วนหัวที่เชื่อมโยงกับแหล่งที่มาของกฎนี้ที่จะปรากฏใน srcs โปรดดู "การตรวจสอบการรวมส่วนหัว" เพื่อดูคำอธิบายโดยละเอียด

หากชื่อของกฎอยู่ในภาษา srcs กฎนี้จะขึ้นอยู่กับกฎนั้นโดยอัตโนมัติ หาก outs ของกฎที่มีชื่อเป็น C หรือ C++ ไฟล์ต้นฉบับ ไฟล์จะถูกรวมเข้าเป็นกฎนี้ หากเป็นไฟล์ไลบรารี ไฟล์จะลิงก์กันมา

ไฟล์ srcs ประเภทที่อนุญาต:

  • ไฟล์ต้นฉบับ C และ C++: .c, .cc, .cpp, .cxx .c++ .C
  • ไฟล์ส่วนหัว C และ C++: .h, .hh, .hpp, .hxx .inc .inl .H
  • เครื่องมือประกอบที่มีโปรเซสเซอร์ล่วงหน้าแบบ C: .S
  • ที่เก็บถาวร: .a, .pic.a
  • "ลิงก์เสมอ" คลัง: .lo, .pic.lo
  • ไลบรารีที่ใช้ร่วมกัน มีการกำหนดเวอร์ชันหรือไม่ใช่เวอร์ชัน: .so วันที่ .so.version
  • ไฟล์ออบเจ็กต์: .o, .pic.o

...และกฎที่สร้างไฟล์เหล่านั้น ส่วนขยายที่แตกต่างกันจะแสดงภาษาโปรแกรมที่แตกต่างกันใน ตามข้อตกลง gcc

additional_linker_inputs

List of labels; optional

ส่งต่อไฟล์เหล่านี้ไปยังคำสั่ง Linker C++

ตัวอย่างเช่น ไฟล์ .res ของ Windows ที่คอมไพล์แล้วสามารถใส่ที่นี่เพื่อฝังใน เป้าหมายไบนารี

copts

List of strings; optional

เพิ่มตัวเลือกเหล่านี้ลงในคำสั่งคอมไพล์ C++ ขึ้นอยู่กับการแทนที่ "Makeตัวแปร" และ การแปลงข้อมูลเป็นโทเค็นของ Bourne Shell

ระบบจะเพิ่มแต่ละสตริงในแอตทริบิวต์นี้ตามลำดับที่ระบุให้กับ COPTS ก่อน กำลังคอมไพล์เป้าหมายไบนารี แฟล็กจะมีผลต่อการคอมไพล์เป้าหมายนี้เท่านั้น ไม่ใช่ ทรัพยากร Dependency ของไฟล์ดังกล่าว ดังนั้น โปรดระวังไฟล์ส่วนหัวที่อยู่ที่อื่นด้วย เส้นทางทั้งหมดควร จะสัมพัทธ์กับพื้นที่ทำงาน ไม่ใช่แพ็กเกจปัจจุบัน

หากแพ็กเกจแจ้งฟีเจอร์ no_copts_tokenization การแปลงข้อมูลเป็นโทเค็น Bourne Shell มีผลกับสตริงเท่านั้น ที่ประกอบด้วย "Make" เดียว ตัวแปร

defines

List of strings; optional

รายการกำหนดที่จะเพิ่มลงในบรรทัดคอมไพล์ ขึ้นอยู่กับ "ผู้ผลิต" การแทนที่ตัวแปรและ การแปลงข้อมูลเป็นโทเค็นของ Bourne Shell แต่ละสตริง ซึ่งต้องประกอบด้วยโทเค็นเชลล์ Bourne เดี่ยว มีการเพิ่ม -D ไว้ข้างหน้า และเพิ่มลงในบรรทัดคำสั่งคอมไพล์ไปยังเป้าหมายนี้ รวมทั้งกฎทุกกฎที่ขึ้นอยู่กับกฎนั้น โปรดระมัดระวังให้มาก เนื่องจาก ที่ส่งผลกระทบในวงกว้าง หากไม่แน่ใจ ให้เพิ่มกําหนดค่าให้กับ local_defines แทน
includes

List of strings; optional

รายการไดเรกทอรีรวมที่จะเพิ่มลงในบรรทัดคอมไพล์

ขึ้นอยู่กับการแทนที่ "Makeตัวแปร" สตริงแต่ละรายการจะเพิ่ม -isystem ไว้ข้างหน้า และเพิ่มลงใน COPTS กฎนี้ต่างจาก COPTS ตรงที่เพิ่มแฟล็กเหล่านี้ และทุกกฎที่เกี่ยวข้อง (หมายเหตุ: ไม่ใช่กฎเกณฑ์แต่อย่างใด) เป็น ระมัดระวังให้มาก เนื่องจากอาจส่งผลกระทบเป็นวงกว้าง หากไม่แน่ใจ ให้เพิ่ม "-I" แจ้งว่าเป็น COPTS แทน

ต้องเพิ่มส่วนหัวไปยัง src หรือ hdr ไม่เช่นนั้น ส่วนหัวจะไม่สามารถใช้ได้ เมื่อคอมไพล์เป็นแซนด์บ็อกซ์ (ค่าเริ่มต้น)

linkopts

List of strings; optional

เพิ่มแฟล็กเหล่านี้ลงในคำสั่ง Linker C++ ขึ้นอยู่กับ "ผู้ผลิต" การแทนที่ตัวแปร การแปลงข้อมูลเป็นโทเค็น Bourne Shell และ การขยายป้ายกำกับ ระบบจะเพิ่มแต่ละสตริงในแอตทริบิวต์นี้ไปยัง LINKOPTS ก่อน การลิงก์เป้าหมายไบนารี

องค์ประกอบของรายการนี้ที่ไม่ได้ขึ้นต้นด้วย $ หรือ - จะเป็น เป็นป้ายกำกับของเป้าหมายใน deps รายการไฟล์ที่สร้างโดยเป้าหมายดังกล่าวจะต่อท้าย Linker ตัวเลือก ระบบจะรายงานข้อผิดพลาดหากป้ายกำกับไม่ถูกต้องหรือ ไม่มีการประกาศใน deps

linkstatic

Boolean; optional; default is False

สำหรับ cc_binary และ cc_test: ลิงก์ไบนารีในแบบคงที่ สำหรับ cc_library.linkstatic: ดูด้านล่าง

โดยค่าเริ่มต้น ตัวเลือกนี้จะเปิดอยู่สำหรับ cc_binary และปิดอยู่สำหรับส่วนที่เหลือ

หากเปิดใช้และนี่เป็นไบนารีหรือการทดสอบ ตัวเลือกนี้จะบอกให้เครื่องมือบิลด์ลิงก์ .a แทน .so สำหรับไลบรารีของผู้ใช้เมื่อเป็นไปได้ ไลบรารีระบบบางส่วนอาจยังคงลิงก์แบบไดนามิก เช่นเดียวกับไลบรารีที่ จะไม่มีไลบรารีแบบคงที่ ดังนั้นไฟล์ปฏิบัติการที่ได้จะยังคง ดังนั้น จึงเป็นสิ่งส่วนใหญ่

การลิงก์ไฟล์ปฏิบัติการมี 3 วิธีที่แตกต่างกันดังนี้

  • STATIC ที่มีคุณลักษณะต่างๆ แบบเต็ม_static_link ซึ่งทุกอย่างมีการเชื่อมโยงแบบคงที่ เช่น "gcc -static foo.o libbar.a libbaz.a -lm"
    โหมดนี้เปิดใช้งานด้วยการระบุ fully_static_link ใน features
  • สแตติก ซึ่งไลบรารีของผู้ใช้ทั้งหมดมีการเชื่อมโยงแบบคงที่ (หากไลบรารีแบบคงที่ เวอร์ชันพร้อมใช้งาน) แต่ไลบรารีของระบบ (ไม่รวมไลบรารีรันไทม์ C/C++) มีการเชื่อมโยงแบบไดนามิก เช่น "gcc foo.o libfoo.a libbaz.a -lm"
    โหมดนี้เปิดใช้งานด้วยการระบุ linkstatic=True
  • ไดนามิก (ไลบรารีทั้งหมดจะมีการเชื่อมโยงแบบไดนามิก) (หากเวอร์ชันแบบไดนามิกคือ ใช้งานได้) เช่น "gcc foo.o libfoo.so libbaz.so -lm"
    โหมดนี้เปิดใช้งานด้วยการระบุ linkstatic=False

แอตทริบิวต์ linkstatic จะมีความหมายต่างออกไปหากใช้ใน กฎ cc_library() สำหรับไลบรารี C++ linkstatic=True จะระบุว่ามีเพียง อนุญาตให้มีการลิงก์แบบคงที่ จึงไม่มีการสร้าง .so linkstatic=False ทำ จะไม่ป้องกันการสร้างไลบรารีแบบคงที่ แอตทริบิวต์นี้มีไว้เพื่อควบคุม ของไลบรารีแบบไดนามิก

หากเป็น linkstatic=False เครื่องมือสร้างจะสร้างลิงก์สัญลักษณ์ไปยัง ไลบรารีที่ใช้ร่วมกันที่เกี่ยวข้องในพื้นที่ *.runfiles

local_defines

List of strings; optional

รายการกำหนดที่จะเพิ่มลงในบรรทัดคอมไพล์ ขึ้นอยู่กับ "ผู้ผลิต" การแทนที่ตัวแปรและ การแปลงข้อมูลเป็นโทเค็นของ Bourne Shell แต่ละสตริง ซึ่งต้องประกอบด้วยโทเค็นเชลล์ Bourne เดี่ยว มีการเพิ่ม -D ไว้ข้างหน้า และเพิ่มลงในบรรทัดคำสั่งคอมไพล์สำหรับเป้าหมายนี้ แต่ไม่ใช่เครือข่ายที่เกี่ยวข้อง
malloc

Label; optional; default is @bazel_tools//tools/cpp:malloc

ลบล้างทรัพยากร Dependency เริ่มต้นใน Malloc

โดยค่าเริ่มต้น ไบนารี C++ จะลิงก์กับ //tools/cpp:malloc ซึ่งเป็นไลบรารีว่างเปล่า ไบนารีจึงจะลงเอยด้วย libc Malloc ป้ายกำกับนี้ต้องอ้างอิงถึง cc_library หากเป็นการรวบรวมสำหรับผู้ใช้ที่ไม่ใช่ C++ ตัวเลือกนี้จะไม่มีผล ระบบจะละเว้นค่าของแอตทริบิวต์นี้หาก ระบุ linkshared=True แล้ว

nocopts

String; optional

นำรูปแบบการทำงานของคีย์เวิร์ดออกจากคำสั่งคอมไพล์ C++ ขึ้นอยู่กับ "ผู้ผลิต" แทน ระบบจะตีความค่าของแอตทริบิวต์นี้เป็นนิพจน์ทั่วไป COPTS ที่มีอยู่ก่อนหน้าซึ่งตรงกับนิพจน์ทั่วไปนี้ (รวมถึงค่าที่ระบุอย่างชัดแจ้งในแอตทริบิวต์ copts ของกฎ) จะถูกนำออกจาก COPTS เพื่อวัตถุประสงค์ในการรวบรวมกฎนี้ แอตทริบิวต์นี้ไม่จำเป็นเสมอไป
stamp

Integer; optional; default is 0

ระบุว่าจะเข้ารหัสข้อมูลบิลด์ลงในไบนารีหรือไม่ ค่าที่เป็นไปได้มีดังนี้
  • stamp = 1: ประทับตราข้อมูลบิลด์ลงในไบนารีเสมอ แม้ใน --nostamp บิลด์ ควรหลีกเลี่ยงการตั้งค่า เนื่องจากอาจทำให้การแคชระยะไกลหยุดทำงาน ไบนารีและการดำเนินการดาวน์สตรีมที่ใช้
  • stamp = 0: แทนที่ข้อมูลบิลด์ด้วยค่าคงที่เสมอ ช่วงเวลานี้ จะให้การแคชผลลัพธ์ของบิลด์ที่ดี
  • stamp = -1: การฝังข้อมูลบิลด์ควบคุมโดย Flag --[no]stamp

ระบบจะไม่สร้างไบนารีที่ประทับตราอีกครั้ง เว้นแต่ทรัพยากร Dependency จะมีการเปลี่ยนแปลง

win_def_file

Label; optional

ไฟล์ DEF ของ Windows ที่จะส่งไปยัง Linker

แอตทริบิวต์นี้ควรใช้เมื่อ 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 ราย (โปรดดูรายละเอียดด้านล่าง)

ใช้แอตทริบิวต์ toolchain_config เพื่อกำหนดค่าเครื่องมือเชน C++ ดูเพิ่มเติม เพจ สำหรับการกำหนดค่า Toolchain ของ C++ อย่างละเอียดและเอกสารการเลือก Toolchain

ใช้ tags = ["manual"] เพื่อป้องกันไม่ให้มีการสร้างและกำหนดค่าเชนเครื่องมือ โดยไม่จำเป็นเมื่อเรียกใช้ bazel build //...

อาร์กิวเมนต์

Attributes
name

Name; required

ชื่อที่ไม่ซ้ำกันสำหรับเป้าหมายนี้

all_files

Label; required

คอลเล็กชันของอาร์ติแฟกต์ cc_toolchain ทั้งหมด ระบบจะเพิ่มอาร์ติแฟกต์เหล่านี้เป็นอินพุตสำหรับ การดำเนินการที่เกี่ยวข้องกับ Rules_cc (ยกเว้นการดำเนินการที่ใช้ชุดของ อาร์ติแฟกต์จากแอตทริบิวต์ด้านล่าง) Bazel ถือว่า all_files เป็นซูเปอร์เซ็ต ของแอตทริบิวต์ที่ให้อาร์ติแฟกต์อื่นๆ ทั้งหมด (เช่น การคอมไพล์ Linktamp จำเป็นต้องมีทั้งการคอมไพล์ และลิงก์ไฟล์ ดังนั้นจึงใช้เวลา all_files)

นี่คือข้อมูลที่ cc_toolchain.files มี และ Starlark ทุกคนใช้ โดยใช้ Toolchain ของ C++

ar_files

Label; optional

คอลเล็กชันของอาร์ติแฟกต์ cc_toolchain ทั้งหมดที่จำเป็นสำหรับการดำเนินการเก็บถาวร

as_files

Label; optional

คอลเล็กชันอาร์ติแฟกต์ cc_toolchain ทั้งหมดที่จำเป็นสำหรับการดำเนินการประกอบ

compiler

String; optional; nonconfigurable

เลิกใช้งานแล้ว ให้ใช้แอตทริบิวต์ toolchain_identifier แทน ใช่เลย หลังจาก การย้ายข้อมูล CROSSTOOL ไปยัง Starlark และจะถูกนำออกโดย #7075

เมื่อตั้งค่าแล้ว เครื่องมือนี้จะใช้เพื่อดำเนินการเลือก Crosstool_config.toolchain ใช้เวลา มีความสำคัญมากกว่าตัวเลือก --cpu Bazel

compiler_files

Label; required

คอลเล็กชันอาร์ติแฟกต์ cc_toolchain ทั้งหมดที่จำเป็นสำหรับการดำเนินการคอมไพล์
compiler_files_without_includes

Label; optional

คอลเล็กชันอาร์ติแฟกต์ cc_toolchain ทั้งหมดที่จำเป็นสำหรับการดำเนินการคอมไพล์ในกรณีที่มี รองรับการค้นพบอินพุต (ปัจจุบันใช้ได้กับ Google เท่านั้น)
coverage_files

Label; optional

คอลเล็กชันอาร์ติแฟกต์ cc_toolchain ทั้งหมดที่จำเป็นสำหรับการดำเนินการเกี่ยวกับความครอบคลุม หากไม่ได้ระบุ "all_files"
cpu

String; optional; nonconfigurable

เลิกใช้งานแล้ว ให้ใช้แอตทริบิวต์ Toolchain_identifier แทน และจะเป็นเวลาสั้นๆ หลังจาก การย้ายข้อมูล CROSSTOOL ไปยัง Starlark และจะถูกนำออกโดย #7075

เมื่อตั้งค่าแล้ว เครื่องมือนี้จะใช้เพื่อดำเนินการเลือก Crosstool_config.toolchain ใช้เวลา มีความสำคัญมากกว่าตัวเลือก --cpu Bazel

dwp_files

Label; required

คอลเล็กชันอาร์ติแฟกต์ cc_toolchain ทั้งหมดที่จำเป็นสำหรับการดำเนินการ dwp
dynamic_runtime_lib

Label; optional

อาร์ติแฟกต์ไลบรารีแบบไดนามิกสำหรับไลบรารีรันไทม์ C++ (เช่น libstdc++.so)

จะมีการใช้ข้อมูลนี้เมื่อ "static_link_cpp_runtimes" เปิดใช้งานฟีเจอร์แล้ว และเรากำลังเชื่อมโยง ทรัพยากร Dependency แบบไดนามิก

exec_transition_for_inputs

Boolean; optional; default is True

ตั้งค่าเป็น "จริง" เพื่อสร้างอินพุตไฟล์ทั้งหมดไปยัง cc_toolchain สำหรับแพลตฟอร์มผู้บริหาร แทนที่จะไม่มีการเปลี่ยน (เช่น แพลตฟอร์มเป้าหมายโดยค่าเริ่มต้น)
libc_top

Label; optional

คอลเล็กชันอาร์ติแฟกต์สำหรับ libc ที่ส่งผ่านเป็นอินพุตสำหรับการดำเนินการคอมไพล์/ลิงก์
linker_files

Label; required

คอลเล็กชันของอาร์ติแฟกต์ cc_toolchain ทั้งหมดที่จำเป็นสำหรับการลิงก์
module_map

Label; optional

อาร์ติแฟกต์แมปโมดูลที่จะใช้สําหรับบิลด์แบบแยกส่วน
objcopy_files

Label; required

คอลเล็กชันอาร์ติแฟกต์ cc_toolchain ทั้งหมดที่จำเป็นสำหรับการดำเนินการ objcopy
static_runtime_lib

Label; optional

อาร์ติแฟกต์ไลบรารีแบบคงที่สำหรับไลบรารีรันไทม์ C++ (เช่น libstdc++.a)

จะมีการใช้ข้อมูลนี้เมื่อ "static_link_cpp_runtimes" เปิดใช้งานฟีเจอร์แล้ว และเรากำลังเชื่อมโยง การอ้างอิงแบบคงที่

strip_files

Label; required

คอลเล็กชันอาร์ติแฟกต์ cc_toolchain ทั้งหมดที่จำเป็นสำหรับการดำเนินการลบ
supports_header_parsing

Boolean; optional; default is False

ตั้งค่าเป็น "จริง" เมื่อ cc_toolchain รองรับการดำเนินการแยกวิเคราะห์ส่วนหัว
supports_param_files

Boolean; optional; default is True

ตั้งค่าเป็น "จริง" เมื่อ cc_toolchain รองรับการใช้ไฟล์พารามิเตอร์สำหรับการลิงก์การดำเนินการ
toolchain_config

Label; required

ป้ายกำกับของกฎที่ระบุ cc_toolchain_config_info
toolchain_identifier

String; optional; nonconfigurable

ตัวระบุที่ใช้เพื่อจับคู่ cc_toolchain กับตัวระบุ crosstool_config.toolchain.

จนกว่าปัญหา #5380 จะได้รับการแก้ไข วิธีนี้เป็นวิธีที่แนะนำในการเชื่อมโยง cc_toolchain กับ CROSSTOOL.toolchain ซึ่งจะแทนที่ด้วย toolchain_config (#5380)

cc_toolchain_suite

cc_toolchain_suite(name, compatible_with, deprecation, distribs, features, licenses, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)

แสดงคอลเล็กชันของ Toolchain ของ C++

กฎนี้มีหน้าที่รับผิดชอบในเรื่องต่อไปนี้

  • การรวบรวมเครื่องมือ C++ ที่เกี่ยวข้องทั้งหมด
  • การเลือกเครื่องมือเชน 1 รายการตามตัวเลือก --cpu และ --compiler ที่ส่งไปยัง Bazel

ดูเพิ่มเติม เพจ สำหรับการกำหนดค่า Toolchain ของ C++ อย่างละเอียดและเอกสารการเลือก Toolchain

อาร์กิวเมนต์

Attributes
name

Name; required

ชื่อที่ไม่ซ้ำกันสำหรับเป้าหมายนี้

toolchains

Dictionary mapping strings to labels; required; nonconfigurable

แผนที่จาก "<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",
            },
          )