กฎ
- cc_binary
- cc_import
- cc_library
- cc_proto_library
- cc_shared_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ตัวแปร"
สตริงแต่ละรายการจะเพิ่ม ต้องเพิ่มส่วนหัวไปยัง src หรือ hdr ไม่เช่นนั้น ส่วนหัวจะไม่สามารถใช้ได้ เมื่อคอมไพล์เป็นแซนด์บ็อกซ์ (ค่าเริ่มต้น) |
link_extra_lib
|
ป้ายกำกับ ค่าเริ่มต้นคือ
โดยค่าเริ่มต้น ไบนารี C++ จะลิงก์กับ |
linkopts
|
รายการสตริง ค่าเริ่มต้นคือ LINKOPTS ก่อน
การลิงก์เป้าหมายไบนารี
องค์ประกอบของรายการนี้ที่ไม่ได้ขึ้นต้นด้วย |
linkshared
|
บูลีน nonconfigurable; ค่าเริ่มต้นคือ linkshared=True ในกฎ โดยค่าเริ่มต้น
ตัวเลือกนี้ปิดอยู่
การมี Flag นี้แสดงว่ามีการลิงก์ด้วยแฟล็ก
หากคุณระบุทั้ง |
linkstatic
|
บูลีน ค่าเริ่มต้นคือ cc_binary และ
cc_test : ลิงก์ไบนารีในแบบคงที่
สำหรับ cc_library.linkstatic : ดูด้านล่าง
โดยค่าเริ่มต้น ตัวเลือกนี้จะเปิดอยู่สำหรับ
หากเปิดใช้และนี่เป็นไบนารีหรือการทดสอบ ตัวเลือกนี้จะบอกให้เครื่องมือบิลด์ลิงก์
การลิงก์ไฟล์ปฏิบัติการมี 3 วิธีที่แตกต่างกันดังนี้
แอตทริบิวต์
หากเป็น |
local_defines
|
รายการสตริง ค่าเริ่มต้นคือ -D ไว้ข้างหน้า และเพิ่มลงในบรรทัดคำสั่งคอมไพล์สำหรับเป้าหมายนี้
แต่ไม่ใช่เครือข่ายที่เกี่ยวข้อง
|
malloc
|
ป้ายกำกับ ค่าเริ่มต้นคือ
โดยค่าเริ่มต้น ไบนารี C++ จะลิงก์กับ |
nocopts
|
String; ค่าเริ่มต้นคือ 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.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 เพื่อบังคับใช้กฎการตรวจสอบการรวม
Toolchain ต้องรองรับฟีเจอร์ layering_check
และได้ร้องขออย่างชัดเจน เช่น ผ่านทาง
--features=layering_check
แฟล็กบรรทัดคำสั่งหรือ
features
ของพารามิเตอร์
package
Toolchain
Bazel รองรับเฉพาะฟีเจอร์นี้กับคําแปลใน 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 ส่วนหัว และระบุเส้นทางของไลบรารีเหล่านี้ (รวมถึงเส้นทางทั้งหมดของไลบรารี
deps สับเปลี่ยน) จะใช้สำหรับการรวบรวมไลบรารีนี้เท่านั้น ไม่รวมถึงไลบรารีที่
ต้องพึ่งพาสิ่งนั้น ไลบรารีที่ระบุด้วย implementation_deps ยังคงลิงก์อยู่ใน
เป้าหมายไบนารีที่ขึ้นอยู่กับไลบรารีนี้
สำหรับตอนนี้ การใช้งานจะถูกจำกัดไว้ที่ cc_libraries และได้รับการปกป้องโดย Flag
|
include_prefix
|
String; ค่าเริ่มต้นคือ เมื่อตั้งค่าแล้ว ส่วนหัวในแอตทริบิวต์ ระบบนำคำนำหน้าในแอตทริบิวต์ |
includes
|
รายการสตริง ค่าเริ่มต้นคือ
ขึ้นอยู่กับการแทนที่ "Makeตัวแปร"
สตริงแต่ละรายการจะเพิ่ม ต้องเพิ่มส่วนหัวไปยัง src หรือ hdr ไม่เช่นนั้น ส่วนหัวจะไม่สามารถใช้ได้ เมื่อคอมไพล์เป็นแซนด์บ็อกซ์ (ค่าเริ่มต้น) |
linkopts
|
รายการสตริง ค่าเริ่มต้นคือ LINKOPTS ก่อน
การลิงก์เป้าหมายไบนารี
องค์ประกอบของรายการนี้ที่ไม่ได้ขึ้นต้นด้วย |
linkstamp
|
ป้ายกำกับ ค่าเริ่มต้นคือ base
|
linkstatic
|
บูลีน ค่าเริ่มต้นคือ cc_binary และ
cc_test : ลิงก์ไบนารีในแบบคงที่
สำหรับ cc_library.linkstatic : ดูด้านล่าง
โดยค่าเริ่มต้น ตัวเลือกนี้จะเปิดอยู่สำหรับ
หากเปิดใช้และนี่เป็นไบนารีหรือการทดสอบ ตัวเลือกนี้จะบอกให้เครื่องมือบิลด์ลิงก์
การลิงก์ไฟล์ปฏิบัติการมี 3 วิธีที่แตกต่างกันดังนี้
แอตทริบิวต์
หากเป็น |
local_defines
|
รายการสตริง ค่าเริ่มต้นคือ -D ไว้ข้างหน้า และเพิ่มลงในบรรทัดคำสั่งคอมไพล์สำหรับเป้าหมายนี้
แต่ไม่ใช่เครือข่ายที่เกี่ยวข้อง
|
nocopts
|
String; ค่าเริ่มต้นคือ COPTS ที่มีอยู่ก่อนหน้าซึ่งตรงกับนิพจน์ทั่วไปนี้
(รวมถึงค่าที่ระบุอย่างชัดแจ้งในแอตทริบิวต์ copts ของกฎ) จะถูกนำออกจาก
COPTS เพื่อวัตถุประสงค์ในการรวบรวมกฎนี้
แอตทริบิวต์นี้ไม่จำเป็นเสมอไป
|
strip_include_prefix
|
String; ค่าเริ่มต้นคือ เมื่อตั้งค่าแล้ว ส่วนหัวในแอตทริบิวต์ หากเป็นเส้นทางแบบสัมพัทธ์ ระบบจะใช้เส้นทางที่สัมพันธ์กับแพ็กเกจ หากเป็นวิธีการแบบสัมบูรณ์ ระบบเข้าใจว่าเป็นเส้นทางที่สัมพันธ์กับที่เก็บ ระบบจะเพิ่มคำนำหน้าในแอตทริบิวต์ |
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
ซึ่งเป็นการขึ้นต่อกันแบบสับเปลี่ยน ไม่ได้ผล
ลิงก์ 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.
สิ่งนี้จะเกิดขึ้นเมื่อใดก็ตามที่คุณสร้างเป้าหมายที่มี
ทรัพยากร Dependency cc_shared_library
ที่ส่งออกเป้าหมายเดียวกัน วิธีแก้ไขปัญหา
คุณต้องหยุดการส่งออกไลบรารีใน
ทรัพยากร Dependency cc_shared_library
Two shared libraries in dependencies link the same library statically
กรณีนี้จะเกิดขึ้นทุกครั้งที่คุณสร้าง cc_shared_library
ใหม่ที่มี
ทรัพยากร Dependency ของ cc_shared_library
ที่แตกต่างกันซึ่งลิงก์เป้าหมายเดียวกันแบบคงที่
คล้ายกับข้อผิดพลาดที่เกิดขึ้นกับการส่งออก
วิธีหนึ่งที่จะแก้ปัญหานี้คือการหยุดลิงก์ไลบรารีกับหนึ่งใน
ทรัพยากร Dependency cc_shared_library
ในขณะเดียวกัน เว็บนั้นก็ยังคงลิงก์กับ
ต้องส่งออกไลบรารีเพื่อให้รายการที่ไม่ได้ลิงก์ยังคงมองเห็น
สัญลักษณ์ต่างๆ อีกวิธีหนึ่งคือการดึงไลบรารีรายการที่ 3 ที่ส่งออกเป้าหมายนั้น
วิธีที่ 3 คือการติดแท็กผู้กระทำผิด cc_library
ด้วย LINKABLE_MORE_THAN_ONCE
แต่การแก้ไขนี้เกิดขึ้นไม่บ่อยนัก และคุณควรแน่ใจว่า
จริงๆ แล้ว cc_library
ปลอดภัยที่จะลิงก์มากกว่า 1 ครั้ง
'//foo:foo' is already linked statically in '//bar:bar' but not exported`
ซึ่งหมายความว่าคุณจะเข้าถึงไลบรารีที่อยู่ระหว่างการปิดแบบทางอ้อมของ deps
ได้
โดยไม่ผ่านหนึ่งในทรัพยากร Dependency cc_shared_library
แต่ได้กลายเป็น
ลิงก์กับ cc_shared_library
อื่นใน dynamic_deps
และไม่ใช่
ส่งออกแล้ว
วิธีแก้ไขคือให้ส่งออกข้อมูลจากทรัพยากร Dependency ของ 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
คุณจะเห็นข้อผิดพลาดนี้หากในกฎปัจจุบันมีการอ้างสิทธิ์เพื่อส่งออก เป้าหมายที่ส่งออกโดยทรัพยากร Dependency แบบไดนามิกรายการใดรายการหนึ่งแล้ว
ในการแก้ไขปัญหานี้ ให้นำเป้าหมายออกจาก deps
และอาศัยเป้าหมายจากไดนามิก
ทรัพยากร Dependency หรือตรวจสอบว่า exports_filter
ตรวจไม่พบเป้าหมายนี้
อาร์กิวเมนต์
Attributes | |
---|---|
name |
ชื่อ ต้องระบุ ชื่อที่ไม่ซ้ำกันสำหรับเป้าหมายนี้ |
deps
|
รายการป้ายกำกับ ค่าเริ่มต้นคือ
ทรัพยากร Dependency ของไลบรารีแบบทรานซิทีฟของ Dep โดยตรงเหล่านี้จะลิงก์กับรายการที่แชร์นี้
ตราบใดที่ยังไม่ได้ลิงก์โดย
ระหว่างการวิเคราะห์ การใช้งานกฎจะพิจารณาเป้าหมายที่ระบุไว้ใน
การติดตั้งใช้งานยังจะทริกเกอร์ข้อผิดพลาดเมื่อใดก็ตามที่ลิงก์ไลบรารีเดียวกันแบบคงที่
ให้เป็น |
additional_linker_inputs
|
รายการป้ายกำกับ ค่าเริ่มต้นคือ user_link_flags
|
dynamic_deps
|
รายการป้ายกำกับ ค่าเริ่มต้นคือ cc_shared_library ที่เป้าหมายปัจจุบันใช้งานอยู่
การใช้งาน |
exports_filter
|
รายการสตริง ค่าเริ่มต้นคือ
ระบบเข้าใจว่า
โปรดทราบว่าแอตทริบิวต์นี้ไม่ได้เพิ่มเอดจ์ของทรัพยากร Dependency ไปยังเป้าหมายเหล่านั้น
Dependency Edge ควรสร้างโดย ระบบอนุญาตให้ใช้ไวยากรณ์ต่อไปนี้
|
shared_lib_name
|
String; ค่าเริ่มต้นคือ |
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 เป็นแพลตฟอร์มเป้าหมายเท่านั้น สามารถใช้เพื่อ สัญลักษณ์ส่งออกในระหว่างการลิงก์ไลบรารีที่ใช้ร่วมกัน |
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 |
ชื่อ ต้องระบุ ชื่อที่ไม่ซ้ำกันสำหรับเป้าหมายนี้ |
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
|
String; ค่าเริ่มต้นคือ |
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 ที่อยู่ในพื้นที่ทำงานหรือในช่องที่ระบุ Absolute Path ตัวอย่าง
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
|
String; ค่าเริ่มต้นคือ |
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ตัวแปร"
สตริงแต่ละรายการจะเพิ่ม ต้องเพิ่มส่วนหัวไปยัง src หรือ hdr ไม่เช่นนั้น ส่วนหัวจะไม่สามารถใช้ได้ เมื่อคอมไพล์เป็นแซนด์บ็อกซ์ (ค่าเริ่มต้น) |
link_extra_lib
|
ป้ายกำกับ ค่าเริ่มต้นคือ
โดยค่าเริ่มต้น ไบนารี C++ จะลิงก์กับ |
linkopts
|
รายการสตริง ค่าเริ่มต้นคือ LINKOPTS ก่อน
การลิงก์เป้าหมายไบนารี
องค์ประกอบของรายการนี้ที่ไม่ได้ขึ้นต้นด้วย |
linkstatic
|
บูลีน ค่าเริ่มต้นคือ cc_binary และ
cc_test : ลิงก์ไบนารีในแบบคงที่
สำหรับ cc_library.linkstatic : ดูด้านล่าง
โดยค่าเริ่มต้น ตัวเลือกนี้จะเปิดอยู่สำหรับ
หากเปิดใช้และนี่เป็นไบนารีหรือการทดสอบ ตัวเลือกนี้จะบอกให้เครื่องมือบิลด์ลิงก์
การลิงก์ไฟล์ปฏิบัติการมี 3 วิธีที่แตกต่างกันดังนี้
แอตทริบิวต์
หากเป็น |
local_defines
|
รายการสตริง ค่าเริ่มต้นคือ -D ไว้ข้างหน้า และเพิ่มลงในบรรทัดคำสั่งคอมไพล์สำหรับเป้าหมายนี้
แต่ไม่ใช่เครือข่ายที่เกี่ยวข้อง
|
malloc
|
ป้ายกำกับ ค่าเริ่มต้นคือ
โดยค่าเริ่มต้น ไบนารี C++ จะลิงก์กับ |
nocopts
|
String; ค่าเริ่มต้นคือ 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++
ดูเพิ่มเติม
เพจ
สำหรับการกำหนดค่า Toolchain ของ C++ อย่างละเอียดและเอกสารการเลือก Toolchain
ใช้ tags = ["manual"]
เพื่อป้องกันไม่ให้มีการสร้างและกำหนดค่าเชนเครื่องมือ
โดยไม่จำเป็นเมื่อเรียกใช้ bazel build //...
อาร์กิวเมนต์
Attributes | |
---|---|
name |
ชื่อ ต้องระบุ ชื่อที่ไม่ซ้ำกันสำหรับเป้าหมายนี้ |
all_files
|
ป้ายกำกับ ต้องระบุ คอลเล็กชันของอาร์ติแฟกต์ cc_toolchain ทั้งหมด ระบบจะเพิ่มอาร์ติแฟกต์เหล่านี้เป็นอินพุตสำหรับ การดำเนินการที่เกี่ยวข้องกับ Rules_cc (ยกเว้นการดำเนินการที่ใช้ชุดของ อาร์ติแฟกต์จากแอตทริบิวต์ด้านล่าง) Bazel ถือว่าall_files เป็นซูเปอร์เซ็ต
ของแอตทริบิวต์ที่ให้อาร์ติแฟกต์อื่นๆ ทั้งหมด (เช่น การคอมไพล์ Linktamp จำเป็นต้องมีทั้งการคอมไพล์
และลิงก์ไฟล์ ดังนั้นจึงใช้เวลา 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" เปิดใช้งานฟีเจอร์แล้ว และเรากำลังเชื่อมโยง ทรัพยากร Dependency แบบไดนามิก |
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 ทั้งหมดที่จำเป็นสำหรับการดำเนินการลบ |
supports_header_parsing
|
บูลีน ค่าเริ่มต้นคือ |
supports_param_files
|
บูลีน ค่าเริ่มต้นคือ |
toolchain_config
|
ป้ายกำกับ ต้องระบุ ป้ายกำกับของกฎที่ระบุcc_toolchain_config_info
|
toolchain_identifier
|
String; nonconfigurable; ค่าเริ่มต้นคือ
จนกว่าปัญหา #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 |
ชื่อ ต้องระบุ ชื่อที่ไม่ซ้ำกันสำหรับเป้าหมายนี้ |
toolchains
|
สตริงการจับคู่พจนานุกรมกับป้ายกำกับ 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", }, ) |