กฎ
- cc_binary
- cc_import
- cc_library
- cc_proto_library
- fdo_prefetch_hints
- fdo_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, linkopts, linkshared, linkstatic, local_defines, malloc, nocopts, output_licenses, restricted_to, stamp, tags, target_compatible_with, testonly, toolchains, visibility, win_def_file)
เป้าหมายเอาต์พุตโดยนัย
name.stripped
(สร้างเฉพาะเมื่อขออย่างชัดแจ้ง): ไบนารีเวอร์ชันที่ถูกตัดออก จะมีการเรียกใช้strip -g
ในไบนารีเพื่อนำสัญลักษณ์การแก้ไขข้อบกพร่องออก คุณระบุตัวเลือกแถบเพิ่มเติมในบรรทัดคำสั่งได้โดยใช้--stripopt=-foo
ระบบจะสร้างเอาต์พุตนี้ก็ต่อเมื่อมีการขออย่างชัดแจ้งเท่านั้นname.dwp
(สร้างเมื่อมีการขออย่างชัดแจ้งเท่านั้น): หากเปิดใช้ Fission อยู่: ไฟล์แพ็กเกจข้อมูลการแก้ไขข้อบกพร่องที่เหมาะสำหรับการแก้ไขข้อบกพร่องไบนารีที่ใช้งานจากระยะไกล อื่นๆ: ไฟล์เปล่า
อาร์กิวเมนต์
Attributes | |
---|---|
name |
ชื่อที่ไม่ซ้ำกันสำหรับเป้าหมายนี้ |
deps
|
ซึ่งอาจเป็นเป้าหมาย |
srcs
|
ระบบจะคอมไพล์ไฟล์ ระบบจะไม่คอมไพล์ไฟล์ ต้องพูดถึงไฟล์ทั้งหมด หากชื่อของกฎอยู่ใน
ไฟล์ที่อนุญาต
...และกฎต่างๆ ที่สร้างไฟล์เหล่านี้ ส่วนขยายที่ต่างกันจะบ่งชี้ภาษาโปรแกรมที่ต่างกันตามธรรมเนียมของ GCC |
additional_linker_inputs
|
เช่น ไฟล์ .res ของ Windows ที่คอมไพล์อาจจะมีให้ที่นี่เพื่อฝังลงในเป้าหมายไบนารี |
copts
|
ระบบจะเพิ่มสตริงแต่ละรายการในแอตทริบิวต์นี้ตามลำดับที่กำหนดไปยัง
หากแพ็กเกจประกาศฟีเจอร์
|
defines
|
-D ไว้หน้าและเพิ่มลงในบรรทัดคำสั่งคอมไพล์ให้กับเป้าหมายนี้ รวมถึงกฎทั้งหมดที่ต้องใช้โทเค็นดังกล่าว โปรดใช้ความระมัดระวังให้มาก เนื่องจากอาจส่งผลกระทบในวงกว้าง หากไม่แน่ใจ ให้เพิ่มการกําหนดค่าลงใน local_defines แทน
|
includes
|
ขึ้นอยู่กับการแทนที่ "สร้างตัวแปร"
แต่ละสตริงจะใส่ ต้องเพิ่มส่วนหัวลงใน srcs หรือ hdrs ไม่เช่นนั้นจะใช้ไม่ได้กับกฎที่เกี่ยวข้องเมื่อการคอมไพล์เป็นแซนด์บ็อกซ์ (ค่าเริ่มต้น) |
linkopts
|
LINKOPTS ก่อนลิงก์เป้าหมายไบนารี
ระบบจะถือว่าแต่ละองค์ประกอบในรายการนี้ที่ไม่ได้ขึ้นต้นด้วย |
linkshared
|
linkshared=True ไว้ในกฎ ตัวเลือกนี้จะปิดอยู่โดยค่าเริ่มต้น
การมี Flag นี้หมายความว่าการลิงก์เกิดขึ้นพร้อมกับแฟล็ก
หากระบุทั้ง |
linkstatic
|
cc_binary และ cc_test : ลิงก์ไบนารีในโหมดคงที่ สำหรับ cc_library.linkstatic : โปรดดูด้านล่าง
ตามค่าเริ่มต้น ตัวเลือกนี้จะเปิดอยู่สำหรับ
หากเปิดใช้และนี่เป็นไบนารีหรือการทดสอบ ตัวเลือกนี้จะบอกให้เครื่องมือสร้างลิงก์ใน การลิงก์ไฟล์ปฏิบัติการทำได้ 3 วิธีดังนี้
แอตทริบิวต์
หากตั้งค่าเป็น |
local_defines
|
-D และเพิ่มในบรรทัดคำสั่งของคอมไพล์สำหรับเป้าหมายนี้ แต่ไม่เพิ่มลงในทรัพยากร Dependency
|
malloc
|
โดยค่าเริ่มต้น ไบนารี C++ จะลิงก์กับ |
nocopts
|
COPTS ที่มีอยู่แล้วก่อนหน้าที่ตรงกับนิพจน์ทั่วไปนี้ (รวมถึงค่าที่ระบุอย่างชัดแจ้งในแอตทริบิวต์ copts ของกฎ) ออกจาก COPTS เพื่อจุดประสงค์ในการคอมไพล์กฎนี้
แอตทริบิวต์นี้ไม่จำเป็นต้องใช้บ่อยนัก
|
stamp
|
ระบบจะไม่สร้างไบนารีที่ประทับตราขึ้นมาใหม่เว้นแต่มีการเปลี่ยนแปลงทรัพยากร Dependency |
win_def_file
|
ควรใช้แอตทริบิวต์นี้เมื่อ 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 |
ชื่อที่ไม่ซ้ำกันสำหรับเป้าหมายนี้ |
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 ไม่สามารถแยกแยะความแตกต่างระหว่างการรวมโดยตรงและการรวมแบบสกรรมได้ ดังนั้นจึงไม่สามารถตรวจจับกรณีข้อผิดพลาดที่ไฟล์มีส่วนหัวโดยตรงแต่อนุญาตให้รวมไว้แบบชั่วคราวเท่านั้นอย่างผิดกฎหมาย เช่น Bazel จะไม่บ่นหากในตัวอย่างข้างต้น foo.cc
มี baz.h
โดยตรง การกระทำนี้อาจผิดกฎหมาย เนื่องจาก foo
ไม่ได้อาศัย baz
โดยตรง ขณะนี้จะไม่เกิดข้อผิดพลาดในกรณีนั้น แต่อาจเพิ่มการตรวจสอบข้อผิดพลาดดังกล่าวในอนาคต
อาร์กิวเมนต์
Attributes | |
---|---|
name |
ชื่อที่ไม่ซ้ำกันสำหรับเป้าหมายนี้ |
deps
|
ซึ่งอาจเป็นเป้าหมาย |
srcs
|
ระบบจะคอมไพล์ไฟล์ ระบบจะไม่คอมไพล์ไฟล์ ต้องพูดถึงไฟล์ทั้งหมด หากชื่อของกฎอยู่ใน
ไฟล์ที่อนุญาต
...และกฎต่างๆ ที่สร้างไฟล์เหล่านี้ ส่วนขยายที่ต่างกันจะบ่งชี้ภาษาโปรแกรมที่ต่างกันตามธรรมเนียมของ GCC |
hdrs
|
ตำแหน่งนี้เป็นตำแหน่งที่แนะนำอย่างยิ่งสำหรับการประกาศไฟล์ส่วนหัวที่อธิบายอินเทอร์เฟซของไลบรารี ส่วนหัวเหล่านี้จะสามารถรวมตามแหล่งที่มาในกฎนี้หรือในกฎที่เกี่ยวข้องได้
ส่วนหัวที่ไม่ได้มีไว้สำหรับให้ไคลเอ็นต์ของไลบรารีนี้รวมอยู่ควรแสดงในแอตทริบิวต์ |
additional_compiler_inputs
|
|
additional_linker_inputs
|
เช่น ไฟล์ .res ของ Windows ที่คอมไพล์อาจจะมีให้ที่นี่เพื่อฝังลงในเป้าหมายไบนารี |
alwayslink
|
srcs แม้ว่าบางไฟล์จะไม่มีสัญลักษณ์ที่ไบนารีอ้างอิงก็ตาม
ซึ่งจะเป็นประโยชน์หากไม่มีการเรียกใช้โค้ดอย่างชัดแจ้งในไบนารี เช่น หากโค้ดของคุณบันทึกเพื่อรับโค้ดเรียกกลับจากบางบริการ
หาก Alwayslink ใช้ไม่ได้กับ VS 2017 บน Windows นั่นเป็นเพราะปัญหาที่ทราบแล้ว โปรดอัปเกรด VS 2017 เป็นเวอร์ชันล่าสุด |
copts
|
ระบบจะเพิ่มสตริงแต่ละรายการในแอตทริบิวต์นี้ตามลำดับที่กำหนดไปยัง
หากแพ็กเกจประกาศฟีเจอร์
|
defines
|
-D ไว้หน้าและเพิ่มลงในบรรทัดคำสั่งคอมไพล์ให้กับเป้าหมายนี้ รวมถึงกฎทั้งหมดที่ต้องใช้โทเค็นดังกล่าว โปรดใช้ความระมัดระวังให้มาก เนื่องจากอาจส่งผลกระทบในวงกว้าง หากไม่แน่ใจ ให้เพิ่มการกําหนดค่าลงใน local_defines แทน
|
implementation_deps
|
deps ตรงที่ไม่ต้องใช้ไลบรารีที่อาศัยไลบรารีนี้ ไลบรารีที่ระบุด้วย implementation_deps ยังคงลิงก์อยู่ในเป้าหมายไบนารีที่ขึ้นอยู่กับไลบรารีนี้
สำหรับตอนนี้การใช้งานจะจำกัดอยู่ที่ cc_libraries และได้รับการปกป้องโดยแฟล็ก |
include_prefix
|
เมื่อตั้งค่าแล้ว ส่วนหัวในแอตทริบิวต์ นำคำนำหน้าในแอตทริบิวต์ |
includes
|
ขึ้นอยู่กับการแทนที่ "สร้างตัวแปร"
แต่ละสตริงจะใส่ ต้องเพิ่มส่วนหัวลงใน srcs หรือ hdrs ไม่เช่นนั้นจะใช้ไม่ได้กับกฎที่เกี่ยวข้องเมื่อการคอมไพล์เป็นแซนด์บ็อกซ์ (ค่าเริ่มต้น) |
linkopts
|
LINKOPTS ก่อนลิงก์เป้าหมายไบนารี
ระบบจะถือว่าแต่ละองค์ประกอบในรายการนี้ที่ไม่ได้ขึ้นต้นด้วย |
linkstamp
|
base เท่านั้น
|
linkstatic
|
cc_binary และ cc_test : ลิงก์ไบนารีในโหมดคงที่ สำหรับ cc_library.linkstatic : โปรดดูด้านล่าง
ตามค่าเริ่มต้น ตัวเลือกนี้จะเปิดอยู่สำหรับ
หากเปิดใช้และนี่เป็นไบนารีหรือการทดสอบ ตัวเลือกนี้จะบอกให้เครื่องมือสร้างลิงก์ใน การลิงก์ไฟล์ปฏิบัติการทำได้ 3 วิธีดังนี้
แอตทริบิวต์
หากตั้งค่าเป็น |
local_defines
|
-D และเพิ่มในบรรทัดคำสั่งของคอมไพล์สำหรับเป้าหมายนี้ แต่ไม่เพิ่มลงในทรัพยากร Dependency
|
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++
|
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
|
|
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, linkopts, linkstatic, local, local_defines, malloc, nocopts, restricted_to, shard_count, size, stamp, tags, target_compatible_with, testonly, timeout, toolchains, visibility, win_def_file)
อาร์กิวเมนต์
Attributes | |
---|---|
name |
ชื่อที่ไม่ซ้ำกันสำหรับเป้าหมายนี้ |
deps
|
ซึ่งอาจเป็นเป้าหมาย |
srcs
|
ระบบจะคอมไพล์ไฟล์ ระบบจะไม่คอมไพล์ไฟล์ ต้องพูดถึงไฟล์ทั้งหมด หากชื่อของกฎอยู่ใน
ไฟล์ที่อนุญาต
...และกฎต่างๆ ที่สร้างไฟล์เหล่านี้ ส่วนขยายที่ต่างกันจะบ่งชี้ภาษาโปรแกรมที่ต่างกันตามธรรมเนียมของ GCC |
additional_linker_inputs
|
เช่น ไฟล์ .res ของ Windows ที่คอมไพล์อาจจะมีให้ที่นี่เพื่อฝังลงในเป้าหมายไบนารี |
copts
|
ระบบจะเพิ่มสตริงแต่ละรายการในแอตทริบิวต์นี้ตามลำดับที่กำหนดไปยัง
หากแพ็กเกจประกาศฟีเจอร์
|
defines
|
-D ไว้หน้าและเพิ่มลงในบรรทัดคำสั่งคอมไพล์ให้กับเป้าหมายนี้ รวมถึงกฎทั้งหมดที่ต้องใช้โทเค็นดังกล่าว โปรดใช้ความระมัดระวังให้มาก เนื่องจากอาจส่งผลกระทบในวงกว้าง หากไม่แน่ใจ ให้เพิ่มการกําหนดค่าลงใน local_defines แทน
|
includes
|
ขึ้นอยู่กับการแทนที่ "สร้างตัวแปร"
แต่ละสตริงจะใส่ ต้องเพิ่มส่วนหัวลงใน srcs หรือ hdrs ไม่เช่นนั้นจะใช้ไม่ได้กับกฎที่เกี่ยวข้องเมื่อการคอมไพล์เป็นแซนด์บ็อกซ์ (ค่าเริ่มต้น) |
linkopts
|
LINKOPTS ก่อนลิงก์เป้าหมายไบนารี
ระบบจะถือว่าแต่ละองค์ประกอบในรายการนี้ที่ไม่ได้ขึ้นต้นด้วย |
linkstatic
|
cc_binary และ cc_test : ลิงก์ไบนารีในโหมดคงที่ สำหรับ cc_library.linkstatic : โปรดดูด้านล่าง
ตามค่าเริ่มต้น ตัวเลือกนี้จะเปิดอยู่สำหรับ
หากเปิดใช้และนี่เป็นไบนารีหรือการทดสอบ ตัวเลือกนี้จะบอกให้เครื่องมือสร้างลิงก์ใน การลิงก์ไฟล์ปฏิบัติการทำได้ 3 วิธีดังนี้
แอตทริบิวต์
หากตั้งค่าเป็น |
local_defines
|
-D และเพิ่มในบรรทัดคำสั่งของคอมไพล์สำหรับเป้าหมายนี้ แต่ไม่เพิ่มลงในทรัพยากร Dependency
|
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, 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++
นอกจากนี้ โปรดดูเอกสารประกอบเกี่ยวกับการกำหนดค่าเชนเครื่องมือของ C++ และการเลือกเครื่องมืออย่างละเอียดใน
หน้านี้
ใช้ tags = ["manual"]
เพื่อป้องกันไม่ให้ระบบสร้างและกำหนดค่า Toolchain ไม่จำเป็นเมื่อเรียกใช้ bazel build //...
อาร์กิวเมนต์
Attributes | |
---|---|
name |
ชื่อที่ไม่ซ้ำกันสำหรับเป้าหมายนี้ |
all_files
|
all_files เป็นชุด Supers ของแอตทริบิวต์ที่มีอาร์ติแฟกต์อื่นๆ ทั้งหมด (เช่น การคอมไพล์ linktamp ต้องใช้ทั้งไฟล์คอมไพล์และลิงก์ ดังนั้นต้องใช้ all_files )
เงื่อนไขนี้คือสิ่งที่ |
ar_files
|
คอลเล็กชันของอาร์ติแฟกต์ cc_toolchain ทั้งหมดที่ต้องใช้ในการเก็บถาวร |
as_files
|
คอลเล็กชันของอาร์ติแฟกต์ cc_toolchain ทั้งหมดที่จำเป็นสำหรับการทำงานเพื่อประกอบ |
compiler
|
toolchain_identifier แทน ซึ่งจะเป็นโหนดหลังจากมีการ
ย้ายข้อมูล CROSSTOOL ไปยัง Starlark
และจะถูกนำออกภายในวันที่ #7075
เมื่อตั้งค่าแล้วจะใช้เพื่อทำการเลือก Crosstool_config.toolchain ซึ่งจะมีลำดับความสำคัญเหนือตัวเลือก --cpu Bazel |
compiler_files
|
|
compiler_files_without_includes
|
|
coverage_files
|
|
cpu
|
เมื่อตั้งค่าแล้วจะใช้เพื่อทำการเลือก Crosstool_config.toolchain ซึ่งจะมีลำดับความสำคัญเหนือตัวเลือก --cpu Bazel |
dwp_files
|
|
dynamic_runtime_lib
|
ระบบจะใช้ข้อมูลนี้เมื่อเปิดใช้ฟีเจอร์ "static_link_cpp_runtimes" และเรากำลังลิงก์ทรัพยากร Dependency แบบไดนามิก |
exec_transition_for_inputs
|
|
libc_top
|
|
linker_files
|
|
module_map
|
|
objcopy_files
|
|
static_runtime_lib
|
ระบบจะใช้ข้อมูลนี้เมื่อเปิดใช้ฟีเจอร์ "static_link_cpp_runtimes" และเรากำลังลิงก์ทรัพยากร Dependency แบบคงที่ |
strip_files
|
|
supports_header_parsing
|
|
supports_param_files
|
|
toolchain_config
|
cc_toolchain_config_info
|
toolchain_identifier
|
นี่คือวิธีที่แนะนำในการเชื่อมโยง |
cc_toolchain_suite
cc_toolchain_suite(name, compatible_with, deprecation, distribs, features, licenses, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)
แสดงคอลเล็กชันของเชนเครื่องมือ C++
กฎข้อนี้เป็นผู้รับผิดชอบต่อสิ่งต่อไปนี้
- รวบรวมชุดเครื่องมือ C++ ที่เกี่ยวข้องทั้งหมด
-
เลือกเชนเครื่องมือ 1 รายการตามตัวเลือก
--cpu
และ--compiler
ที่ส่งไปยัง Bazel
นอกจากนี้ โปรดดูเอกสารประกอบเกี่ยวกับการกำหนดค่าเชนเครื่องมือของ C++ และการเลือกเครื่องมืออย่างละเอียดใน หน้านี้
อาร์กิวเมนต์
Attributes | |
---|---|
name |
ชื่อที่ไม่ซ้ำกันสำหรับเป้าหมายนี้ |
toolchains
|
cc_toolchain จะใช้ "<cpu>" ก็ต่อเมื่อส่งผ่าน --cpu ไปยัง Bazel เท่านั้น และจะใช้ "<cpu>|< Compu>" เมื่อมีการส่งทั้ง --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", }, ) |