Quy tắc
- cc_binary
- cc_import
- cc_library
- cc_shared_library
- cc_static_library
- cc_test
- cc_toolchain
- cc_toolchain_suite
- fdo_prefetch_hints
- fdo_profile
- memprof_profile
- propeller_optimize
cc_binary
Xem nguồn quy tắccc_binary(name, deps, srcs, data, additional_linker_inputs, args, compatible_with, conlyopts, copts, cxxopts, defines, deprecation, dynamic_deps, env, exec_compatible_with, exec_group_compatible_with, exec_properties, features, hdrs_check, includes, licenses, link_extra_lib, linkopts, linkshared, linkstatic, local_defines, malloc, module_interfaces, nocopts, output_licenses, package_metadata, reexport_deps, restricted_to, stamp, tags, target_compatible_with, testonly, toolchains, visibility, win_def_file)
Thao tác này tạo ra một tệp nhị phân có thể thực thi.
name
của mục tiêu phải giống với tên của tệp nguồn là điểm truy cập chính của ứng dụng (trừ phần mở rộng).
Ví dụ: nếu điểm truy cập của bạn nằm trong main.cc
, thì tên của bạn phải là main
.
Mục tiêu đầu ra ngầm ẩn
name.stripped
(chỉ được tạo nếu được yêu cầu rõ ràng): Một phiên bản nhị phân đã được loại bỏ.strip -g
được chạy trên tệp nhị phân để xoá các biểu tượng gỡ lỗi. Bạn có thể cung cấp các lựa chọn bổ sung cho lệnh strip trên dòng lệnh bằng cách sử dụng--stripopt=-foo
.name.dwp
(chỉ được tạo nếu có yêu cầu rõ ràng): Nếu Fission được bật: một tệp gói thông tin gỡ lỗi phù hợp để gỡ lỗi các tệp nhị phân được triển khai từ xa. Nếu không: một tệp trống.
Đối số
Thuộc tính | |
---|---|
name |
Tên; bắt buộc Tên riêng cho mục tiêu này. |
deps
|
Danh sách nhãn; mặc định là Đây có thể là các mục tiêu linkopts , nhưng vui lòng cân nhắc additional_linker_inputs cho trường hợp sử dụng đó.
|
srcs
|
Danh sách nhãn; mặc định là Tất cả các tệp Các tệp hợp ngữ thuần tuý (.s, .asm) không được xử lý trước và thường được tạo bằng trình hợp ngữ. Các tệp hợp ngữ được xử lý trước (.S) được xử lý trước và thường được tạo bằng trình biên dịch C/C++. Tệp Tất cả các tệp Các tệp Nếu thuộc tính
Các loại tệp
... và mọi quy tắc tạo ra những tệp đó (ví dụ: |
data
|
Danh sách nhãn; mặc định là data tại Các thuộc tính điển hình do hầu hết các quy tắc xây dựng xác định.
Nếu Nếu Mã C++ của bạn có thể truy cập vào các tệp dữ liệu này như sau:
|
additional_linker_inputs
|
Danh sách nhãn; mặc định là
Không giống như Ví dụ: bạn có thể cung cấp các tệp .res đã biên dịch của Windows tại đây để nhúng vào đích nhị phân. |
conlyopts
|
Danh sách các chuỗi; mặc định là |
copts
|
Danh sách các chuỗi; mặc định là
Mỗi chuỗi trong thuộc tính này được thêm theo thứ tự đã cho vào
Nếu gói khai báo feature
|
cxxopts
|
Danh sách các chuỗi; mặc định là |
defines
|
Danh sách các chuỗi; mặc định là -D và được thêm vào dòng lệnh biên dịch cho mục tiêu này, cũng như cho mọi quy tắc phụ thuộc vào mục tiêu đó. Hãy hết sức cẩn thận, vì điều này có thể gây ra những ảnh hưởng sâu rộng – các định nghĩa sẽ được thêm vào mọi mục tiêu phụ thuộc vào mục tiêu này. Khi nghi ngờ, hãy thêm các giá trị xác định vào local_defines .
|
dynamic_deps
|
Danh sách nhãn; mặc định là cc_shared_library khác mà mục tiêu hiện tại phụ thuộc vào.
Việc triển khai |
hdrs_check
|
Chuỗi; giá trị mặc định là |
includes
|
Danh sách các chuỗi; mặc định là -isystem path_to_package/include_entry .
Bạn chỉ nên dùng cách này cho những thư viện bên thứ ba không tuân theo kiểu viết câu lệnh #include của Google.
Không giống như COPTS, các cờ này được thêm cho quy tắc này và mọi quy tắc phụ thuộc vào quy tắc này. (Lưu ý: không phải là các quy tắc mà nó phụ thuộc vào!) Hãy hết sức cẩn thận vì việc này có thể gây ra những ảnh hưởng sâu rộng. Khi nghi ngờ, hãy thêm cờ "-I" vào COPTS.
Các đường dẫn |
link_extra_lib
|
Nhãn; mặc định là
Theo mặc định, các tệp nhị phân C++ được liên kết với |
linkopts
|
Danh sách các chuỗi; mặc định là LINKOPTS trước khi liên kết mục tiêu nhị phân.
Mỗi phần tử trong danh sách này không bắt đầu bằng |
linkshared
|
Boolean; giá trị mặc định là linkshared=True vào quy tắc của bạn. Theo mặc định, tuỳ chọn này ở trạng thái tắt.
Sự hiện diện của cờ này có nghĩa là việc liên kết xảy ra với cờ
Nếu chỉ định cả |
linkstatic
|
Boolean; giá trị mặc định là cc_binary và cc_test : liên kết tệp nhị phân ở chế độ tĩnh. Đối với cc_library.link_static : xem bên dưới.
Theo mặc định, tuỳ chọn này được bật cho
Nếu được bật và đây là một tệp nhị phân hoặc thử nghiệm, thì lựa chọn này sẽ yêu cầu công cụ tạo liên kết trong Có 3 cách để liên kết một tệp thực thi:
Nếu bạn sử dụng thuộc tính
Thuộc tính
Có rất ít mã được tạo bằng |
local_defines
|
Danh sách các chuỗi; mặc định là -D và được thêm vào dòng lệnh biên dịch cho mục tiêu này, nhưng không được thêm vào các mục tiêu phụ thuộc của mục tiêu này. Không giống như defines , các định nghĩa chỉ được thêm vào dòng lệnh biên dịch cho mục tiêu này.
|
malloc
|
Nhãn; mặc định là
Theo mặc định, các tệp nhị phân C++ được liên kết với |
module_interfaces
|
Danh sách nhãn; mặc định là Tiêu chuẩn C++ không hạn chế về đuôi tệp giao diện mô-đun
Việc sử dụng được bảo vệ bằng cờ |
nocopts
|
Chuỗi; giá trị mặc định là COPTS hiện có khớp với biểu thức chính quy này (bao gồm cả các giá trị được chỉ định rõ ràng trong thuộc tính copts của quy tắc) sẽ bị xoá khỏi COPTS cho mục đích biên dịch quy tắc này.
Bạn không cần và không nên sử dụng thuộc tính này bên ngoài third_party . Các giá trị không được xử lý trước theo bất kỳ cách nào khác ngoài việc thay thế biến "Make".
|
reexport_deps
|
Danh sách nhãn; mặc định là |
stamp
|
Số nguyên; giá trị mặc định là
Các tệp nhị phân được đóng dấu sẽ không được tạo lại trừ phi các phần phụ thuộc của chúng thay đổi. |
win_def_file
|
Nhãn; mặc định là Bạn chỉ nên sử dụng thuộc tính này khi Windows là nền tảng mục tiêu. Bạn có thể dùng công cụ này để xuất các biểu tượng trong quá trình liên kết một thư viện dùng chung. |
cc_import
Xem nguồn quy tắccc_import(name, deps, data, hdrs, alwayslink, compatible_with, deprecation, exec_compatible_with, exec_group_compatible_with, exec_properties, features, includes, interface_library, linkopts, objects, package_metadata, pic_objects, pic_static_library, restricted_to, shared_library, static_library, strip_include_prefix, system_provided, tags, target_compatible_with, testonly, toolchains, visibility)
cc_import
cho phép người dùng nhập các thư viện C/C++ được biên dịch trước.
Sau đây là các trường hợp sử dụng điển hình:
1. Liên kết thư viện tĩnh
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 = True,
)
cc_import(
name = "mylib",
hdrs = ["mylib.h"],
shared_library = "libmylib.so",
)
Trên Unix:
cc_import(
name = "mylib",
hdrs = ["mylib.h"],
# libmylib.ifso is an interface library for libmylib.so which will be passed to linker
interface_library = "libmylib.ifso",
# libmylib.so will be available for runtime
shared_library = "libmylib.so",
)
Trên 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 will be available for runtime
shared_library = "mylib.dll",
)
system_provided=True
Trên Unix:
cc_import(
name = "mylib",
hdrs = ["mylib.h"],
interface_library = "libmylib.ifso", # Or we can also use libmylib.so as its own interface library
# libmylib.so is provided by system environment, for example it can be found in LD_LIBRARY_PATH.
# This indicates that Bazel is not responsible for making libmylib.so available.
system_provided = True,
)
Trên 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 = True,
)
Trên Unix:
cc_import(
name = "mylib",
hdrs = ["mylib.h"],
static_library = "libmylib.a",
shared_library = "libmylib.so",
)
Trên 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",
)
Phần còn lại giống nhau trên Unix và Windows:
# first will link to libmylib.a (or libmylib.lib)
cc_binary(
name = "first",
srcs = ["first.cc"],
deps = [":mylib"],
linkstatic = True, # default value
)
# second will link to libmylib.so (or libmylib.lib)
cc_binary(
name = "second",
srcs = ["second.cc"],
deps = [":mylib"],
linkstatic = False,
)
cc_import
hỗ trợ một thuộc tính include. Ví dụ:
cc_import(
name = "curl_lib",
hdrs = glob(["vendor/curl/include/curl/*.h"]),
includes = ["vendor/curl/include"],
shared_library = "vendor/curl/lib/.libs/libcurl.dylib",
)
Đối số
Thuộc tính | |
---|---|
name |
Tên; bắt buộc Tên riêng cho mục tiêu này. |
deps
|
Danh sách nhãn; mặc định là deps tại Các thuộc tính điển hình do hầu hết các quy tắc xây dựng xác định.
|
hdrs
|
Danh sách nhãn; mặc định là |
alwayslink
|
Boolean; giá trị mặc định là Nếu alwayslink không hoạt động với VS 2017 trên Windows, thì đó là do một vấn đề đã biết, vui lòng nâng cấp VS 2017 lên phiên bản mới nhất. |
includes
|
Danh sách các chuỗi; mặc định là -isystem path_to_package/include_entry .
Bạn chỉ nên dùng cách này cho những thư viện bên thứ ba không tuân theo kiểu viết câu lệnh #include của Google.
Không giống như COPTS, các cờ này được thêm cho quy tắc này và mọi quy tắc phụ thuộc vào quy tắc này. (Lưu ý: không phải là các quy tắc mà nó phụ thuộc vào!) Hãy hết sức cẩn thận vì việc này có thể gây ra những ảnh hưởng sâu rộng. Khi nghi ngờ, hãy thêm cờ "-I" vào COPTS.
Đường dẫn |
interface_library
|
Nhãn; mặc định là Các loại tệp được phép:
|
linkopts
|
Danh sách các chuỗi; mặc định là LINKOPTS trước khi liên kết mục tiêu nhị phân.
Mỗi phần tử trong danh sách này không bắt đầu bằng |
objects
|
Danh sách nhãn; mặc định là |
pic_objects
|
Danh sách nhãn; mặc định là |
pic_static_library
|
Nhãn; mặc định là |
shared_library
|
Nhãn; mặc định là Các loại tệp được phép:
|
static_library
|
Nhãn; mặc định là Các loại tệp được phép:
|
strip_include_prefix
|
Chuỗi; giá trị mặc định là Khi được đặt, các tiêu đề trong thuộc tính Nếu là đường dẫn tương đối, thì đường dẫn đó được coi là đường dẫn tương đối của gói. Nếu là một đường dẫn tuyệt đối, thì đường dẫn đó được hiểu là một đường dẫn tương đối của kho lưu trữ. Tiền tố trong thuộc tính Thuộc tính này chỉ hợp pháp trong |
system_provided
|
Boolean; giá trị mặc định là interface_library và để trống shared_library .
|
cc_library
Xem nguồn quy tắccc_library(name, deps, srcs, data, hdrs, additional_compiler_inputs, additional_linker_inputs, alwayslink, compatible_with, conlyopts, copts, cxxopts, defines, deprecation, exec_compatible_with, exec_group_compatible_with, exec_properties, features, hdrs_check, implementation_deps, include_prefix, includes, licenses, linkopts, linkstamp, linkstatic, local_defines, module_interfaces, package_metadata, restricted_to, strip_include_prefix, tags, target_compatible_with, testonly, textual_hdrs, toolchains, visibility, win_def_file)
Sử dụng cc_library()
cho các thư viện được biên dịch bằng C++.
Kết quả là .so
, .lo
hoặc .a
, tuỳ thuộc vào nhu cầu.
Nếu bạn tạo một thứ gì đó bằng cách liên kết tĩnh phụ thuộc vào cc_library
, thì đầu ra của một quy tắc thư viện phụ thuộc là tệp .a
. Nếu chỉ định alwayslink=True
, bạn sẽ nhận được tệp .lo
.
Tên tệp đầu ra thực tế là libfoo.so
cho thư viện dùng chung, trong đó foo là tên của quy tắc. Các loại thư viện khác lần lượt kết thúc bằng .lo
và .a
. Nếu bạn cần một tên thư viện dùng chung cụ thể (ví dụ: để xác định một mô-đun Python), hãy dùng genrule để sao chép thư viện sang tên mong muốn.
Kiểm tra việc bao gồm tiêu đề
Tất cả các tệp tiêu đề được dùng trong bản dựng đều phải được khai báo trong hdrs
hoặc srcs
của các quy tắc cc_*
.
Quy tắc này được thực thi.
Đối với các quy tắc cc_library
, tiêu đề trong hdrs
bao gồm giao diện công khai của thư viện và có thể được đưa trực tiếp vào cả từ các tệp trong hdrs
và srcs
của chính thư viện cũng như từ các tệp trong hdrs
và srcs
của các quy tắc cc_*
liệt kê thư viện trong deps
.
Tiêu đề trong srcs
chỉ được đưa trực tiếp vào từ các tệp trong hdrs
và srcs
của chính thư viện. Khi quyết định có nên đặt tiêu đề vào hdrs
hay srcs
, bạn nên hỏi xem bạn có muốn người dùng thư viện này có thể trực tiếp thêm tiêu đề đó hay không. Đây gần như là quyết định tương tự như giữa khả năng hiển thị public
và private
trong các ngôn ngữ lập trình.
Các quy tắc cc_binary
và cc_test
không có giao diện được xuất, nên chúng cũng không có thuộc tính hdrs
. Tất cả các tiêu đề thuộc về tệp nhị phân hoặc kiểm thử trực tiếp đều phải được liệt kê trong srcs
.
Để minh hoạ các quy tắc này, hãy xem ví dụ sau.
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"],
)
Các mục được phép đưa vào trực tiếp trong ví dụ này được liệt kê trong bảng bên dưới.
Ví dụ: foo.cc
được phép trực tiếp bao gồm foo.h
và bar.h
, nhưng không được bao gồm baz.h
.
Bao gồm cả tệp | Nội dung được phép đưa vào |
---|---|
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 |
Các quy tắc kiểm tra việc đưa vào chỉ áp dụng cho các trường hợp đưa vào trực tiếp. Trong ví dụ trên, foo.cc
được phép bao gồm bar.h
, có thể bao gồm baz.h
, đến lượt baz.h
được phép bao gồm baz-impl.h
. Về mặt kỹ thuật, quá trình biên dịch tệp .cc
có thể bao gồm bất kỳ tệp tiêu đề nào trong hdrs
hoặc srcs
trong bất kỳ cc_library
nào trong bao đóng deps
bắc cầu. Trong trường hợp này, trình biên dịch có thể đọc baz.h
và baz-impl.h
khi biên dịch foo.cc
, nhưng foo.cc
không được chứa #include "baz.h"
. Để được phép thực hiện việc đó, bạn phải thêm baz
vào deps
của foo
.
Bazel phụ thuộc vào khả năng hỗ trợ chuỗi công cụ để thực thi các quy tắc kiểm tra việc đưa vào.
Công cụ phải hỗ trợ tính năng layering_check
và được yêu cầu một cách rõ ràng, ví dụ: thông qua cờ dòng lệnh --features=layering_check
hoặc tham số features
của hàm package
. Các chuỗi công cụ do Bazel cung cấp chỉ hỗ trợ tính năng này bằng clang trên Unix và macOS.
Ví dụ
Chúng ta sử dụng cờ alwayslink
để buộc trình liên kết liên kết trong mã này mặc dù mã nhị phân chính không tham chiếu đến mã này.
cc_library(
name = "ast_inspector_lib",
srcs = ["ast_inspector_lib.cc"],
hdrs = ["ast_inspector_lib.h"],
visibility = ["//visibility:public"],
deps = ["//third_party/llvm/llvm/tools/clang:frontend"],
# alwayslink as we want to be able to call things in this library at
# debug time, even if they aren't used anywhere in the code.
alwayslink = True,
)
Ví dụ sau đây đến từ third_party/python2_4_3/BUILD
.
Một số mã sử dụng thư viện dl
(để tải một thư viện động khác), vì vậy, quy tắc này chỉ định lựa chọn liên kết -ldl
để liên kết thư viện dl
.
cc_library(
name = "python2_4_3",
linkopts = [
"-ldl",
"-lutil",
],
deps = ["//third_party/expat"],
)
Ví dụ sau đây đến từ third_party/kde/BUILD
.
Chúng tôi lưu giữ các tệp .so
được tạo sẵn trong kho lưu trữ.
Các tệp tiêu đề nằm trong một thư mục con có tên là include
.
cc_library(
name = "kde",
srcs = [
"lib/libDCOP.so",
"lib/libkdesu.so",
"lib/libkhtml.so",
"lib/libkparts.so",
...more .so files...,
],
includes = ["include"],
deps = ["//third_party/X11"],
)
Ví dụ sau đây đến từ third_party/gles/BUILD
.
Mã của bên thứ ba thường cần một số defines
và linkopts
.
cc_library(
name = "gles",
srcs = [
"GLES/egl.h",
"GLES/gl.h",
"ddx.c",
"egl.c",
],
defines = [
"USE_FLOAT",
"__GL_FLOAT",
"__GL_COMMON",
],
linkopts = ["-ldl"], # uses dlopen(), dl library
deps = [
"es",
"//third_party/X11",
],
)
Đối số
Thuộc tính | |
---|---|
name |
Tên; bắt buộc Tên riêng cho mục tiêu này. |
deps
|
Danh sách nhãn; mặc định là Đây có thể là mục tiêu Xem các nhận xét chung về Đây phải là tên của các quy tắc thư viện C++.
Khi tạo một tệp nhị phân liên kết thư viện của quy tắc này, bạn cũng sẽ liên kết các thư viện trong Mặc dù có tên là "deps", nhưng không phải tất cả các ứng dụng của thư viện này đều thuộc về đây. Các phần phụ thuộc dữ liệu thời gian chạy thuộc Để liên kết trong một thư viện bên thứ ba được biên dịch trước, hãy thêm tên của thư viện đó vào Để phụ thuộc vào một thành phần mà không liên kết thành phần đó với thư viện này, hãy thêm tên của thành phần đó vào |
srcs
|
Danh sách nhãn; mặc định là Tất cả các tệp Các tệp hợp ngữ thuần tuý (.s, .asm) không được xử lý trước và thường được tạo bằng trình hợp ngữ. Các tệp hợp ngữ được xử lý trước (.S) được xử lý trước và thường được tạo bằng trình biên dịch C/C++. Tệp Tất cả các tệp Các tệp Nếu thuộc tính
Các loại tệp
... và mọi quy tắc tạo ra những tệp đó (ví dụ: |
data
|
Danh sách nhãn; mặc định là data tại Các thuộc tính điển hình do hầu hết các quy tắc xây dựng xác định.
Nếu Nếu Mã C++ của bạn có thể truy cập vào các tệp dữ liệu này như sau:
|
hdrs
|
Danh sách nhãn; mặc định là Đây là vị trí được ưu tiên hơn cả để khai báo các tệp tiêu đề mô tả giao diện cho thư viện. Các tiêu đề này sẽ được cung cấp để các nguồn trong quy tắc này hoặc trong các quy tắc phụ thuộc đưa vào.
Các tiêu đề mà một ứng dụng của thư viện này không được đưa vào phải được liệt kê trong thuộc tính Các loại tệp |
additional_compiler_inputs
|
Danh sách nhãn; mặc định là |
additional_linker_inputs
|
Danh sách nhãn; mặc định là
Không giống như Ví dụ: bạn có thể cung cấp các tệp .res đã biên dịch của Windows tại đây để nhúng vào đích nhị phân. |
alwayslink
|
Boolean; giá trị mặc định là srcs , ngay cả khi một số tệp không chứa ký hiệu nào mà tệp nhị phân tham chiếu.
Điều này hữu ích nếu mã của bạn không được mã trong tệp nhị phân gọi một cách rõ ràng, ví dụ: nếu mã của bạn đăng ký nhận một số lệnh gọi lại do một số dịch vụ cung cấp.
Nếu alwayslink không hoạt động với VS 2017 trên Windows, thì đó là do một vấn đề đã biết, vui lòng nâng cấp VS 2017 lên phiên bản mới nhất. |
conlyopts
|
Danh sách các chuỗi; mặc định là |
copts
|
Danh sách các chuỗi; mặc định là
Mỗi chuỗi trong thuộc tính này được thêm theo thứ tự đã cho vào
Nếu gói khai báo feature
|
cxxopts
|
Danh sách các chuỗi; mặc định là |
defines
|
Danh sách các chuỗi; mặc định là -D và được thêm vào dòng lệnh biên dịch cho mục tiêu này, cũng như cho mọi quy tắc phụ thuộc vào mục tiêu đó. Hãy hết sức cẩn thận, vì điều này có thể gây ra những ảnh hưởng sâu rộng – các định nghĩa sẽ được thêm vào mọi mục tiêu phụ thuộc vào mục tiêu này. Khi nghi ngờ, hãy thêm các giá trị xác định vào local_defines .
|
hdrs_check
|
Chuỗi; giá trị mặc định là |
implementation_deps
|
Danh sách nhãn; mặc định là deps , các tiêu đề và đường dẫn bao gồm của các thư viện này (và tất cả các deps bắc cầu của chúng) chỉ được dùng để biên dịch thư viện này, chứ không phải các thư viện phụ thuộc vào thư viện này. Các thư viện được chỉ định bằng implementation_deps vẫn được liên kết trong các mục tiêu nhị phân phụ thuộc vào thư viện này.
|
include_prefix
|
Chuỗi; giá trị mặc định là Khi được đặt, các tiêu đề trong thuộc tính Tiền tố trong thuộc tính Thuộc tính này chỉ hợp pháp trong |
includes
|
Danh sách các chuỗi; mặc định là -isystem path_to_package/include_entry .
Bạn chỉ nên dùng cách này cho những thư viện bên thứ ba không tuân theo kiểu viết câu lệnh #include của Google.
Không giống như COPTS, các cờ này được thêm cho quy tắc này và mọi quy tắc phụ thuộc vào quy tắc này. (Lưu ý: không phải là các quy tắc mà nó phụ thuộc vào!) Hãy hết sức cẩn thận vì việc này có thể gây ra những ảnh hưởng sâu rộng. Khi nghi ngờ, hãy thêm cờ "-I" vào COPTS.
Các đường dẫn |
linkopts
|
Danh sách các chuỗi; mặc định là cc_binary.linkopts .
Thuộc tính linkopts cũng được áp dụng cho mọi mục tiêu phụ thuộc trực tiếp hoặc gián tiếp vào thư viện này thông qua các thuộc tính deps (hoặc thông qua các thuộc tính khác được xử lý tương tự: thuộc tính malloc của cc_binary ). Dependency linkopts sẽ được ưu tiên hơn dependent linkopts (tức là dependency linkopts sẽ xuất hiện sau trong dòng lệnh). Linkopts được chỉ định trong --linkopt sẽ được ưu tiên hơn linkopts của quy tắc.
Xin lưu ý rằng thuộc tính Ngoài ra, bạn cần lưu ý rằng các lựa chọn "-Wl,-soname" hoặc "-Xlinker -soname" không được hỗ trợ và bạn không bao giờ được chỉ định các lựa chọn này trong thuộc tính này. Các tệp |
linkstamp
|
Nhãn; mặc định là base .
|
linkstatic
|
Boolean; giá trị mặc định là cc_binary và cc_test : liên kết tệp nhị phân ở chế độ tĩnh. Đối với cc_library.link_static : xem bên dưới.
Theo mặc định, tuỳ chọn này được bật cho
Nếu được bật và đây là một tệp nhị phân hoặc thử nghiệm, thì lựa chọn này sẽ yêu cầu công cụ tạo liên kết trong Có 3 cách để liên kết một tệp thực thi:
Nếu bạn sử dụng thuộc tính
Thuộc tính
Có rất ít mã được tạo bằng |
local_defines
|
Danh sách các chuỗi; mặc định là -D và được thêm vào dòng lệnh biên dịch cho mục tiêu này, nhưng không được thêm vào các mục tiêu phụ thuộc của mục tiêu này. Không giống như defines , các định nghĩa chỉ được thêm vào dòng lệnh biên dịch cho mục tiêu này.
|
module_interfaces
|
Danh sách nhãn; mặc định là Tiêu chuẩn C++ không hạn chế về đuôi tệp giao diện mô-đun
Việc sử dụng được bảo vệ bằng cờ |
strip_include_prefix
|
Chuỗi; giá trị mặc định là Khi được đặt, các tiêu đề trong thuộc tính Nếu là đường dẫn tương đối, thì đường dẫn đó được coi là đường dẫn tương đối của gói. Nếu là một đường dẫn tuyệt đối, thì đường dẫn đó được hiểu là một đường dẫn tương đối của kho lưu trữ. Tiền tố trong thuộc tính Thuộc tính này chỉ hợp pháp trong |
textual_hdrs
|
Danh sách nhãn; mặc định là Đây là vị trí để khai báo các tệp tiêu đề không thể tự biên dịch; tức là các tệp này luôn cần được các tệp nguồn khác đưa vào bằng văn bản để tạo mã hợp lệ. |
win_def_file
|
Nhãn; mặc định là Bạn chỉ nên sử dụng thuộc tính này khi Windows là nền tảng mục tiêu. Bạn có thể dùng công cụ này để xuất các biểu tượng trong quá trình liên kết một thư viện dùng chung. |
cc_shared_library
Xem nguồn quy tắccc_shared_library(name, deps, additional_linker_inputs, compatible_with, deprecation, dynamic_deps, exec_compatible_with, exec_group_compatible_with, exec_properties, exports_filter, features, package_metadata, restricted_to, roots, shared_lib_name, static_deps, tags, target_compatible_with, testonly, toolchains, user_link_flags, visibility, win_def_file)
Thao tác này tạo ra một thư viện dùng chung.
Ví dụ:
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"], )
Trong ví dụ foo_shared
liên kết tĩnh foo
và baz
, baz
là phần phụ thuộc bắc cầu. Thư viện này không liên kết bar
vì thư viện này đã được dynamic_dep
bar_shared
cung cấp linh hoạt.
foo_shared
sử dụng tệp *.lds của tập lệnh trình liên kết để kiểm soát những biểu tượng cần xuất. Logic quy tắc cc_shared_library
không kiểm soát những biểu tượng nào được xuất, mà chỉ sử dụng những gì được giả định là được xuất để đưa ra lỗi trong giai đoạn phân tích nếu hai thư viện dùng chung xuất cùng một mục tiêu.
Mọi phần phụ thuộc trực tiếp của cc_shared_library
đều được giả định là đã xuất. Do đó, trong quá trình phân tích, Bazel giả định rằng foo
đang được foo_shared
xuất. baz
không được giả định là do foo_shared
xuất. Mọi mục tiêu mà exports_filter
khớp cũng được giả định là đã xuất.
Mỗi cc_library
trong ví dụ chỉ được xuất hiện tối đa trong một cc_shared_library
. Nếu muốn liên kết baz
vào bar_shared
, chúng ta cần thêm tags = ["LINKABLE_MORE_THAN_ONCE"]
vào baz
.
Do thuộc tính shared_lib_name
, tệp do bar_shared
tạo sẽ có tên là bar.so
thay vì tên libbar.so
theo mặc định trên Linux.
Lỗi
Two shared libraries in dependencies export the same symbols.
Điều này sẽ xảy ra bất cứ khi nào bạn tạo một mục tiêu có 2 phần phụ thuộc cc_shared_library
khác nhau xuất cùng một mục tiêu. Để khắc phục vấn đề này, bạn cần ngăn các thư viện được xuất trong một trong các phần phụ thuộc cc_shared_library
.
Two shared libraries in dependencies link the same library statically
Điều này sẽ xảy ra bất cứ khi nào bạn tạo một cc_shared_library
mới có 2 phần phụ thuộc cc_shared_library
khác nhau liên kết cùng một mục tiêu một cách tĩnh.
Tương tự như lỗi khi xuất.
Một cách để khắc phục vấn đề này là ngừng liên kết thư viện vào một trong các phần phụ thuộc cc_shared_library
. Đồng thời, thư viện vẫn liên kết với thư viện đó cần xuất thư viện để thư viện không liên kết với thư viện đó vẫn có thể nhìn thấy các biểu tượng. Một cách khác là trích xuất một thư viện thứ ba xuất mục tiêu.
Cách thứ ba là gắn thẻ cc_library
gây ra vấn đề bằng LINKABLE_MORE_THAN_ONCE
. Tuy nhiên, bạn hiếm khi cần dùng cách khắc phục này và bạn phải hoàn toàn chắc chắn rằng cc_library
thực sự an toàn để liên kết nhiều lần.
'//foo:foo' is already linked statically in '//bar:bar' but not exported`
Điều này có nghĩa là một thư viện trong bao đóng bắc cầu của deps
có thể truy cập được mà không cần thông qua một trong các phần phụ thuộc cc_shared_library
nhưng đã được liên kết vào một cc_shared_library
khác trong dynamic_deps
và không được xuất.
Giải pháp là xuất thành phần đó từ phần phụ thuộc cc_shared_library
hoặc kéo phần phụ thuộc cc_shared_library
thứ ba xuất thành phần đó ra.
Do not place libraries which only contain a precompiled dynamic library in deps.
Nếu có một thư viện động được biên dịch trước, thì bạn không cần và không thể liên kết tĩnh thư viện này vào mục tiêu cc_shared_library
hiện tại mà bạn đang tạo. Do đó, nó không thuộc deps
của cc_shared_library
. Nếu thư viện động được biên dịch sẵn này là một phần phụ thuộc của một trong các cc_libraries
, thì cc_library
cần phải phụ thuộc trực tiếp vào thư viện đó.
Trying to export a library already exported by a different shared library
Bạn sẽ thấy lỗi này nếu theo quy tắc hiện tại, bạn đang yêu cầu xuất một mục tiêu đã được xuất bởi một trong các phần phụ thuộc động của bạn.
Để khắc phục vấn đề này, hãy xoá mục tiêu khỏi deps
và chỉ dựa vào mục tiêu đó từ phần phụ thuộc động hoặc đảm bảo rằng exports_filter
không nắm bắt mục tiêu này.
Đối số
Thuộc tính | |
---|---|
name |
Tên; bắt buộc Tên riêng cho mục tiêu này. |
deps
|
Danh sách nhãn; mặc định là
Mọi phần phụ thuộc thư viện bắc cầu của các phần phụ thuộc trực tiếp này sẽ được liên kết vào thư viện dùng chung này, miễn là chúng chưa được liên kết bởi một
Trong quá trình phân tích, việc triển khai quy tắc sẽ xem xét mọi mục tiêu được liệt kê trong
Quá trình triển khai cũng sẽ kích hoạt lỗi bất cứ khi nào cùng một thư viện được liên kết tĩnh với nhiều |
additional_linker_inputs
|
Danh sách nhãn; mặc định là user_link_flags .
|
dynamic_deps
|
Danh sách nhãn; mặc định là cc_shared_library khác mà mục tiêu hiện tại phụ thuộc vào.
Việc triển khai |
exports_filter
|
Danh sách các chuỗi; mặc định là
Mọi mục tiêu
Xin lưu ý rằng thuộc tính này không thực sự thêm một cạnh phụ thuộc vào các mục tiêu đó, thay vào đó, cạnh phụ thuộc phải được tạo bởi Bạn có thể sử dụng cú pháp sau:
|
roots
|
Danh sách nhãn; mặc định là |
shared_lib_name
|
Chuỗi; giá trị mặc định là |
static_deps
|
Danh sách các chuỗi; mặc định là |
user_link_flags
|
Danh sách các chuỗi; mặc định là
|
win_def_file
|
Nhãn; mặc định là Bạn chỉ nên sử dụng thuộc tính này khi Windows là nền tảng mục tiêu. Bạn có thể dùng công cụ này để xuất các biểu tượng trong quá trình liên kết một thư viện dùng chung. |
cc_static_library
Xem nguồn quy tắccc_static_library(name, deps, compatible_with, deprecation, exec_compatible_with, exec_group_compatible_with, exec_properties, features, package_metadata, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)
Thư viện tĩnh kết quả chứa các tệp đối tượng của những mục tiêu được liệt kê trong deps
cũng như các phần phụ thuộc bắc cầu của chúng, trong đó các đối tượng PIC
được ưu tiên.
Nhóm đầu ra
linkdeps
Một tệp văn bản chứa nhãn của những phần phụ thuộc bắc cầu của các mục tiêu được liệt kê trong deps
không đóng góp bất kỳ tệp đối tượng nào cho thư viện tĩnh, nhưng cung cấp ít nhất một thư viện tĩnh, động hoặc giao diện. Thư viện tĩnh thu được có thể yêu cầu các thư viện này phải có sẵn tại thời điểm liên kết.
linkopts
Một tệp văn bản chứa linkopts
do người dùng cung cấp của tất cả các phần phụ thuộc bắc cầu của các mục tiêu có trong deps
.
Ký hiệu trùng lặp
Theo mặc định, quy tắc cc_static_library
sẽ kiểm tra để đảm bảo thư viện tĩnh kết quả không chứa bất kỳ biểu tượng trùng lặp nào. Nếu có, bản dựng sẽ không thành công và xuất hiện thông báo lỗi liệt kê các biểu tượng trùng lặp và tệp đối tượng chứa các biểu tượng đó.
Bạn có thể tắt chế độ kiểm tra này cho mỗi mục tiêu hoặc mỗi gói bằng cách đặt features = ["-symbol_check"]
hoặc trên toàn cục thông qua --features=-symbol_check
.
Hỗ trợ chuỗi công cụ cho symbol_check
Các chuỗi công cụ C++ được định cấu hình tự động đi kèm với Bazel hỗ trợ tính năng symbol_check
trên mọi nền tảng. Chuỗi công cụ tuỳ chỉnh có thể thêm hỗ trợ cho chuỗi công cụ đó theo một trong hai cách:
- Triển khai thao tác
ACTION_NAMES.validate_static_library
và bật thao tác này bằng tính năngsymbol_check
. Tập hợp công cụ trong thao tác được gọi bằng 2 đối số, thư viện tĩnh để kiểm tra các biểu tượng trùng lặp và đường dẫn của một tệp phải được tạo nếu quá trình kiểm tra thành công. - Tính năng
symbol_check
có thêm các cờ lưu trữ khiến thao tác tạo thư viện tĩnh không thành công trên các biểu tượng trùng lặp.
Đối số
Thuộc tính | |
---|---|
name |
Tên; bắt buộc Tên riêng cho mục tiêu này. |
deps
|
Danh sách nhãn; mặc định là Các phần phụ thuộc không cung cấp bất kỳ tệp đối tượng nào sẽ không được đưa vào thư viện tĩnh, nhưng nhãn của các phần phụ thuộc đó sẽ được thu thập trong tệp do nhóm đầu ra |
cc_test
Xem nguồn quy tắccc_test(name, deps, srcs, data, additional_linker_inputs, args, compatible_with, conlyopts, copts, cxxopts, defines, deprecation, dynamic_deps, env, env_inherit, exec_compatible_with, exec_group_compatible_with, exec_properties, features, flaky, hdrs_check, includes, licenses, link_extra_lib, linkopts, linkshared, linkstatic, local, local_defines, malloc, module_interfaces, nocopts, package_metadata, reexport_deps, restricted_to, shard_count, size, stamp, tags, target_compatible_with, testonly, timeout, toolchains, visibility, win_def_file)
Quy tắc cc_test()
sẽ biên dịch một quy trình kiểm thử. Ở đây, kiểm thử là một trình bao bọc nhị phân xung quanh một số mã kiểm thử.
Theo mặc định, các kiểm thử C++ được liên kết động.
Để liên kết tĩnh một kiểm thử đơn vị, hãy chỉ định linkstatic=True
.
Có lẽ bạn nên bình luận về lý do kiểm thử của bạn cần linkstatic
; điều này có lẽ không rõ ràng.
Mục tiêu đầu ra ngầm ẩn
name.stripped
(chỉ được tạo nếu được yêu cầu rõ ràng): Một phiên bản nhị phân đã được loại bỏ.strip -g
được chạy trên tệp nhị phân để xoá các biểu tượng gỡ lỗi. Bạn có thể cung cấp các lựa chọn bổ sung cho lệnh strip trên dòng lệnh bằng cách sử dụng--stripopt=-foo
.name.dwp
(chỉ được tạo nếu có yêu cầu rõ ràng): Nếu Fission được bật: một tệp gói thông tin gỡ lỗi phù hợp để gỡ lỗi các tệp nhị phân được triển khai từ xa. Nếu không: một tệp trống.
Xem các đối số cc_binary(), ngoại trừ đối số stamp
được đặt thành 0 theo mặc định cho các kiểm thử và cc_test
có thêm
thuộc tính chung cho tất cả các quy tắc kiểm thử (*_test).
Đối số
Thuộc tính | |
---|---|
name |
Tên; bắt buộc Tên riêng cho mục tiêu này. |
deps
|
Danh sách nhãn; mặc định là Đây có thể là các mục tiêu linkopts , nhưng vui lòng cân nhắc additional_linker_inputs cho trường hợp sử dụng đó.
|
srcs
|
Danh sách nhãn; mặc định là Tất cả các tệp Các tệp hợp ngữ thuần tuý (.s, .asm) không được xử lý trước và thường được tạo bằng trình hợp ngữ. Các tệp hợp ngữ được xử lý trước (.S) được xử lý trước và thường được tạo bằng trình biên dịch C/C++. Tệp Tất cả các tệp Các tệp Nếu thuộc tính
Các loại tệp
... và mọi quy tắc tạo ra những tệp đó (ví dụ: |
data
|
Danh sách nhãn; mặc định là data tại Các thuộc tính điển hình do hầu hết các quy tắc xây dựng xác định.
Nếu Nếu Mã C++ của bạn có thể truy cập vào các tệp dữ liệu này như sau:
|
additional_linker_inputs
|
Danh sách nhãn; mặc định là
Không giống như Ví dụ: bạn có thể cung cấp các tệp .res đã biên dịch của Windows tại đây để nhúng vào đích nhị phân. |
conlyopts
|
Danh sách các chuỗi; mặc định là |
copts
|
Danh sách các chuỗi; mặc định là
Mỗi chuỗi trong thuộc tính này được thêm theo thứ tự đã cho vào
Nếu gói khai báo feature
|
cxxopts
|
Danh sách các chuỗi; mặc định là |
defines
|
Danh sách các chuỗi; mặc định là -D và được thêm vào dòng lệnh biên dịch cho mục tiêu này, cũng như cho mọi quy tắc phụ thuộc vào mục tiêu đó. Hãy hết sức cẩn thận, vì điều này có thể gây ra những ảnh hưởng sâu rộng – các định nghĩa sẽ được thêm vào mọi mục tiêu phụ thuộc vào mục tiêu này. Khi nghi ngờ, hãy thêm các giá trị xác định vào local_defines .
|
dynamic_deps
|
Danh sách nhãn; mặc định là cc_shared_library khác mà mục tiêu hiện tại phụ thuộc vào.
Việc triển khai |
hdrs_check
|
Chuỗi; giá trị mặc định là |
includes
|
Danh sách các chuỗi; mặc định là -isystem path_to_package/include_entry .
Bạn chỉ nên dùng cách này cho những thư viện bên thứ ba không tuân theo kiểu viết câu lệnh #include của Google.
Không giống như COPTS, các cờ này được thêm cho quy tắc này và mọi quy tắc phụ thuộc vào quy tắc này. (Lưu ý: không phải là các quy tắc mà nó phụ thuộc vào!) Hãy hết sức cẩn thận vì việc này có thể gây ra những ảnh hưởng sâu rộng. Khi nghi ngờ, hãy thêm cờ "-I" vào COPTS.
Các đường dẫn |
link_extra_lib
|
Nhãn; mặc định là
Theo mặc định, các tệp nhị phân C++ được liên kết với |
linkopts
|
Danh sách các chuỗi; mặc định là LINKOPTS trước khi liên kết mục tiêu nhị phân.
Mỗi phần tử trong danh sách này không bắt đầu bằng |
linkshared
|
Boolean; giá trị mặc định là linkshared=True vào quy tắc của bạn. Theo mặc định, tuỳ chọn này ở trạng thái tắt.
Sự hiện diện của cờ này có nghĩa là việc liên kết xảy ra với cờ
Nếu chỉ định cả |
linkstatic
|
Boolean; giá trị mặc định là cc_binary và cc_test : liên kết tệp nhị phân ở chế độ tĩnh. Đối với cc_library.link_static : xem bên dưới.
Theo mặc định, tuỳ chọn này được bật cho
Nếu được bật và đây là một tệp nhị phân hoặc thử nghiệm, thì lựa chọn này sẽ yêu cầu công cụ tạo liên kết trong Có 3 cách để liên kết một tệp thực thi:
Nếu bạn sử dụng thuộc tính
Thuộc tính
Có rất ít mã được tạo bằng |
local_defines
|
Danh sách các chuỗi; mặc định là -D và được thêm vào dòng lệnh biên dịch cho mục tiêu này, nhưng không được thêm vào các mục tiêu phụ thuộc của mục tiêu này. Không giống như defines , các định nghĩa chỉ được thêm vào dòng lệnh biên dịch cho mục tiêu này.
|
malloc
|
Nhãn; mặc định là
Theo mặc định, các tệp nhị phân C++ được liên kết với |
module_interfaces
|
Danh sách nhãn; mặc định là Tiêu chuẩn C++ không hạn chế về đuôi tệp giao diện mô-đun
Việc sử dụng được bảo vệ bằng cờ |
nocopts
|
Chuỗi; giá trị mặc định là COPTS hiện có khớp với biểu thức chính quy này (bao gồm cả các giá trị được chỉ định rõ ràng trong thuộc tính copts của quy tắc) sẽ bị xoá khỏi COPTS cho mục đích biên dịch quy tắc này.
Bạn không cần và không nên sử dụng thuộc tính này bên ngoài third_party . Các giá trị không được xử lý trước theo bất kỳ cách nào khác ngoài việc thay thế biến "Make".
|
reexport_deps
|
Danh sách nhãn; mặc định là |
stamp
|
Số nguyên; giá trị mặc định là
Các tệp nhị phân được đóng dấu sẽ không được tạo lại trừ phi các phần phụ thuộc của chúng thay đổi. |
win_def_file
|
Nhãn; mặc định là Bạn chỉ nên sử dụng thuộc tính này khi Windows là nền tảng mục tiêu. Bạn có thể dùng công cụ này để xuất các biểu tượng trong quá trình liên kết một thư viện dùng chung. |
cc_toolchain
Xem nguồn quy tắccc_toolchain(name, all_files, ar_files, as_files, compatible_with, compiler_files, compiler_files_without_includes, coverage_files, deprecation, dwp_files, dynamic_runtime_lib, exec_compatible_with, exec_group_compatible_with, exec_properties, exec_transition_for_inputs, features, libc_top, licenses, linker_files, module_map, objcopy_files, output_licenses, package_metadata, restricted_to, static_runtime_lib, strip_files, supports_header_parsing, supports_param_files, tags, target_compatible_with, testonly, toolchain_config, toolchain_identifier, toolchains, visibility)
Đại diện cho một chuỗi công cụ C++.
Quy tắc này chịu trách nhiệm về:
-
Thu thập tất cả các cấu phần phần mềm cần thiết để chạy các thao tác C++. Việc này được thực hiện bằng các thuộc tính như
all_files
,compiler_files
,linker_files
hoặc các thuộc tính khác kết thúc bằng_files
. Đây thường là các filegroup globbing tất cả các tệp bắt buộc. -
Tạo dòng lệnh chính xác cho các thao tác C++. Bạn có thể thực hiện việc này bằng cách sử dụng nhà cung cấp
CcToolchainConfigInfo
(xem thông tin chi tiết bên dưới).
Sử dụng thuộc tính toolchain_config
để định cấu hình chuỗi công cụ C++.
Bạn cũng có thể xem
trang
này để biết tài liệu chi tiết về cấu hình chuỗi công cụ C++ và lựa chọn chuỗi công cụ.
Sử dụng tags = ["manual"]
để ngăn các chuỗi công cụ được tạo và định cấu hình một cách không cần thiết khi gọi bazel build //...
Đối số
Thuộc tính | |
---|---|
name |
Tên; bắt buộc Tên riêng cho mục tiêu này. |
all_files
|
Nhãn; bắt buộc Tập hợp tất cả các cấu phần phần mềm cc_toolchain. Các cấu phần phần mềm này sẽ được thêm làm dữ liệu đầu vào cho tất cả các thao tác liên quan đến rules_cc (ngoại trừ những thao tác đang sử dụng các tập hợp cấu phần phần mềm chính xác hơn từ các thuộc tính bên dưới). Bazel giả định rằngall_files là một siêu tập hợp của tất cả các thuộc tính cung cấp cấu phần phần mềm khác (ví dụ: quá trình biên dịch linkstamp cần cả tệp biên dịch và tệp liên kết, vì vậy, quá trình này sẽ lấy all_files ).
Đây là nội dung của |
ar_files
|
Nhãn; mặc định là |
as_files
|
Nhãn; mặc định là |
compiler_files
|
Nhãn; bắt buộc Tập hợp tất cả các cấu phần phần mềm cc_toolchain cần thiết cho các thao tác biên dịch. |
compiler_files_without_includes
|
Nhãn; mặc định là |
coverage_files
|
Nhãn; mặc định là |
dwp_files
|
Nhãn; bắt buộc Tập hợp tất cả các cấu phần phần mềm cc_toolchain cần thiết cho các thao tác dwp. |
dynamic_runtime_lib
|
Nhãn; mặc định là Thao tác này sẽ được dùng khi tính năng "static_link_cpp_runtimes" được bật và chúng ta đang liên kết các phần phụ thuộc một cách linh động. |
exec_transition_for_inputs
|
Boolean; giá trị mặc định là |
libc_top
|
Nhãn; mặc định là |
linker_files
|
Nhãn; bắt buộc Tập hợp tất cả các cấu phần phần mềm cc_toolchain cần thiết cho các thao tác liên kết. |
module_map
|
Nhãn; mặc định là |
objcopy_files
|
Nhãn; bắt buộc Tập hợp tất cả các cấu phần phần mềm cc_toolchain cần thiết cho các thao tác objcopy. |
output_licenses
|
Danh sách các chuỗi; mặc định là |
static_runtime_lib
|
Nhãn; mặc định là Thư viện này sẽ được dùng khi tính năng "static_link_cpp_runtimes" được bật và chúng ta đang liên kết các phần phụ thuộc một cách tĩnh. |
strip_files
|
Nhãn; bắt buộc Tập hợp tất cả các cấu phần phần mềm cc_toolchain cần thiết cho các thao tác xoá. |
supports_header_parsing
|
Boolean; giá trị mặc định là |
supports_param_files
|
Boolean; giá trị mặc định là |
toolchain_config
|
Nhãn; bắt buộc Nhãn của quy tắc cung cấpcc_toolchain_config_info .
|
toolchain_identifier
|
Chuỗi; giá trị mặc định là
Cho đến khi vấn đề #5380 được khắc phục, đây là cách được đề xuất để liên kết |
cc_toolchain_suite
Xem nguồn quy tắccc_toolchain_suite(name, compatible_with, deprecation, features, licenses, package_metadata, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)
Không dùng nữa: quy tắc này không có tác dụng và sẽ bị xoá.
Đối số
Thuộc tính | |
---|---|
name |
Tên; bắt buộc Tên riêng cho mục tiêu này. |
fdo_prefetch_hints
Xem nguồn quy tắcfdo_prefetch_hints(name, compatible_with, deprecation, exec_compatible_with, exec_group_compatible_with, exec_properties, features, package_metadata, profile, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)
Biểu thị một hồ sơ gợi ý tìm nạp trước FDO nằm trong không gian làm việc. Ví dụ:
fdo_prefetch_hints(
name = "hints",
profile = "//path/to/hints:profile.afdo",
)
Đối số
Thuộc tính | |
---|---|
name |
Tên; bắt buộc Tên riêng cho mục tiêu này. |
profile
|
Nhãn; bắt buộc Nhãn của hồ sơ gợi ý. Tệp gợi ý có đuôi .afdo Nhãn cũng có thể trỏ đến một quy tắc fdo_absolute_path_profile. |
fdo_profile
Xem nguồn quy tắcfdo_profile(name, compatible_with, deprecation, exec_compatible_with, exec_group_compatible_with, exec_properties, features, memprof_profile, package_metadata, profile, proto_profile, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)
Biểu thị một hồ sơ FDO trong không gian làm việc. Ví dụ:
fdo_profile(
name = "fdo",
profile = "//path/to/fdo:profile.zip",
)
Đối số
Thuộc tính | |
---|---|
name |
Tên; bắt buộc Tên riêng cho mục tiêu này. |
memprof_profile
|
Nhãn; mặc định là |
profile
|
Nhãn; bắt buộc Nhãn của hồ sơ FDO hoặc quy tắc tạo ra hồ sơ đó. Tệp FDO có thể có một trong các đuôi sau: .profraw cho hồ sơ LLVM chưa được lập chỉ mục, .profdata cho hồ sơ LLVM đã được lập chỉ mục, .zip chứa hồ sơ LLVM profraw, .afdo cho hồ sơ AutoFDO, .xfdo cho hồ sơ XBinary. Nhãn này cũng có thể trỏ đến một quy tắc fdo_absolute_path_profile. |
proto_profile
|
Nhãn; mặc định là |
memprof_profile
Xem nguồn quy tắcmemprof_profile(name, compatible_with, deprecation, exec_compatible_with, exec_group_compatible_with, exec_properties, features, package_metadata, profile, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)
Biểu thị một hồ sơ MEMPROF nằm trong không gian làm việc. Ví dụ:
memprof_profile(
name = "memprof",
profile = "//path/to/memprof:profile.afdo",
)
Đối số
Thuộc tính | |
---|---|
name |
Tên; bắt buộc Tên riêng cho mục tiêu này. |
profile
|
Nhãn; bắt buộc Nhãn của hồ sơ MEMPROF. Hồ sơ dự kiến sẽ có đuôi .profdata (đối với hồ sơ memprof được lập chỉ mục/biểu thị bằng ký hiệu) hoặc đuôi .zip đối với tệp zip chứa tệp memprof.profdata. Nhãn này cũng có thể trỏ đến một quy tắc fdo_absolute_path_profile. |
propeller_optimize
Xem nguồn quy tắcpropeller_optimize(name, cc_profile, compatible_with, deprecation, exec_compatible_with, exec_group_compatible_with, exec_properties, features, ld_profile, package_metadata, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)
Đại diện cho một hồ sơ tối ưu hoá Propeller trong không gian làm việc. Ví dụ:
propeller_optimize(
name = "layout",
cc_profile = "//path:cc_profile.txt",
ld_profile = "//path:ld_profile.txt"
)
Đối số
Thuộc tính | |
---|---|
name |
Tên; bắt buộc Tên riêng cho mục tiêu này. |
cc_profile
|
Nhãn; bắt buộc Nhãn của hồ sơ được truyền đến các thao tác biên dịch khác nhau. Tệp này có đuôi .txt. |
ld_profile
|
Nhãn; bắt buộc Nhãn của trang doanh nghiệp được truyền đến thao tác liên kết. Tệp này có đuôi .txt. |