Quy tắc
- cc_binary
- cc_import
- cc_library
- cc_proto_library
- cc_shared_library
- fdo_Tìm nạp trước
- fdo_profile
- propeller_optimize
- cc_test
- chuỗi công cụ cc
- cc_toolchain_suite
cc_nhị phân
Xem nguồn quy tắccc_binary(name, deps, srcs, data, additional_linker_inputs, args, compatible_with, copts, defines, deprecation, distribs, env, exec_compatible_with, exec_properties, features, includes, licenses, linkopts, linkshared, linkstatic, local_defines, malloc, nocopts, output_licenses, restricted_to, stamp, tags, target_compatible_with, testonly, toolchains, visibility, win_def_file)
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 bị loại bỏ của tệp nhị phân.strip -g
được chạy trên hệ nhị phân để xoá các biểu tượng gỡ lỗi. Bạn có thể cung cấp các tuỳ chọn dải khác bổ sung trên dòng lệnh bằng--stripopt=-foo
. Kết quả này chỉ được xây dựng nếu có yêu cầu rõ ràng.name.dwp
(chỉ được xây dựng 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. Khác: một tệp trống.
Đối số
Thuộc tính | |
---|---|
name |
Tên duy nhất cho mục tiêu này. |
deps
|
Đây có thể là mục tiêu |
srcs
|
Tất cả các tệp Tệp Tất cả các tệp Nếu tên của một quy tắc nằm trong
Các loại tệp
...và bất kỳ quy tắc nào tạo ra các tệp đó. Các tiện ích khác nhau biểu thị các ngôn ngữ lập trình khác nhau theo quy ước gcc. |
additional_linker_inputs
|
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
|
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 feature
|
defines
|
-D và được thêm vào dòng lệnh biên dịch với mục tiêu này cũng như mọi quy tắc phụ thuộc vào đó. Hãy thật cẩn thận vì điều này có thể gây ảnh hưởng sâu rộng. Nếu không chắc chắn, hãy thêm giá trị xác định vào local_defines .
|
includes
|
Tuỳ thuộc vào sự thay thế "Biến".
Mỗi chuỗi được thêm vào đầu Bạn phải thêm tiêu đề vào src hoặc hdr, nếu không thì tiêu đề sẽ không có sẵn cho các quy tắc phụ thuộc khi biên dịch được đặt trong hộp cát (mặc định). |
linkopts
|
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
|
linkshared=True trong quy tắc của bạn. Theo mặc định, tuỳ chọn này được 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
|
cc_binary và cc_test : liên kết tệp nhị phân ở chế độ tĩnh. Đối với cc_library.linkstatic : xem bên dưới.
Tùy chọn này được bật theo mặc định cho
Nếu được bật và ở dạng tệp nhị phân hoặc kiểm thử, tuỳ chọn này sẽ yêu cầu công cụ xây dựng liên kết trong Thực sự có ba cách khác nhau để liên kết một tệp thực thi:
Thuộc tính
Nếu là |
local_defines
|
-D và được thêm vào dòng lệnh biên dịch cho mục tiêu này, chứ không phải vào các phần phụ thuộc.
|
malloc
|
Theo mặc định, các tệp nhị phân C++ được liên kết với |
nocopts
|
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 để phục vụ mục đích biên dịch quy tắc này.
Thuộc tính này ít khi cần thiết.
|
stamp
|
Các tệp nhị phân có nhãn đóng góp không được tạo lại trừ phi các phần phụ thuộc thay đổi. |
win_def_file
|
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 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, distribs, features, interface_library, licenses, restricted_to, shared_library, static_library, system_provided, tags, target_compatible_with, testonly, visibility)
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 thông thường:
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 dùng chung (Unix)
cc_import( name = "mylib", hdrs = ["mylib.h"], shared_library = "libmylib.so", )3. Liên kết thư viện dùng chung với thư viện giao diệ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 dùng chung với
system_provided=True
(Windows)
cc_import( name = "mylib", hdrs = ["mylib.h"], # mylib.lib is an import library for mylib.dll which will be passed to linker interface_library = "mylib.lib", # mylib.dll is provided by system environment, for example it can be found in PATH. # This indicates that Bazel is not responsible for making mylib.dll available. system_provided = 1, )5. 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", ) # first will link to libmylib.a cc_binary( name = "first", srcs = ["first.cc"], deps = [":mylib"], linkstatic = 1, # default value ) # second will link to libmylib.so cc_binary( name = "second", srcs = ["second.cc"], deps = [":mylib"], linkstatic = 0, )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", ) # first will link to libmylib.lib cc_binary( name = "first", srcs = ["first.cc"], deps = [":mylib"], linkstatic = 1, # default value ) # second will link to mylib.dll through mylib.lib cc_binary( name = "second", srcs = ["second.cc"], deps = [":mylib"], linkstatic = 0, )
cc_import
hỗ trợ một thuộc tính "include" (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 duy nhất cho mục tiêu này. |
deps
|
deps tại các thuộc tính tiêu biểu được xác định theo hầu hết các quy tắc tạo bản dựng.
|
hdrs
|
|
alwayslink
|
Nếu tùy chọn Alwayslink không hoạt động với VS 2017 trên Windows, do vấn đề đã biết, vui lòng nâng cấp VS 2017 lên phiên bản mới nhất. |
interface_library
|
Các loại tệp được phép: |
shared_library
|
Các loại tệp được phép: |
static_library
|
Các loại tệp được phép: |
system_provided
|
interface_library và để trống shared_library .
|
cc_library
Xem nguồn quy tắccc_library(name, deps, srcs, data, hdrs, alwayslink, compatible_with, copts, defines, deprecation, distribs, exec_compatible_with, exec_properties, features, implementation_deps, include_prefix, includes, licenses, linkopts, linkstamp, linkstatic, local_defines, nocopts, restricted_to, strip_include_prefix, tags, target_compatible_with, testonly, textual_hdrs, toolchains, visibility, win_def_file)
Kiểm tra bao gồm tiêu đề
Tất cả tệp tiêu đề dùng trong bản dựng đều phải khai báo trong quy tắc hdrs
hoặc srcs
của cc_*
. Lệnh 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 từ cả 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 cc_*
quy tắc liệt kê thư viện trong deps
.
Bạn chỉ được đưa trực tiếp tiêu đề vào srcs
từ 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 muốn người dùng của thư viện này có thể trực tiếp đưa tiêu đề đó vào hay không. Đây là quyết định gần giống với mức hiển thị từ public
đến 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, do đó, chúng cũng không có thuộc tính hdrs
. Bạn phải liệt kê tất cả tiêu đề thuộc về tệp nhị phân hoặc
chương trình kiểm thử trong srcs
.
Để minh họa các quy tắc này, hãy xem ví dụ sau đây.
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"], )
Bao gồm trực tiếp được phé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 bao gồm baz.h
.
Bao gồm tệp | Bao gồm được phép |
---|---|
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 bao gồm chỉ áp dụng cho các trường hợp bao gồm trực tiếp. Trong ví dụ trên, foo.cc
được phép bao gồm bar.h
, trong đó có thể bao gồm baz.h
và sau đó được phép bao gồm baz-impl.h
. Về mặt kỹ thuật, việc biên dịch tệp .cc
có thể bao gồm bắc cầu bất kỳ tệp tiêu đề nào trong hdrs
hoặc srcs
trong bất kỳ cc_library
nào trong trạng thái đó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"
. Để làm được điều này, bạn phải thêm baz
vào deps
của foo
.
Bazel phụ thuộc vào việc 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 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 qua clang trên Unix và macOS.
Đối số
Thuộc tính | |
---|---|
name |
Tên duy nhất cho mục tiêu này. |
deps
|
Đây có thể là mục tiêu |
srcs
|
Tất cả các tệp Tệp Tất cả các tệp Nếu tên của một quy tắc nằm trong
Các loại tệp
...và bất kỳ quy tắc nào tạo ra các tệp đó. Các tiện ích khác nhau biểu thị các ngôn ngữ lập trình khác nhau theo quy ước gcc. |
hdrs
|
Đây là vị trí được ưu tiên nhiều để khai báo các tệp tiêu đề mô tả giao diện của thư viện. Các tiêu đề này sẽ được cung cấp để bao gồm các nguồn trong quy tắc này hoặc trong các quy tắc phụ thuộc.
Thay vào đó, các tiêu đề mà bạn không muốn đưa vào ứng dụng khách của thư viện này phải được liệt kê trong thuộc tính |
alwayslink
|
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 đến.
Điều này rất hữu ích nếu mã của bạn không được mã gọi rõ ràng trong tệp nhị phân, ví dụ: nếu mã của bạn đăng ký nhận một lệnh gọi lại do một số dịch vụ cung cấp.
Nếu tùy chọn Alwayslink không hoạt động với VS 2017 trên Windows, 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
|
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 feature
|
defines
|
-D và được thêm vào dòng lệnh biên dịch với mục tiêu này cũng như mọi quy tắc phụ thuộc vào đó. Hãy thật cẩn thận vì điều này có thể gây ảnh hưởng sâu rộng. Nếu không chắc chắn, hãy thêm giá trị xác định vào local_defines .
|
implementation_deps
|
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 phần phụ thuộc 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 đó. 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_libraries và được bảo vệ bằng cờ |
include_prefix
|
Khi bạn thiết lập, các tiêu đề trong thuộc tính Tiền tố trong thuộc tính |
includes
|
Tuỳ thuộc vào sự thay thế "Biến".
Mỗi chuỗi được thêm vào đầu Bạn phải thêm tiêu đề vào src hoặc hdr, nếu không thì tiêu đề sẽ không có sẵn cho các quy tắc phụ thuộc khi biên dịch được đặt trong hộp cát (mặc định). |
linkopts
|
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 |
linkstamp
|
base .
|
linkstatic
|
cc_binary và cc_test : liên kết tệp nhị phân ở chế độ tĩnh. Đối với cc_library.linkstatic : xem bên dưới.
Tùy chọn này được bật theo mặc định cho
Nếu được bật và ở dạng tệp nhị phân hoặc kiểm thử, tuỳ chọn này sẽ yêu cầu công cụ xây dựng liên kết trong Thực sự có ba cách khác nhau để liên kết một tệp thực thi:
Thuộc tính
Nếu là |
local_defines
|
-D và được thêm vào dòng lệnh biên dịch cho mục tiêu này, chứ không phải vào các phần phụ thuộc.
|
nocopts
|
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 để phục vụ mục đích biên dịch quy tắc này.
Thuộc tính này ít khi cần thiết.
|
strip_include_prefix
|
Khi bạn đặt, các tiêu đề trong thuộc tính Nếu đó là đường dẫn tương đối, đường dẫn này được coi là đường dẫn tương đối gói. Nếu đó là một đường dẫn tuyệt đối, thì đây sẽ được hiểu là đường dẫn tương đối đến kho lưu trữ. Tiền tố trong thuộc tính |
textual_hdrs
|
Đây là vị trí để khai báo các tệp tiêu đề không thể tự biên dịch; nghĩa là chúng 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
|
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 một thư viện dùng chung. |
cc_protolibrary
Xem nguồn quy tắccc_proto_library(name, deps, data, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, licenses, restricted_to, tags, target_compatible_with, testonly, visibility)
cc_proto_library
tạo mã C++ từ .proto
tệp.
deps
phải trỏ đến proto_library
quy tắc.
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 duy nhất cho mục tiêu này. |
deps
|
proto_library để tạo mã C++.
|
cc_shared_library
Xem nguồn quy tắccc_shared_library(name, deps, additional_linker_inputs, dynamic_deps, exports_filter, shared_lib_name, tags, user_link_flags, win_def_file)
Thao tác này sẽ 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
, phần sau là phần phụ thuộc bắc cầu. Hàm này không liên kết bar
vì đã được dynamic_dep
bar_shared
cung cấp động.
foo_shared
sử dụng tập lệnh trình liên kết *.lds để kiểm soát
những biểu tượng nào được xuất. Logic quy tắc cc_shared_library
không kiểm soát biểu tượng nào được xuất, nó chỉ sử dụng nội dung giả định sẽ đượ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 đó, Bazel giả định trong quá trình phân tích rằng foo
đang được foo_shared
xuất. baz
không được giả định
xuất ra bởi foo_shared
. Mọi mục tiêu khớp với exports_filter
cũng được giả định là sẽ xuất.
Mỗi cc_library
trong ví dụ phải xuất hiện tối đa trong một
cc_shared_library
. Nếu cũng muốn liên kết baz
vào bar_shared
, chúng ta sẽ phải 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 bar.so
chứ không phải tên libbar.so
như tên 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 với hai phần phụ thuộc cc_shared_library
khác nhau xuất ra cùng một mục tiêu. Để khắc phục vấn đề này, bạn cần dừng xuất các 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 có 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.
Bạn có thể khắc phục vấn đề này bằng cách 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 thư viện
cần phải xuất thư viện để thư viện không liên kết sẽ vẫn hiển thị các
biểu tượng. Một cách khác là kéo 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 rất hiếm và bạn phải đảm bảo 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à bạn 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 đ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 vấn đề này là xuất dự án từ phần phụ thuộc cc_shared_library
hoặc lấy cc_shared_library
thứ ba để xuất.
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 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ẽ gặp lỗi này nếu trong quy tắc hiện tại mà bạn đang xác nhận xuất một mục tiêu mà một trong các phần phụ thuộc động của bạn đang xuất.
Để khắc phục điều này, hãy xoá mục tiêu khỏi deps
và chỉ dựa vào 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 duy nhất cho mục tiêu này. |
deps
|
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 thư viện chia sẻ này, miễn là chúng chưa được
Trong quá trình phân tích, quy trình triển khai quy tắc sẽ xem 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
|
user_link_flags .
|
dynamic_deps
|
cc_shared_library khác mà mục tiêu hiện tại phụ thuộc vào.
Quá trình triển khai |
exports_filter
|
Bất kỳ mục tiêu
Xin 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 đó, thay vào đó, cạnh phần phụ thuộc sẽ do Được phép sử dụng cú pháp sau:
|
shared_lib_name
|
|
user_link_flags
|
cc_shared_library( name = "foo_shared", additional_linker_inputs = select({ "//src/conditions:linux": [ ":foo.lds", ":additional_script.txt", ], "//conditions:default": []}), user_link_flags = select({ "//src/conditions:linux": [ "-Wl,-rpath,kittens", "-Wl,--version-script=$(location :foo.lds)", "-Wl,--script=$(location :additional_script.txt)", ], "//conditions:default": []}), ... ) |
win_def_file
|
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 một thư viện dùng chung. |
fdo_fetch_hint
Xem nguồn quy tắcfdo_prefetch_hints(name, compatible_with, deprecation, distribs, features, licenses, profile, restricted_to, tags, target_compatible_with, testonly, 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 hoặc tại một đường dẫn tuyệt đối được chỉ định. Ví dụ:
fdo_prefetch_hints( name = "hints", profile = "//path/to/hints:profile.afdo", ) fdo_profile( name = "hints_abs", absolute_path_profile = "/absolute/path/profile.afdo", )
Đối số
Thuộc tính | |
---|---|
name |
Tên duy nhất cho mục tiêu này. |
profile
|
|
tiểu sử fdo
Xem nguồn quy tắcfdo_profile(name, absolute_path_profile, compatible_with, deprecation, distribs, features, licenses, profile, proto_profile, restricted_to, tags, target_compatible_with, testonly, visibility)
Đại diện cho một cấu hình FDO trong không gian làm việc hoặc tại một đường dẫn tuyệt đối được chỉ định. Ví dụ:
fdo_profile( name = "fdo", profile = "//path/to/fdo:profile.zip", ) fdo_profile( name = "fdo_abs", absolute_path_profile = "/absolute/path/profile.zip", )
Đối số
Thuộc tính | |
---|---|
name |
Tên duy nhất cho mục tiêu này. |
absolute_path_profile
|
|
profile
|
|
proto_profile
|
|
propeller_optimize
Xem nguồn quy tắcpropeller_optimize(name, compatible_with, deprecation, distribs, features, ld_profile, licenses, restricted_to, tags, target_compatible_with, testonly, visibility)
Đại diện cho một hồ sơ tối ưu hoá cánh quạt 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" ) propeller_optimize( name = "layout_absolute", absolute_cc_profile = "/absolute/cc_profile.txt", absolute_ld_profile = "/absolute/ld_profile.txt" )
Đối số
Thuộc tính | |
---|---|
name |
Tên duy nhất cho mục tiêu này. |
ld_profile
|
|
cc_test
Xem nguồn quy tắccc_test(name, deps, srcs, data, additional_linker_inputs, args, compatible_with, copts, defines, deprecation, distribs, env, env_inherit, exec_compatible_with, exec_properties, features, flaky, includes, licenses, linkopts, linkstatic, local, local_defines, malloc, nocopts, restricted_to, shard_count, size, stamp, tags, target_compatible_with, testonly, timeout, toolchains, visibility, win_def_file)
Đối số
Thuộc tính | |
---|---|
name |
Tên duy nhất cho mục tiêu này. |
deps
|
Đây có thể là mục tiêu |
srcs
|
Tất cả các tệp Tệp Tất cả các tệp Nếu tên của một quy tắc nằm trong
Các loại tệp
...và bất kỳ quy tắc nào tạo ra các tệp đó. Các tiện ích khác nhau biểu thị các ngôn ngữ lập trình khác nhau theo quy ước gcc. |
additional_linker_inputs
|
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
|
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 feature
|
defines
|
-D và được thêm vào dòng lệnh biên dịch với mục tiêu này cũng như mọi quy tắc phụ thuộc vào đó. Hãy thật cẩn thận vì điều này có thể gây ảnh hưởng sâu rộng. Nếu không chắc chắn, hãy thêm giá trị xác định vào local_defines .
|
includes
|
Tuỳ thuộc vào sự thay thế "Biến".
Mỗi chuỗi được thêm vào đầu Bạn phải thêm tiêu đề vào src hoặc hdr, nếu không thì tiêu đề sẽ không có sẵn cho các quy tắc phụ thuộc khi biên dịch được đặt trong hộp cát (mặc định). |
linkopts
|
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 |
linkstatic
|
cc_binary và cc_test : liên kết tệp nhị phân ở chế độ tĩnh. Đối với cc_library.linkstatic : xem bên dưới.
Tùy chọn này được bật theo mặc định cho
Nếu được bật và ở dạng tệp nhị phân hoặc kiểm thử, tuỳ chọn này sẽ yêu cầu công cụ xây dựng liên kết trong Thực sự có ba cách khác nhau để liên kết một tệp thực thi:
Thuộc tính
Nếu là |
local_defines
|
-D và được thêm vào dòng lệnh biên dịch cho mục tiêu này, chứ không phải vào các phần phụ thuộc.
|
malloc
|
Theo mặc định, các tệp nhị phân C++ được liên kết với |
nocopts
|
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 để phục vụ mục đích biên dịch quy tắc này.
Thuộc tính này ít khi cần thiết.
|
stamp
|
Các tệp nhị phân có nhãn đóng góp không được tạo lại trừ phi các phần phụ thuộc thay đổi. |
win_def_file
|
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 một thư viện dùng chung. |
chuỗi công cụ cc
Xem nguồn quy tắccc_toolchain(name, all_files, ar_files, as_files, compatible_with, compiler, compiler_files, compiler_files_without_includes, coverage_files, cpu, deprecation, distribs, dwp_files, dynamic_runtime_lib, exec_transition_for_inputs, features, libc_top, licenses, linker_files, module_map, objcopy_files, restricted_to, static_runtime_lib, strip_files, supports_header_parsing, supports_param_files, tags, target_compatible_with, testonly, toolchain_config, toolchain_identifier, visibility)
Đạ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 hành động C++. Bạn có thể thực hiện việc này 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 là các nhóm tệp phổ biến nhất khi phát hiện 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++.
Ngoài ra, hãy xem
trang này
để biết tài liệu về chuỗi công cụ C++ phức tạp và tài liệu lựa chọn chuỗi công cụ.
Sử dụng tags = ["manual"]
để ngăn việc xây dựng và định cấu hình chuỗi công cụ
khi không gọi bazel build //...
Đối số
Thuộc tính | |
---|---|
name |
Tên duy nhất cho mục tiêu này. |
all_files
|
all_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 tem liên kết cần cả tệp biên dịch và liên kết, vì vậy phải có all_files ).
Đây là nội dung mà |
ar_files
|
Tập hợp tất cả cấu phần phần mềm cc_toolchain cần thiết cho các hành động lưu trữ. |
as_files
|
Tập hợp tất cả cấu phần phần mềm cc_toolchain cần thiết cho các hành động lắp ráp. |
compiler
|
toolchain_identifier . Đó sẽ là dấu hiệu sau
CROSSTOOL chuyển sang Starlark
và sẽ bị
#7075 xóa.
Khi được thiết lập, giá trị này sẽ được dùng để thực hiện lựa chọn crosstool_config.toolchain. Phương thức này sẽ được ưu tiên hơn tùy chọn --cpu Bazel. |
compiler_files
|
|
compiler_files_without_includes
|
|
coverage_files
|
|
cpu
|
Khi được thiết lập, giá trị này sẽ được dùng để thực hiện lựa chọn crosstool_config.toolchain. Phương thức này sẽ được ưu tiên hơn tùy chọn --cpu Bazel. |
dwp_files
|
|
dynamic_runtime_lib
|
Giá trị này sẽ được sử dụng khi bạn bật tính năng 'static_link_cpp_runtimes' và chúng tôi đang tự động liên kết các phần phụ thuộc. |
exec_transition_for_inputs
|
|
libc_top
|
|
linker_files
|
|
module_map
|
|
objcopy_files
|
|
static_runtime_lib
|
Giá trị này sẽ được dùng khi bật tính năng 'static_link_cpp_runtimes' và chúng tôi đang liên kết tĩnh các phần phụ thuộc. |
strip_files
|
|
supports_header_parsing
|
|
supports_param_files
|
|
toolchain_config
|
cc_toolchain_config_info .
|
toolchain_identifier
|
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)
Đại diện cho tập hợp các chuỗi công cụ C++.
Quy tắc này chịu trách nhiệm về:
- Thu thập tất cả chuỗi công cụ C++ có liên quan.
-
Chọn một chuỗi công cụ tuỳ thuộc vào tuỳ chọn
--cpu
và--compiler
được chuyển đến Bazel.
Ngoài ra, hãy xem trang này để biết tài liệu về chuỗi công cụ C++ phức tạp và tài liệu lựa chọn chuỗi công cụ.
Đối số
Thuộc tính | |
---|---|
name |
Tên duy nhất cho mục tiêu này. |
toolchains
|
cc_toolchain . "<cpu>" sẽ được sử dụng khi chỉ --cpu được truyền vào Bazel và "<cpu>|<compiler>" sẽ được sử dụng khi cả --cpu và --compiler được truyền đến Bazel. Ví dụ:
cc_toolchain_suite( name = "toolchain", toolchains = { "piii|gcc": ":my_cc_toolchain_for_piii_using_gcc", "piii": ":my_cc_toolchain_for_piii_using_default_compiler", }, ) |