Quy tắc
- cc_binary
- cc_import
- cc_library
- cc_proto_library
- cc_shared_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, copts, defines, deprecation, distribs, dynamic_deps, env, exec_compatible_with, exec_properties, features, hdrs_check, includes, licenses, link_extra_lib, linkopts, linkshared, linkstatic, local_defines, malloc, module_interfaces, nocopts, output_licenses, reexport_deps, restricted_to, stamp, tags, target_compatible_with, testonly, toolchains, visibility, win_def_file)
Tệp 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 nằm trong main.cc
, thì tên của bạn phải là main
.
Các 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): Phiên bản đã loại bỏ của tệp nhị phân.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 thêm các tuỳ chọn dải trên dòng lệnh bằng cách sử dụng--stripopt=-foo
.name.dwp
(chỉ tạo nếu được yêu cầu rõ ràng): Nếu bật Fission: 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. Trường hợp còn lại: một tệp trống.
Đối số
Thuộc tính | |
---|---|
name |
Tên; bắt buộc Tên duy nhất 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 |
srcs
|
Danh sách nhãn; mặc định là Tất cả tệp Các tệp tập hợp thuần tuý (.s, .asm) không được xử lý trước và thường được tạo bằng trình tập hợp. Các tệp tập hợp đã 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 Tệp Nếu thuộc tính
Loại tệp
... và bất kỳ quy tắc nào tạo ra các tệp đó (ví dụ: |
data
|
Danh sách nhãn; mặc định là data tại phần Các thuộc tính điển hình được 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à Ví dụ: bạn có thể cung cấp các tệp Windows .res đã biên dịch tại đây để nhúng vào mục tiêu nhị phân. |
copts
|
Danh sách chuỗi; mặc định là
Mỗi chuỗi trong thuộc tính này được thêm theo thứ tự nhất định vào
Nếu gói khai báo tính năng
|
defines
|
Danh sách chuỗi; mặc định là -D và thêm vào dòng lệnh biên dịch cho mục tiêu này, cũng như vào mọi quy tắc phụ thuộc vào chuỗi đó. Hãy thật cẩn thận, vì việc này có thể
ảnh hưởng sâu rộng. 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.
Hoạt động triển khai |
hdrs_check
|
Chuỗi; giá trị mặc định là |
includes
|
Danh sách chuỗi; mặc định là -isystem path_to_package/include_entry .
Bạn chỉ nên sử dụng thuộc tính này cho các 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, những 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 đó. (Lưu ý: không phải quy tắc mà nó phụ thuộc vào!) Hãy thật cẩn thận, vì việc này có thể có ả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 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ử của 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 tắt.
Sự hiện diện của cờ này có nghĩa là việc liên kết sẽ diễn 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à tệp nhị phân hoặc kiểm thử, tuỳ chọn này sẽ yêu cầu công cụ bản dựng liên kết trong Có thực sự ba cách khác nhau để 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 xây dựng bằng |
local_defines
|
Danh sách chuỗi; mặc định là -D và thêm vào dòng lệnh biên dịch cho mục tiêu này
nhưng không thêm vào phần phụ thuộc của chuỗi).
|
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 có hạn chế về đuôi tệp giao diện mô-đun
Hoạt động sử dụng này được bảo vệ bởi cờ |
nocopts
|
Chuỗi; giá trị mặc định là COPTS có sẵn 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 nhằm mục đích biên dịch quy tắc này.
Không cần thiết hoặc 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 cách thay thế biến "Make" (Tạo).
|
reexport_deps
|
Danh sách nhãn; mặc định là |
stamp
|
Số nguyên; giá trị mặc định là
Tệp nhị phân đã đóng dấu 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 tệp này để xuất biểu tượng trong quá trình liên kết thư viện dùng chung. |
cc_import
Xem nguồn quy tắccc_import(name, deps, data, hdrs, alwayslink, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, includes, interface_library, linkopts, objects, pic_objects, pic_static_library, restricted_to, shared_library, static_library, system_provided, tags, target_compatible_with, testonly, toolchains, visibility)
Các quy tắc 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 = 1,
)
2. Liên kết thư viện chia sẻ (Unix)
cc_import(
name = "mylib",
hdrs = ["mylib.h"],
shared_library = "libmylib.so",
)
3. Liên kết thư viện chia sẻ với thư viện giao diện
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",
)
4. Liên kết thư viện chia sẻ với 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 = 1,
)
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 = 1,
)
5. Liên kết đến thư viện tĩnh hoặc thư viện chia sẻ
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",
)
Các 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 = 1, # default value
)
# second will link to libmylib.so (or libmylib.lib)
cc_binary(
name = "second",
srcs = ["second.cc"],
deps = [":mylib"],
linkstatic = 0,
)
cc_import
hỗ trợ thuộc tính "bao gồm". 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 duy nhất cho mục tiêu này. |
deps
|
Danh sách nhãn; mặc định là deps tại phần Các thuộc tính điển hình được 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ì nguyên nhân là do 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 chuỗi; mặc định là -isystem path_to_package/include_entry .
Bạn chỉ nên sử dụng thuộc tính này cho các 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, những 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 đó. (Lưu ý: không phải quy tắc mà nó phụ thuộc vào!) Hãy thật cẩn thận, vì việc này có thể có ả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 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ử của 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:
|
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, copts, defines, deprecation, distribs, exec_compatible_with, exec_properties, features, hdrs_check, implementation_deps, include_prefix, includes, licenses, linkopts, linkstamp, linkstatic, local_defines, module_interfaces, 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 C++.
Kết quả sẽ là .so
, .lo
hoặc .a
, tuỳ thuộc vào dữ liệu cần thiết.
Nếu bạn tạo bản dựng bằng đường liên kết tĩnh phụ thuộc vào cc_library
, thì kết quả của quy tắc thư viện phụ thuộc vào đó sẽ 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 kết thúc lần lượt 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 sử dụng quy tắc gen để sao chép thư viện
sang tên mà bạn muốn.
Kiểm tra việc đưa vào tiêu đề
Bạn phải khai báo mọi tệp tiêu đề dùng trong bản dựng trong hdrs
hoặc srcs
của các quy tắc cc_*
.
Yêu cầu 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
của chúng.
Bạn chỉ được đưa trực tiếp tiêu đề trong srcs
vào các tệp trong hdrs
và srcs
của chính thư viện đó. Khi quyết định đặt tiêu đề vào hdrs
hay srcs
, bạn nên hỏi xem bạn có muốn người tiêu dùng của thư viện này có thể trực tiếp đưa tiêu đề vào hay không. Đây gần như là quyết định giống như việc giữa chế độ 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 xuất nên cũng không có thuộc tính hdrs
. Tất cả tiêu đề thuộc tệp nhị phân hoặc kiểm thử trực tiếp 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"],
)
Những nội dung được phép đưa vào trực tiếp trong ví dụ này được liệt kê trong bảng dưới đây.
Ví dụ: foo.cc
được phép trực tiếp đưa foo.h
và bar.h
vào, nhưng không được phép đưa baz.h
vào.
Đang bao gồm tệp | Các trang đượ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 việc đư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
) và sau đó cũng được phép đưa baz-impl.h
vào. Về mặt kỹ thuật, quá trình biên dịch tệp .cc
có thể bắc cầu mọi tệp tiêu đề trong hdrs
hoặc srcs
trong bất kỳ cc_library
nào trong đó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 làm điều đó, bạn phải thêm baz
vào deps
của foo
.
Bazel phụ thuộc vào tính 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.
Tính năng layering_check
phải được chuỗi công cụ hỗ trợ và được yêu cầu 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 tôi 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ã đó.
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 = 1,
)
Ví dụ sau đây lấy 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 tuỳ 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 lấy từ third_party/kde/BUILD
.
Chúng tôi lưu giữ các tệp .so
dựng sẵn trong kho.
Các tệp tiêu đề nằm trong 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 lấy từ third_party/gles/BUILD
.
Mã 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 duy nhất 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 nhận xét chung về Đây phải là tên của các quy tắc của 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 "deps", nhưng không phải tất 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 trong thời gian chạy thuộc Để liên kết trong một thư viện được biên dịch trước của bên thứ ba, hãy thêm tên của thư viện đó vào Để phụ thuộc vào một nội dung nào đó mà không cần liên kết nội dung đó với thư viện này, hãy thêm tên của nội dung đó vào |
srcs
|
Danh sách nhãn; mặc định là Tất cả tệp Các tệp tập hợp thuần tuý (.s, .asm) không được xử lý trước và thường được tạo bằng trình tập hợp. Các tệp tập hợp đã 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 Tệp Nếu thuộc tính
Loại tệp
... và bất kỳ quy tắc nào tạo ra các tệp đó (ví dụ: |
data
|
Danh sách nhãn; mặc định là data tại phần Các thuộc tính điển hình được 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 dùng để khai báo tệp tiêu đề mô tả giao diện cho thư viện. Những tiêu đề này sẽ được cung cấp để đưa vào các nguồn trong quy tắc này hoặc trong các quy tắc phụ thuộc.
Các tiêu đề không dành cho ứng dụng của thư viện này phải được liệt kê trong thuộc tính 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à Ví dụ: bạn có thể cung cấp các tệp Windows .res đã biên dịch tại đây để nhúng vào mục tiêu 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 được tệp nhị phân tham chiếu.
Điều này sẽ hữu ích nếu mã không được gọi rõ ràng bằng mã trong tệp nhị phân, chẳng hạn như nếu mã của bạn đăng ký nhận một số lệnh gọi lại do dịch vụ nào đó cung cấp.
Nếu Alwayslink không hoạt động với VS 2017 trên Windows, thì nguyên nhân là do vấn đề đã biết, vui lòng nâng cấp VS 2017 lên phiên bản mới nhất. |
copts
|
Danh sách chuỗi; mặc định là
Mỗi chuỗi trong thuộc tính này được thêm theo thứ tự nhất định vào
Nếu gói khai báo tính năng
|
defines
|
Danh sách chuỗi; mặc định là -D và thêm vào dòng lệnh biên dịch cho mục tiêu này, cũng như vào mọi quy tắc phụ thuộc vào chuỗi đó. Hãy thật cẩn thận, vì việc này có thể
ảnh hưởng sâu rộng. 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 , tiêu đề và đường dẫn của các thư viện này (và tất cả các phần phụ thuộc bắc cầu của thư viện) 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 đó. 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.
Hiện tại, việc sử dụng chỉ giới hạn ở cc_library và được bảo vệ bằng cờ |
include_prefix
|
Chuỗi; giá trị mặc định là Khi đặ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 theo |
includes
|
Danh sách chuỗi; mặc định là -isystem path_to_package/include_entry .
Bạn chỉ nên sử dụng thuộc tính này cho các 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, những 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 đó. (Lưu ý: không phải quy tắc mà nó phụ thuộc vào!) Hãy thật cẩn thận, vì việc này có thể có ả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 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) trên 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 ). Đường liên kết phần phụ thuộc được ưu tiên hơn các đường liên kết phụ thuộc (tức là các đường liên kết phụ thuộc xuất hiện sau trong dòng lệnh). Các chế độ liên kết được chỉ định trong --linkopt sẽ được ưu tiên hơn các chế độ liên kết theo quy tắc.
Xin lưu ý rằng thuộc tính Ngoài ra, điều quan trọng cần lưu ý là các tuỳ chọn "-Wl,-soname" hoặc "-Xlinker -soname" không được hỗ trợ và không bao giờ được chỉ định 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à tệp nhị phân hoặc kiểm thử, tuỳ chọn này sẽ yêu cầu công cụ bản dựng liên kết trong Có thực sự ba cách khác nhau để 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 xây dựng bằng |
local_defines
|
Danh sách chuỗi; mặc định là -D và thêm vào dòng lệnh biên dịch cho mục tiêu này
nhưng không thêm vào phần phụ thuộc của chuỗi).
|
module_interfaces
|
Danh sách nhãn; mặc định là Tiêu chuẩn C++ không có hạn chế về đuôi tệp giao diện mô-đun
Hoạt động sử dụng này được bảo vệ bởi cờ |
strip_include_prefix
|
Chuỗi; giá trị mặc định là Khi thiết lập, 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 theo gói. Nếu giá trị là một giá trị tuyệt đối, thì nó được hiểu là một đường dẫn tương đối đến kho lưu trữ. Tiền tố trong thuộc tính Thuộc tính này chỉ hợp pháp theo |
textual_hdrs
|
Danh sách nhãn; mặc định là Đây là vị trí để khai báo tệp tiêu đề không thể tự biên dịch; nghĩa là các tệp nguồn khác luôn cần thêm các tệp tiêu đề này vào phương thức 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 tệp này để xuất biểu tượng trong quá trình liên kết thư viện dùng chung. |
cc_proto_library
Xem nguồn quy tắccc_proto_library(name, deps, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)
cc_proto_library
tạo mã C++ từ các tệp .proto
.
deps
phải trỏ đến các quy tắc proto_library
.
Ví dụ:
cc_library(
name = "lib",
deps = [":foo_cc_proto"],
)
cc_proto_library(
name = "foo_cc_proto",
deps = [":foo_proto"],
)
proto_library(
name = "foo_proto",
)
Đối số
Thuộc tính | |
---|---|
name |
Tên; bắt buộc Tên duy nhất cho mục tiêu này. |
deps
|
Danh sách nhãn; mặc định là proto_library để tạo mã C++.
|
cc_shared_library
Xem nguồn quy tắccc_shared_library(name, deps, additional_linker_inputs, compatible_with, deprecation, distribs, dynamic_deps, exec_compatible_with, exec_properties, experimental_disable_topo_sort_do_not_use_remove_before_7_0, exports_filter, features, restricted_to, roots, shared_lib_name, static_deps, tags, target_compatible_with, testonly, toolchains, user_link_flags, visibility, win_def_file)
Tạo 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ụ này, foo_shared
liên kết tĩnh foo
và baz
, phần sau là phần phụ thuộc bắc cầu. Thuộc tính này không liên kết với bar
vì mã này đã được dynamic_dep
bar_shared
cung cấp một cách linh động.
foo_shared
sử dụng tệp tập lệnh trình liên kết *.lds để kiểm soát biểu tượng nào nên được xuất. Logic quy tắc cc_shared_library
không kiểm soát ký hiệu nào được xuất mà chỉ sử dụng những ký hiệu được giả định là sẽ 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à được xuất. Do đó, Bazel giả định trong quá trình phân tích rằng foo
đang được foo_shared
xuất. Không giả định rằng baz
sẽ được foo_shared
xuất. Mọi mục tiêu mà exports_filter
khớp với giá trị này cũng được giả định là được xuất.
Mỗi cc_library
trong ví dụ này phải xuất hiện tối đa trong một cc_shared_library
. Nếu muốn liên kết cả baz
với
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 ra sẽ có tên 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ục tiêu có hai 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 việc xuất thư viện ở 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 với hai phần phụ thuộc cc_shared_library
khác nhau liên kết tĩnh với cùng một mục tiêu.
Tương tự như lỗi xuất dữ liệu.
Có một cách để khắc phục vấn đề này là ngừng liên kết thư viện với 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 cần xuất thư viện để ứng dụng không liên kết vẫn có thể nhìn thấy các biểu tượng. Một cách khác là lấy thư viện thứ ba xuất mục tiêu.
Cách thứ ba là gắn thẻ thủ phạm cc_library
bằng LINKABLE_MORE_THAN_ONCE
. Tuy nhiên, cách khắc phục này hiếm khi xảy ra và bạn hoàn toàn phải đảm bảo 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`
Tức là có thể truy cập vào một thư viện trong quá trình đóng bắc cầu của deps
mà không cần trải qua một trong các phần phụ thuộc cc_shared_library
, nhưng đã được liên kết với một cc_shared_library
khác trong dynamic_deps
và không được xuất.
Giải pháp cho trường hợp này là xuất dữ liệu này từ phần phụ thuộc cc_shared_library
hoặc lấy cc_shared_library
thứ ba xuất tệp đó.
Do not place libraries which only contain a precompiled dynamic library in deps.
Nếu bạn có một thư viện động được biên dịch trước, thì thư viện này không cần và không thể được liên kết tĩnh với mục tiêu cc_shared_library
hiện tại mà bạn đang tạo. Do đó, thuộc tính này không thuộc deps
của cc_shared_library
. Nếu thư viện động được biên dịch trước này là phần phụ thuộc của một trong các cc_libraries
của bạn, 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 trên quy tắc hiện tại, bạn đang xác nhận quyền sở hữu để xuất một mục tiêu đã được một trong các phần phụ thuộc động của bạn xuất.
Để khắc phục vấn đề này, hãy xoá mục tiêu khỏi deps
và chỉ cần 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 được mục tiêu này.
Đối số
Thuộc tính | |
---|---|
name |
Tên; bắt buộc Tên duy nhất 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 đều sẽ được liên kết với thư viện chia sẻ này, miễn là chúng chưa được liên kết bằng
Trong quá trình phân tích, việc triển khai quy tắc sẽ coi 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.
Hoạt động triển khai |
experimental_disable_topo_sort_do_not_use_remove_before_7_0
|
Boolean; giá trị mặc định là |
exports_filter
|
Danh sách chuỗi; mặc định là
Thư viện dùng chung đã hiểu mọi
Lưu ý rằng thuộc tính này không thực sự thêm cạnh phần phụ thuộc vào các mục tiêu đó. Thay vào đó, cạnh phần phụ thuộc phải được tạo bằng 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 chuỗi; mặc định là |
user_link_flags
|
Danh sách 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 tệp này để xuất biểu tượng trong quá trình liên kết thư viện dùng chung. |
cc_test
Xem nguồn quy tắccc_test(name, deps, srcs, data, additional_linker_inputs, args, compatible_with, copts, defines, deprecation, distribs, dynamic_deps, env, env_inherit, exec_compatible_with, exec_properties, features, flaky, hdrs_check, includes, licenses, link_extra_lib, linkopts, linkshared, linkstatic, local, local_defines, malloc, module_interfaces, nocopts, reexport_deps, restricted_to, shard_count, size, stamp, tags, target_compatible_with, testonly, timeout, toolchains, visibility, win_def_file)
Quy tắc cc_test()
biên dịch một hoạt động 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 chương trình kiểm thử C++ được liên kết một cách linh động.
Để liên kết tĩnh một bài kiểm thử đơn vị, hãy chỉ định linkstatic=True
.
Bạn nên nhận xét lý do tại sao kiểm thử của bạn cần linkstatic
; điều này có thể không rõ ràng.
Các 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): Phiên bản đã loại bỏ của tệp nhị phân.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 thêm các tuỳ chọn dải trên dòng lệnh bằng cách sử dụng--stripopt=-foo
.name.dwp
(chỉ tạo nếu được yêu cầu rõ ràng): Nếu bật Fission: 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. Trường hợp còn lại: một tệp trống.
Vui lòng xem các đối số cc_binary(), ngoại trừ việc đối số stamp
được đặt thành 0 theo mặc định cho các hoạt động kiểm thử và cc_test
có thêm các
thuộc tính
dành cho tất cả quy tắc kiểm thử (*_test).
Đối số
Thuộc tính | |
---|---|
name |
Tên; bắt buộc Tên duy nhất 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 |
srcs
|
Danh sách nhãn; mặc định là Tất cả tệp Các tệp tập hợp thuần tuý (.s, .asm) không được xử lý trước và thường được tạo bằng trình tập hợp. Các tệp tập hợp đã 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 Tệp Nếu thuộc tính
Loại tệp
... và bất kỳ quy tắc nào tạo ra các tệp đó (ví dụ: |
data
|
Danh sách nhãn; mặc định là data tại phần Các thuộc tính điển hình được 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à Ví dụ: bạn có thể cung cấp các tệp Windows .res đã biên dịch tại đây để nhúng vào mục tiêu nhị phân. |
copts
|
Danh sách chuỗi; mặc định là
Mỗi chuỗi trong thuộc tính này được thêm theo thứ tự nhất định vào
Nếu gói khai báo tính năng
|
defines
|
Danh sách chuỗi; mặc định là -D và thêm vào dòng lệnh biên dịch cho mục tiêu này, cũng như vào mọi quy tắc phụ thuộc vào chuỗi đó. Hãy thật cẩn thận, vì việc này có thể
ảnh hưởng sâu rộng. 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.
Hoạt động triển khai |
hdrs_check
|
Chuỗi; giá trị mặc định là |
includes
|
Danh sách chuỗi; mặc định là -isystem path_to_package/include_entry .
Bạn chỉ nên sử dụng thuộc tính này cho các 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, những 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 đó. (Lưu ý: không phải quy tắc mà nó phụ thuộc vào!) Hãy thật cẩn thận, vì việc này có thể có ả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 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ử của 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 tắt.
Sự hiện diện của cờ này có nghĩa là việc liên kết sẽ diễn 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à tệp nhị phân hoặc kiểm thử, tuỳ chọn này sẽ yêu cầu công cụ bản dựng liên kết trong Có thực sự ba cách khác nhau để 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 xây dựng bằng |
local_defines
|
Danh sách chuỗi; mặc định là -D và thêm vào dòng lệnh biên dịch cho mục tiêu này
nhưng không thêm vào phần phụ thuộc của chuỗi).
|
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 có hạn chế về đuôi tệp giao diện mô-đun
Hoạt động sử dụng này được bảo vệ bởi cờ |
nocopts
|
Chuỗi; giá trị mặc định là COPTS có sẵn 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 nhằm mục đích biên dịch quy tắc này.
Không cần thiết hoặc 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 cách thay thế biến "Make" (Tạo).
|
reexport_deps
|
Danh sách nhãn; mặc định là |
stamp
|
Số nguyên; giá trị mặc định là
Tệp nhị phân đã đóng dấu 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 tệp này để xuất biểu tượng trong quá trình liên kế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, distribs, dwp_files, dynamic_runtime_lib, exec_compatible_with, exec_properties, exec_transition_for_inputs, features, libc_top, licenses, linker_files, module_map, objcopy_files, output_licenses, 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ấ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 nhóm tệp hoàn thành 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 trình cung cấp
CcToolchainConfigInfo
(thông tin chi tiết như bên dưới).
Sử dụng thuộc tính toolchain_config
để định cấu hình chuỗi công cụ C++.
Xem thêm
trang
này để biết cấu hình chuỗi công cụ C++ chi tiết và tài liệu lựa chọn chuỗi công cụ.
Sử dụng tags = ["manual"]
để ngăn việc tạo và định cấu hình chuỗi công cụ 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 duy nhất cho mục tiêu này. |
all_files
|
Nhãn; bắt buộc Thu thập tất 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ừ các thao tác đang sử dụng các nhóm 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à tập mẹ của tất cả các thuộc tính khác cung cấp cấu phần phần mềm (ví dụ: quá trình biên dịch linkstamp cần cả tệp biên dịch lẫn tệp liên kết, nên sẽ cần all_files ).
Đây là nội dung mà |
ar_files
|
Nhãn; mặc định là |
as_files
|
Nhãn; mặc định là |
compiler_files
|
Nhãn; bắt buộc Thu thập tất 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 Thu thập tất 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à Giá trị này sẽ được dùng khi tính năng "static_link_cpp_runtimes" được bật và chúng tôi sẽ 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 Thu thập tất 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 Thu thập tất 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 chuỗi; mặc định là |
static_runtime_lib
|
Nhãn; mặc định là Thuộc tính này sẽ được sử dụng khi bạn bật tính năng "static_link_cpp_runtimes" và chúng ta sẽ liên kết các phần phụ thuộc theo cách tĩnh. |
strip_files
|
Nhãn; bắt buộc Thu thập tất cả cấu phần phần mềm cc_toolchain cần thiết cho các thao tác loại bỏ. |
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, bạn nên liên kết |
cc_toolchain_suite
Xem nguồn quy tắccc_toolchain_suite(name, compatible_with, deprecation, distribs, features, licenses, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)
Không dùng nữa: quy tắc không hoạt động và sẽ bị xoá.
Đối số
Thuộc tính | |
---|---|
name |
Tên; bắt buộc Tên duy nhất cho mục tiêu này. |
fdo_prefetch_hints
Xem nguồn quy tắcfdo_prefetch_hints(name, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, profile, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)
Đại diện cho một hồ sơ gợi ý tìm nạp trước FDO 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 duy nhất 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 là .afdo.Nhãn cũng có thể trỏ đến quy tắc fdo_exact_path_profile. |
fdo_profile
Xem nguồn quy tắcfdo_profile(name, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, memprof_profile, profile, proto_profile, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)
Đại diện cho 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 duy nhất 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 hồ sơ FDO. 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 cũng có thể trỏ đến quy tắc fdo_ menu_path_profile. |
proto_profile
|
Nhãn; mặc định là |
memprof_profile
Xem nguồn quy tắcmemprof_profile(name, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, profile, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)
Đại diện cho một cấu hình MEMPROF 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 duy nhất cho mục tiêu này. |
profile
|
Nhãn; bắt buộc Nhãn của cấu hình MEMPROF. Hồ sơ này dự kiến có đuôi .profdata (đối với hồ sơ memprof được lập chỉ mục/ký hiệu) hoặc một đuôi .zip cho một tệp zipfile chứa tệp memprof.profdata. Nhãn cũng có thể trỏ đến quy tắc fdo_ menu_path_profile. |
propeller_optimize
Xem nguồn quy tắcpropeller_optimize(name, cc_profile, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, ld_profile, 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 duy nhất 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 nhiều thao tác biên dịch. Tệp này có đuôi là .txt. |
ld_profile
|
Nhãn; bắt buộc Nhãn của hồ sơ được chuyển đến thao tác liên kết. Tệp này có đuôi là .txt. |