กฎ
- 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
|
รายการสตริง ค่าเริ่มต้นคือ
ขึ้นอยู่กับการแทนที่ "Make variable"
สตริงแต่ละรายการจะมี คุณต้องเพิ่มส่วนหัวลงใน srcs หรือ hdrs มิฉะนั้นกฎที่เกี่ยวข้องจะใช้ไม่ได้เมื่อการคอมไพล์อยู่ในแซนด์บ็อกซ์ (ค่าเริ่มต้น) |
link_extra_lib
|
ป้ายกํากับ ค่าเริ่มต้นคือ
โดยค่าเริ่มต้น ระบบจะลิงก์ไบนารี C++ กับ |
linkopts
|
รายการสตริง ค่าเริ่มต้นคือ LINKOPTS ก่อนลิงก์เป้าหมายไบนารี
ระบบจะถือว่าองค์ประกอบแต่ละรายการในรายการนี้ที่ไม่ได้ขึ้นต้นด้วย |
linkshared
|
บูลีน ไม่สามารถกําหนดค่าได้ ค่าเริ่มต้นคือ linkshared=True ในกฎ ตัวเลือกนี้จะปิดอยู่โดยค่าเริ่มต้น
การมี Flag นี้หมายความว่ามีการลิงก์ Flag
หากคุณระบุทั้ง |
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 อาศัยการรองรับเครื่องมือทางเทคนิคเพื่อบังคับใช้กฎการตรวจสอบการรวม
เครื่องมือควรรองรับฟีเจอร์ layering_check
และมีการขออย่างชัดแจ้ง เช่น ผ่าน Flag บรรทัดคำสั่ง --features=layering_check
หรือพารามิเตอร์ features
ของฟังก์ชัน package
เครื่องมือทางเทคนิคที่ 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 ตรงที่ส่วนหัวและเส้นทางรวมของไลบรารีเหล่านี้ (และ Dependency แบบทรานซิทีฟทั้งหมด) จะใช้สำหรับการคอมไพล์ไลบรารีนี้เท่านั้น ไม่ใช่ไลบรารีที่ขึ้นอยู่กับไลบรารีนี้ ไลบรารีที่ระบุด้วย implementation_deps จะยังคงลิงก์อยู่ในเป้าหมายไบนารีที่ขึ้นอยู่กับไลบรารีนี้
ขณะนี้การใช้งานจะจํากัดอยู่ที่ cc_libraries และได้รับการปกป้องโดย Flag
|
include_prefix
|
สตริง ค่าเริ่มต้นคือ เมื่อตั้งค่าแล้ว ระบบจะเข้าถึงส่วนหัวในแอตทริบิวต์ ระบบจะนำคำนำหน้าในแอตทริบิวต์ |
includes
|
รายการสตริง ค่าเริ่มต้นคือ
ขึ้นอยู่กับการแทนที่ "Make variable"
สตริงแต่ละรายการจะมี คุณต้องเพิ่มส่วนหัวลงใน 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
ลิงก์กับ foo
แบบทรานซิทีฟ แต่ไม่ลิงก์ bar
เนื่องจาก dynamic_dep
bar_shared
ระบุค่านี้แบบไดนามิกอยู่แล้ว
foo_shared
ใช้ไฟล์สคริปต์ linker *.lds เพื่อควบคุมว่าควรส่งออกสัญลักษณ์ใด ตรรกะกฎ cc_shared_library
ไม่ได้ควบคุมว่าจะส่งออกสัญลักษณ์ใด แต่จะใช้เฉพาะสิ่งที่คาดว่าจะส่งออกเพื่อให้ข้อผิดพลาดในระยะการวิเคราะห์หากไลบรารีที่แชร์ 2 รายการส่งออกเป้าหมายเดียวกัน
ระบบจะถือว่าการพึ่งพาโดยตรงทั้งหมดของ cc_shared_library
ได้รับการส่งออกแล้ว ดังนั้น Bazel จะถือว่าfoo
ส่งออกโดยfoo_shared
ในระหว่างการวิเคราะห์ ระบบจะไม่ถือว่า baz
ได้รับการส่งออกโดย foo_shared
ระบบจะถือว่ามีการส่งออกเป้าหมายทุกรายการที่ตรงกับ exports_filter
ด้วย
cc_library
แต่ละรายการในตัวอย่างควรปรากฏไม่เกิน 1 ครั้งใน
cc_shared_library
หากต้องการลิงก์ 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.
เหตุการณ์นี้จะเกิดขึ้นทุกครั้งที่คุณสร้างเป้าหมายที่มีcc_shared_library
ข้อกําหนด 2 ข้อที่แตกต่างกันซึ่งส่งออกเป้าหมายเดียวกัน หากต้องการแก้ไขปัญหานี้ คุณจะต้องหยุดการส่งออกไลบรารีในcc_shared_library
Dependency รายการใดรายการหนึ่ง
Two shared libraries in dependencies link the same library statically
ปัญหานี้จะเกิดขึ้นทุกครั้งที่คุณสร้าง cc_shared_library
ใหม่ที่มี cc_shared_library
ที่ต้องพึ่งพา 2 รายการที่แตกต่างกันซึ่งลิงก์เป้าหมายเดียวกันแบบคงที่
คล้ายกับข้อผิดพลาดในการส่งออก
วิธีหนึ่งในการแก้ไขปัญหานี้คือหยุดลิงก์ไลบรารีกับ Dependency ของ cc_shared_library
ในขณะเดียวกัน บัญชีที่ยังคงลิงก์อยู่จะต้องส่งออกไลบรารีเพื่อให้บัญชีที่ไม่ได้ลิงก์ยังคงมองเห็นสัญลักษณ์ได้ อีกวิธีหนึ่งคือดึงไลบรารีที่ 3 ที่ส่งออกเป้าหมาย
วิธีที่สามคือการติดแท็ก cc_library
ที่เป็นปัญหาด้วย LINKABLE_MORE_THAN_ONCE
แต่วิธีนี้ควรใช้น้อยครั้งและคุณควรตรวจสอบให้แน่ใจว่า cc_library
นั้นปลอดภัยที่จะลิงก์มากกว่า 1 ครั้ง
'//foo:foo' is already linked statically in '//bar:bar' but not exported`
ซึ่งหมายความว่าเข้าถึงไลบรารีใน Closure แบบโอนได้ของ deps
ได้โดยไม่ต้องผ่าน Dependency ของ cc_shared_library
รายการใดรายการหนึ่ง แต่มีการลิงก์กับ cc_shared_library
อื่นใน dynamic_deps
อยู่แล้วและไม่ได้ส่งออก
วิธีแก้ปัญหาคือส่งออกจากcc_shared_library
Dependency หรือดึง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
และใช้จากไดนามิก Dependency เท่านั้น หรือตรวจสอบว่า exports_filter
ไม่ได้จับเป้าหมายนี้
อาร์กิวเมนต์
Attributes | |
---|---|
name |
ชื่อ ต้องระบุ ชื่อที่ไม่ซ้ำกันสำหรับเป้าหมายนี้ |
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
รวมถึง Dependency แบบเปลี่ยนผ่าน โดยให้ความสำคัญกับออบเจ็กต์ PIC
กลุ่มเอาต์พุต
linkdeps
ไฟล์ข้อความที่มีป้ายกำกับของทรัพยากร Dependency แบบทรานซิทีฟของเป้าหมายที่แสดงใน deps
ซึ่งไม่ได้มีส่วนร่วมในไฟล์ออบเจ็กต์ของไลบรารีแบบคงที่ แต่มีไลบรารีแบบคงที่ แบบไดนามิก หรือแบบอินเทอร์เฟซอย่างน้อย 1 รายการ ไลบรารีแบบคงที่ที่ได้อาจกำหนดให้ต้องลิงก์ไลบรารีเหล่านี้
linkopts
ไฟล์ข้อความที่มี linkopts
ที่ผู้ใช้ระบุของข้อกำหนดเชิงการเปลี่ยนผันทั้งหมดของเป้าหมายที่แสดงใน deps
สัญลักษณ์ซ้ำ
โดยค่าเริ่มต้น กฎ cc_static_library
จะตรวจสอบว่าไลบรารีแบบคงที่ที่ได้ไม่มีสัญลักษณ์ที่ซ้ำกัน หากมี การสร้างจะล้มเหลวพร้อมข้อความแสดงข้อผิดพลาดที่แสดงรายการสัญลักษณ์ที่ซ้ำกันและไฟล์ออบเจ็กต์ที่มีสัญลักษณ์ดังกล่าว
คุณสามารถปิดใช้การตรวจสอบนี้ตามเป้าหมายหรือตามแพ็กเกจได้โดยการตั้งค่า
features = ["-symbol_check"]
หรือปิดใช้ทั่วโลกผ่าน
--features=-symbol_check
การรองรับชุดเครื่องมือสำหรับ symbol_check
เครื่องมือทางภาษา C++ ที่กําหนดค่าโดยอัตโนมัติซึ่งมาพร้อมกับ Bazel รองรับฟีเจอร์ symbol_check
บนทุกแพลตฟอร์ม เครื่องมือทางเทคนิคที่กําหนดเองสามารถเพิ่มการรองรับได้ 2 วิธีดังนี้
- การใช้การดําเนินการ
ACTION_NAMES.validate_static_library
และเปิดใช้ด้วยฟีเจอร์symbol_check
ระบบจะเรียกใช้เครื่องมือที่ตั้งค่าไว้ในการดำเนินการด้วยอาร์กิวเมนต์ 2 รายการ ได้แก่ ไลบรารีแบบคงที่เพื่อตรวจหาสัญลักษณ์ที่ซ้ำกัน และเส้นทางของไฟล์ที่ต้องสร้างขึ้นหากการตรวจสอบผ่าน - การมีฟีเจอร์
symbol_check
จะเพิ่ม Flag ของโปรแกรมเก็บถาวรที่ทำให้การดำเนินการสร้างไลบรารีแบบคงที่ล้มเหลวเมื่อพบสัญลักษณ์ที่ซ้ำกัน
อาร์กิวเมนต์
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
|
รายการสตริง ค่าเริ่มต้นคือ
ขึ้นอยู่กับการแทนที่ "Make variable"
สตริงแต่ละรายการจะมี คุณต้องเพิ่มส่วนหัวลงใน 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
) ซึ่งโดยปกติแล้วจะเป็นกลุ่มไฟล์ที่รวมไฟล์ที่จำเป็นทั้งหมด -
การสร้างบรรทัดคำสั่งที่ถูกต้องสําหรับการดำเนินการ C++ ซึ่งทำได้โดยใช้ผู้ให้บริการ
CcToolchainConfigInfo
(ดูรายละเอียดด้านล่าง)
ใช้แอตทริบิวต์ toolchain_config
เพื่อกำหนดค่าชุดเครื่องมือ C++
ดูเอกสารประกอบเกี่ยวกับการกำหนดค่าและการเลือกเครื่องมือชุด C++ ที่ละเอียดได้ที่นี่
หน้านี้
ใช้ tags = ["manual"]
เพื่อป้องกันไม่ให้ระบบสร้างและกำหนดค่าเครื่องมือทางเทคนิคโดยไม่จำเป็นเมื่อเรียกใช้ bazel build //...
อาร์กิวเมนต์
Attributes | |
---|---|
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
|
ป้ายกำกับ (ต้องระบุ) การเก็บรวบรวมอาร์ติแฟกต์ 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++
กฎนี้มีหน้าที่ดังนี้
- รวบรวมเครื่องมือทางเทคนิค C++ ที่เกี่ยวข้องทั้งหมด
-
การเลือก Toolchain 1 รายการตามตัวเลือก
--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", }, ) |