Quy tắc
- cc_binary
- cc_import
- cc_library
- cc_proto_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, 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 của bạn nằm trong main.cc
, thì tên của bạn sẽ
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): Một bản sao phiên bản của tệp nhị phân.strip -g
được chạy trên tệp nhị phân để xoá gỡ lỗi . Các tùy chọn dải bổ sung có thể được cung cấp 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 tính năng Fission: một bản 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: an 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; giá trị mặc định là Các lựa chọn này có thể là |
srcs
|
Danh sách nhãn; giá trị 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 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 cách sử dụng trình biên dịch C/C++. Tệp Tất cả Các 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; giá trị mặc định là data
tại Các thuộc tính điển hình được xác định bởi
hầu hết các quy tắc xây dựng.
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; giá trị mặc định là Ví dụ: Bạn có thể cung cấp các tệp Windows .res đã biên dịch ở đây để nhúng trong mục tiêu nhị phân. |
copts
|
Danh sách các chuỗi; giá trị 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 này
|
defines
|
Danh sách các chuỗi; giá trị mặc định là -D và thêm vào dòng lệnh biên dịch vào mục tiêu này,
cũng như mọi quy tắc phụ thuộc vào quy tắc đó. 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 giá trị định nghĩa vào
local_defines .
|
dynamic_deps
|
Danh sách nhãn; giá trị 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
|
String; giá trị mặc định là |
includes
|
Danh sách các chuỗi; giá trị mặc định là -isystem path_to_package/include_entry .
Bạn chỉ nên sử dụng trình điều khiển này cho các thư viện của bên thứ ba
không tuân theo kiểu viết của Google trong câu lệnh #include.
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 nó. (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
"-Tôi" gắn cờ vào COPTS.
Các đường dẫn |
link_extra_lib
|
Nhãn; giá trị 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; giá trị mặc định là LINKOPTS trước
liên kết mục tiêu nhị phân.
Mỗi phần tử của danh sách này mà 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 đang tắt.
Sự hiện diện của cờ này có nghĩa là hoạt động liên kết sẽ diễn ra với cờ
Nếu bạn 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 ở dạng 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 thử nghiệm, 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 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 các chuỗi; giá trị 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 được phép cho các thành viên phụ thuộc.
|
malloc
|
Nhãn; giá trị 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; giá trị 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 cờ bảo vệ
|
nocopts
|
String; giá trị mặc định là COPTS nào có trước đó khớp với biểu thức chính quy này
(bao gồm 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 nhãn "Tạo" thay thế biến.
|
reexport_deps
|
Danh sách nhãn; giá trị 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; giá trị 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 mã này để xuất các biểu tượng trong khi liên kết thư viện chia sẻ. |
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 điểm. 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 điểm. 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",
)
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; giá trị mặc định là deps
tại Các thuộc tính điển hình được xác định bởi
hầu hết các quy tắc xây dựng.
|
hdrs
|
Danh sách nhãn; giá trị 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, đó là do lỗi vấn đề đã biết, vui lòng nâng cấp phiên bản VS 2017 của bạn lên phiên bản mới nhất. |
includes
|
Danh sách các chuỗi; giá trị mặc định là -isystem path_to_package/include_entry .
Bạn chỉ nên sử dụng trình điều khiển này cho các thư viện của bên thứ ba
không tuân theo kiểu viết của Google trong câu lệnh #include.
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 nó. (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
"-Tôi" gắn cờ vào COPTS.
Đường dẫn |
interface_library
|
Nhãn; giá trị mặc định là Loại tệp được phép:
|
linkopts
|
Danh sách các chuỗi; giá trị mặc định là LINKOPTS trước
liên kết mục tiêu nhị phân.
Mỗi phần tử của danh sách này mà không bắt đầu bằng |
objects
|
Danh sách nhãn; giá trị mặc định là |
pic_objects
|
Danh sách nhãn; giá trị mặc định là |
pic_static_library
|
Nhãn; giá trị mặc định là |
shared_library
|
Nhãn; giá trị mặc định là Loại tệp được phép:
|
static_library
|
Nhãn; giá trị mặc định là Loại tệp được phép:
|
system_provided
|
Boolean; giá trị mặc định là interface_library và
shared_library phải trống.
|
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 yêu cầu.
Nếu bạn tạo thứ gì đó bằng liên kết tĩnh phụ thuộc vào
cc_library
, đầu ra của quy tắc thư viện phụ thuộc
là tệp .a
. Nếu bạn 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 chia sẻ, trong đó foo là tên của quy tắc. Chiến lược phát hành đĩa đơn
các loại thư viện khác kết thúc bằng .lo
và .a
,
. Nếu bạn cần một tên cụ thể của thư viện chia sẻ, cho
ví dụ: để xác định một mô-đun Python, hãy dùng quy tắc gen để sao chép thư viện
thành tên mong muốn.
Kiểm tra việc đưa vào tiêu đề
Bạn phải khai báo tất cả tệp tiêu đề dùng trong bản dựng trong
hdrs
hoặc srcs
trong số các quy tắc cc_*
.
Yêu cầu này được thực thi.
Đối với 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ả hai
từ các tệp trong hdrs
và srcs
của thư viện
cũng như từ các tệp trong hdrs
và srcs
trên cc_*
quy tắc liệt kê thư viện trong deps
của chúng.
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. Thời gian
quyết định xem đặ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 đưa vào đó. Đây gần như là quyết định giống với
giữa chế độ hiển thị public
và private
trong ngôn ngữ lập trình.
Các quy tắc cc_binary
và cc_test
chưa xuất tệp
nên chúng cũng không có thuộc tính hdrs
. Tất cả tiêu đề
thuộc về tệp nhị phân hoặc phép thử trực tiếp nên đượ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
bao gồm foo.h
và bar.h
, nhưng không bao gồm baz.h
.
Đ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 |
Quy tắc kiểm tra việc đưa vào chỉ áp dụng cho phương thức trực tiếp
bao gồm. Trong ví dụ trên, foo.cc
được phép
bao gồm bar.h
, có thể bao gồm baz.h
, trong đó
được phép rẽ để thê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ắc cầu mọi tiêu đề
trong hdrs
hoặc srcs
trong
bất kỳ cc_library
nào trong đường đóng deps
bắc cầu. Trong
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ó
được phép, bạn phải thêm baz
vào deps
trong tổng số 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à yêu cầu một cách rõ ràng, ví dụ: qua
cờ dòng lệnh --features=layering_check
hoặc
tham số features
của
package
. 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ã đó.
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 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 chỉ định tùy 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ã 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 duy nhất cho mục tiêu này. |
deps
|
Danh sách nhãn; giá trị 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 bạn tạo 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ó "dep" không phải tất cả ứng dụng khách của thư viện này
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ủa 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 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 nội dung đó
thành |
srcs
|
Danh sách nhãn; giá trị 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 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 cách sử dụng trình biên dịch C/C++. Tệp Tất cả Các 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; giá trị mặc định là data
tại Các thuộc tính điển hình được xác định bởi
hầu hết các quy tắc xây dựng.
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; giá trị 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. Các tiêu đề này sẽ được tạo
có thể đưa vào theo các nguồn trong quy tắc này hoặc trong các quy tắc phụ thuộc.
Tiêu đề không dành cho ứng dụng khách của thư viện này phải được
được liệt kê trong thuộc tính Loại tệp |
additional_compiler_inputs
|
Danh sách nhãn; giá trị mặc định là |
additional_linker_inputs
|
Danh sách nhãn; giá trị mặc định là Ví dụ: Bạn có thể cung cấp các tệp Windows .res đã biên dịch ở đây để nhúng trong 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 rất hữu ích nếu mã của bạn không được gọi rõ ràng bằng mã trong
tệp nhị phân, 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, đó là do lỗi vấn đề đã biết, vui lòng nâng cấp phiên bản VS 2017 của bạn lên phiên bản mới nhất. |
copts
|
Danh sách các chuỗi; giá trị 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 này
|
defines
|
Danh sách các chuỗi; giá trị mặc định là -D và thêm vào dòng lệnh biên dịch vào mục tiêu này,
cũng như mọi quy tắc phụ thuộc vào quy tắc đó. 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 giá trị định nghĩa vào
local_defines .
|
hdrs_check
|
String; giá trị mặc định là |
implementation_deps
|
Danh sách nhãn; giá trị mặc định là deps , tiêu đề và bao gồm đường dẫn của các thư viện này (cũng như tất cả các đường dẫn
Phần phụ thuộc bắc cầu) 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 mã đó. Các thư viện được chỉ định với 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_ libraries và được bảo vệ bằng cờ
|
include_prefix
|
String; giá trị mặc định là Khi đặt chính sách này, bạn có thể truy cập được 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 các chuỗi; giá trị mặc định là -isystem path_to_package/include_entry .
Bạn chỉ nên sử dụng trình điều khiển này cho các thư viện của bên thứ ba
không tuân theo kiểu viết của Google trong câu lệnh #include.
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 nó. (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
"-Tôi" gắn cờ vào COPTS.
Các đường dẫn |
linkopts
|
Danh sách các chuỗi; giá trị 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 hay gián tiếp, vào thư viện này thông qua deps
(hoặc qua các thuộc tính khác được xử lý tương tự:
malloc
của cc_binary ). Phần phụ thuộc
Các chế độ liên kết được ưu tiên so với các chế độ liên kết phụ thuộc (tức là các chế độ liên kết phụ thuộc
xuất hiện sau trong dòng lệnh). Liên kết được chỉ định trong
--linkopt
được ưu tiên hơn việc chọn liên kết 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à "-Wl,-soname" hoặc "-Xlinker -soname" không được hỗ trợ và không được chỉ định trong thuộc tính này. Các tệp |
linkstamp
|
Nhãn; giá trị 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 ở dạng 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 thử nghiệm, 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 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 các chuỗi; giá trị 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 được phép cho các thành viên phụ thuộc.
|
module_interfaces
|
Danh sách nhãn; giá trị 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 cờ bảo vệ
|
strip_include_prefix
|
String; giá trị mặc định là Khi đặt chính sách này, bạn có thể truy cập được 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à tuyệt đối, nó được hiểu là một đường dẫn tương đối liên quan đế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; giá trị mặc định là Đây là vị trí để khai báo tệp tiêu đề không thể tự biên dịch; tức là chúng luôn cần được đưa vào bằng văn bản bởi các tệp nguồn khác để tạo phiên bản hợp lệ . |
win_def_file
|
Nhãn; giá trị 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 mã này để xuất các biểu tượng trong khi liên kết thư viện chia sẻ. |
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; giá trị 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ụ thuộc bắc cầu. Không
liên kết bar
vì liên kết này đã được cung cấp động bởi
dynamic_dep
bar_shared
.
foo_shared
sử dụng tệp tập lệnh trình liên kết *.lds để kiểm soát
cần được xuất. Logic quy tắc cc_shared_library
thực hiện
không kiểm soát biểu tượng nào được xuất mà chỉ sử dụng biểu tượng được giả định là
được xuất để cung cấp lỗi trong giai đoạn phân tích nếu hai thư viện dùng chung xuất
các mục tiêu giống nhau.
Mọi phần phụ thuộc trực tiếp của cc_shared_library
được giả định là
đã xuất. Do đó, Bazel giả định trong quá trình phân tích rằng foo
đang được
do foo_shared
xuất. Giả định không xuất baz
của foo_shared
. Mọi mục tiêu khớp với exports_filter
cũng được giả định là được xuất.
Mỗi cc_library
đơn lẻ trong ví dụ này phải xuất hiện tối đa trong một
cc_shared_library
. Nếu chúng tôi cũng muốn liên kết baz
vào
bar_shared
chúng tôi cần thêm
tags = ["LINKABLE_MORE_THAN_ONCE"]
thành baz
.
Do thuộc tính shared_lib_name
, tệp được tạo bởi
bar_shared
sẽ có tên là bar.so
, trái ngược với
thành tên libbar.so
mà hệ thống sẽ đặt 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
Các phần phụ thuộc cc_shared_library
xuất cùng mục tiêu. Để khắc phục vấn đề này
bạn cần dừng xuất thư viện ở một trong
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ó hai
các phần phụ thuộc cc_shared_library
khác nhau liên kết với cùng một mục tiêu theo cách tĩnh.
Tương tự như lỗi xuất dữ liệu.
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
Phần phụ thuộc cc_shared_library
. Đồng thời, nền tảng vẫn liên kết
cần xuất thư viện để ứng dụng không liên kết có thể hiển thị
các ký hiệu. 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
nhưng lỗi này rất hiếm khi xảy ra và bạn hoàn toàn nên đảm bảo rằng
cc_library
thực sự an toàn khi 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 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 việc này là xuất tệp từ phần phụ thuộc cc_shared_library
hoặc lấy ra
cc_shared_library
thứ ba xuất dữ liệu này.
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ì bạn không nhất thiết 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 có
hiện đang tạo. Do đó, mục 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
của cc_libraries
, thì cc_library
cần phụ thuộc vào phương thức đó
trực tiếp.
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 xuất mục tiêu đang được một trong các phần phụ thuộc động của bạn xuất ra.
Để khắc phục lỗi này, hãy xoá mục tiêu khỏi deps
và chỉ dựa vào mục tiêu đó trong quảng cáo độ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; giá trị 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ới phần phụ thuộc được 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ẽ 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ào nhiều |
additional_linker_inputs
|
Danh sách nhãn; giá trị mặc định là user_link_flags .
|
dynamic_deps
|
Danh sách nhãn; giá trị 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 |
experimental_disable_topo_sort_do_not_use_remove_before_7_0
|
Boolean; giá trị mặc định là |
exports_filter
|
Danh sách các chuỗi; giá trị 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ụ thuộc vào các mục tiêu đó,
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; giá trị mặc định là |
shared_lib_name
|
String; giá trị mặc định là |
static_deps
|
Danh sách các chuỗi; giá trị mặc định là |
user_link_flags
|
Danh sách các chuỗi; giá trị mặc định là
|
win_def_file
|
Nhãn; giá trị 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 mã này để xuất các biểu tượng trong khi liên kết thư viện chia sẻ. |
cc_static_library
Xem nguồn quy tắccc_static_library(name, deps, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)Tạo một thư viện tĩnh từ danh sách các mục tiêu và các phần phụ thuộc bắc cầu của các mục tiêu đó.
Thư viện tĩnh thu được chứa các tệp đối tượng của các 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 các phần phụ thuộc này, được ưu tiên là
Đối tượng PIC
.
Nhóm đầu ra
linkdeps
Tệp văn bản chứa nhãn của các 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 tệp đối tượng nào vào thư viện tĩnh, nhưng có
bạn cần 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ể cần phải có các thư viện này tại thời điểm liên kết.
linkopts
Tệp văn bản chứa linkopts
do người dùng cung cấp của tất cả bắc cầu
phần phụ thuộc của mục tiêu được liệt kê trong deps
.
Biểu tượng trùng lặp
Theo mặc định, quy tắc cc_static_library
kiểm tra xem kết quả tĩnh
không chứa bất kỳ ký hiệu trùng lặp nào. Nếu có, thì bản dựng sẽ gặp lỗi
danh sách 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 theo từng mục tiêu hoặc gói hàng bằng cách cài đặt
features = ["-symbol_check"]
hoặc trên toàn cầu 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ợ
symbol_check
có trên tất cả các nền tảng. Chuỗi công cụ tuỳ chỉnh có thể hỗ trợ thêm cho
theo một trong hai cách:
- Triển khai hành động
ACTION_NAMES.validate_static_library
và bật tệp đó bằng tính năngsymbol_check
. Công cụ được thiết lập trong thao tác là được gọi bằng hai đối số, thư viện tĩnh để kiểm tra các ký hiệu trùng lặp và đường dẫn của một tệp phải được tạo nếu bước kiểm tra thành công. - Tính năng
symbol_check
thêm cờ trình lưu trữ khiến không thực hiện được hành động tạo thư viện tĩnh đối với các ký hiệu trùng lặp.
Đố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; giá trị mặc định là Các phần phụ thuộc không cung cấp tệp đối tượng nào sẽ không được đưa vào tệp tĩnh
thư viện nhưng nhãn của chúng đượ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, 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, một phép 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 có thể nêu rõ lý do cần kiểm thử
linkstatic
; điều này có lẽ 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): Một bản sao phiên bản của tệp nhị phân.strip -g
được chạy trên tệp nhị phân để xoá gỡ lỗi . Các tùy chọn dải bổ sung có thể được cung cấp 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 tính năng Fission: một bản 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: an tệp trống.
Hãy xem các đối số cc_binary(), ngoại trừ
theo mặc định đối số stamp
được đặt thành 0 để kiểm thử và
cc_test
có thêm
thuộc tính chung cho mọi 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; giá trị mặc định là Các lựa chọn này có thể là |
srcs
|
Danh sách nhãn; giá trị 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 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 cách sử dụng trình biên dịch C/C++. Tệp Tất cả Các 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; giá trị mặc định là data
tại Các thuộc tính điển hình được xác định bởi
hầu hết các quy tắc xây dựng.
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; giá trị mặc định là Ví dụ: Bạn có thể cung cấp các tệp Windows .res đã biên dịch ở đây để nhúng trong mục tiêu nhị phân. |
copts
|
Danh sách các chuỗi; giá trị 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 này
|
defines
|
Danh sách các chuỗi; giá trị mặc định là -D và thêm vào dòng lệnh biên dịch vào mục tiêu này,
cũng như mọi quy tắc phụ thuộc vào quy tắc đó. 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 giá trị định nghĩa vào
local_defines .
|
dynamic_deps
|
Danh sách nhãn; giá trị 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
|
String; giá trị mặc định là |
includes
|
Danh sách các chuỗi; giá trị mặc định là -isystem path_to_package/include_entry .
Bạn chỉ nên sử dụng trình điều khiển này cho các thư viện của bên thứ ba
không tuân theo kiểu viết của Google trong câu lệnh #include.
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 nó. (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
"-Tôi" gắn cờ vào COPTS.
Các đường dẫn |
link_extra_lib
|
Nhãn; giá trị 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; giá trị mặc định là LINKOPTS trước
liên kết mục tiêu nhị phân.
Mỗi phần tử của danh sách này mà 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 đang tắt.
Sự hiện diện của cờ này có nghĩa là hoạt động liên kết sẽ diễn ra với cờ
Nếu bạn 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 ở dạng 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 thử nghiệm, 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 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 các chuỗi; giá trị 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 được phép cho các thành viên phụ thuộc.
|
malloc
|
Nhãn; giá trị 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; giá trị 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 cờ bảo vệ
|
nocopts
|
String; giá trị mặc định là COPTS nào có trước đó khớp với biểu thức chính quy này
(bao gồm 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 nhãn "Tạo" thay thế biến.
|
reexport_deps
|
Danh sách nhãn; giá trị 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; giá trị 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 mã này để xuất các biểu tượng trong khi liên kết thư viện chia sẻ. |
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
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 là thường gặp nhất là các nhóm tệp sao chép tất cả các tệp được yêu cầu. -
Tạo dòng lệnh chính xác cho các thao tác C++. Việc này được thực hiện bằng
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
để sử dụng 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 hoạt động tạo và định cấu hình chuỗi công cụ
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 hành động có liên quan đến rules_cc (ngoại trừ các hành động đang sử dụng các tập hợp chính xác hơn cấu phần phần mềm từ các thuộc tính bên dưới). Bazel giả địnhall_files là tập mẹ
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ả hai đều phải được biên dịch
và tệp đường liên kết, nên sẽ cần all_files ).
Đây là nội dung trong |
ar_files
|
Nhãn; giá trị mặc định là |
as_files
|
Nhãn; giá trị 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; giá trị mặc định là |
coverage_files
|
Nhãn; giá trị 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; giá trị mặc định là Giá trị này sẽ được dùng khi thuộc tính "static_link_cpp_runtimes" đã bật và chúng tôi đang liên kết một cách linh động. |
exec_transition_for_inputs
|
Boolean; giá trị mặc định là |
libc_top
|
Nhãn; giá trị 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; giá trị 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 các chuỗi; giá trị mặc định là |
static_runtime_lib
|
Nhãn; giá trị mặc định là Giá trị này sẽ được dùng khi thuộc tính "static_link_cpp_runtimes" đã bật và chúng tôi đang liên kết 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
|
String; 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 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 .afdo Nhãn cũng có thể trỏ đến quy tắc fdo_ menu_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; giá trị 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 phần mở rộng sau: .profraw cho hồ sơ LLVM chưa được lập chỉ mục, .profdata cho LLVM được lập chỉ mục hồ sơ, .zip chứa hồ sơ profraw LLVM, .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; giá trị 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ơ dự kiến sẽ có hoặc đuôi .profdata (đối với memprof được lập chỉ mục/ký hiệu profile) hoặc đuôi .zip cho tệp zip chứa 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 .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 .txt. |