Quy tắc
- cc_binary
- cc_import
- cc_library
- cc_proto_library
- cc_shared_library
- cc_static_library
- fdo_prefetch_hints
- fdo_profile
- memprof_profile
- propeller_optimize
- cc_test
- cc_toolchain
- cc_toolchain_suite
cc_binary
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, link_extra_lib, 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): Phiên bản nhị phân đã bị loại bỏ.strip -g
được chạy trên tệp nhị phân để xoá các biểu tượng gỡ lỗi. Bạn có thể cung cấp các tuỳ chọn khác cho tính năng loại bỏ trên dòng lệnh bằng cách sử dụng--stripopt=-foo
. Đầu ra này chỉ được tạo nếu được yêu cầu rõ ràng.name.dwp
(chỉ được tạo nếu được yêu cầu rõ ràng): Nếu bạn bật Fission: tệp gói thông tin gỡ lỗi phù hợp để gỡ lỗi các tệp nhị phân được triển khai từ xa. Nếu không: một tệp trống.
Đối số
Thuộc tính | |
---|---|
name |
Tên; bắt buộc Tên 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 Tệp Tất cả tệp Nếu tên của một quy tắc nằm trong
Các loại tệp
...và mọi quy tắc 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
|
Danh sách nhãn; mặc định là Ví dụ: bạn có thể cung cấp các tệp .res Windows đã biên dịch tại đây để nhúng vào mục tiêu tệp 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ự đã cho 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 đến mục tiêu này, cũng như mọi quy tắc phụ thuộc vào mục tiêu này. Hãy cẩn thận vì việc này có thể ảnh hưởng sâu rộng. Khi không chắc chắn, hãy thêm các giá trị xác định vào local_defines .
|
includes
|
Danh sách chuỗi; mặc định là
Chịu sự thay thế của "Tạo biến".
Mỗi chuỗi được thêm vào Bạn phải thêm tiêu đề vào srcs hoặc hdrs, nếu không, các tiêu đề này sẽ không có sẵn cho các quy tắc phụ thuộc khi quá trình biên dịch được đưa vào hộp cát (mặc định). |
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 tệp nhị phân.
Mỗi phần tử của danh sách này không bắt đầu bằng |
linkshared
|
Boolean; không thể định cấu hình; mặc định là linkshared=True vào quy tắc của bạn. Theo mặc định, tuỳ chọn này sẽ tắt.
Việc có cờ này có nghĩa là việc liên kết xảy ra với cờ
Nếu chỉ định cả |
linkstatic
|
Boolean; 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.linkstatic : hãy 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ụ xây dựng liên kết trong Thực sự có ba cách để liên kết một tệp thực thi:
Thuộc tính
Nếu là |
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 các phần phụ thuộc của mục tiêu.
|
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 |
nocopts
|
Chuỗi; 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 cho mục đích biên dịch quy tắc này.
Bạn hiếm khi cần đến thuộc tính này.
|
stamp
|
Số nguyên; mặc định là
Tệp nhị phân được đóng dấu không được tạo lại trừ khi các phần phụ thuộc của tệp đó 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 hàm 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, 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 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, )
cc_import( name = "mylib", hdrs = ["mylib.h"], shared_library = "libmylib.so", )
cc_import( name = "mylib", hdrs = ["mylib.h"], # mylib.lib is an import library for mylib.dll which will be passed to linker interface_library = "mylib.lib", # mylib.dll will be available for runtime shared_library = "mylib.dll", )
system_provided=True
(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, )
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, )
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ợ 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 thông thường do
hầu hết các quy tắc bản dựng xác định.
|
hdrs
|
Danh sách nhãn; mặc định là |
alwayslink
|
Boolean; mặc định là Nếu alwayslink không hoạt động với VS 2017 trên Windows, thì đó là do một vấn đề đã biết. Vui lòng nâng cấp VS 2017 lên phiên bản mới nhất. |
interface_library
|
Nhãn; mặc định là Các loại tệp được phép:
|
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; 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, 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 việc đưa tiêu đề vào
Tất cả tệp tiêu đề được dùng trong bản dựng phải được khai báo trong hdrs
hoặc srcs
của các quy tắc cc_*
. Quy tắc này được thực thi.
Đối với các quy tắc cc_library
, tiêu đề trong hdrs
bao gồm giao diện công khai của thư viện và có thể được đưa trực tiếp vào cả 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
.
Bạn chỉ được đưa tiêu đề trong srcs
trực tiếp 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 tự hỏi liệu bạn có muốn người dùng thư viện này có thể trực tiếp đưa tiêu đề vào hay không. Quyết định này gần giống với quyết định giữa chế độ hiển thị public
và private
trong ngôn ngữ lập trình.
Quy tắc cc_binary
và cc_test
không có giao diện được xuất, do đó, các quy tắc này 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 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"], )
Các 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 vào foo.h
và bar.h
, nhưng không được đưa vào baz.h
.
Bao gồm tệp | Nội dung được phép đưa vào |
---|---|
foo.h | bar.h |
foo.cc | foo.h bar.h |
bar.h | bar-impl.h baz.h |
bar-impl.h | bar.h baz.h |
bar.cc | bar.h bar-impl.h baz.h |
baz.h | baz-impl.h |
baz-impl.h | baz.h |
baz.cc | baz.h baz-impl.h |
Quy tắc kiểm tra việc đưa vào chỉ áp dụng cho các trường hợp đưa vào trực tiếp. Trong ví dụ trên, foo.cc
được phép chứa bar.h
, có thể chứa baz.h
, và baz.h
lại được phép chứa baz-impl.h
. Về mặt kỹ thuật, quá trình biên dịch tệp .cc
có thể bao gồm bất kỳ tệp tiêu đề nào trong hdrs
hoặc srcs
trong bất kỳ cc_library
nào trong phạm vi đó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, 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.
Chuỗi công cụ phải hỗ trợ tính năng layering_check
và yêu cầu một cách rõ ràng, chẳng hạn như thông qua cờ dòng lệnh --features=layering_check
hoặc tham số features
của hàm package
. Chuỗi công cụ do Bazel cung cấp chỉ hỗ trợ tính năng này với clang trên Unix và macOS.
Đố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 Tệp Tất cả tệp Nếu tên của một quy tắc nằm trong
Các loại tệp
...và mọi quy tắc 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
|
Danh sách nhãn; mặc định là Đây là vị trí ưu tiên để khai báo các tệp tiêu đề mô tả giao diện cho thư viện. Các tiêu đề này sẽ được cung cấp để các nguồn đưa vào trong quy tắc này hoặc trong các quy tắc phụ thuộc.
Các tiêu đề không phải là tiêu đề mà ứng dụng của thư viện này đưa vào phải được liệt kê trong thuộc tính |
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 .res Windows đã biên dịch tại đây để nhúng vào mục tiêu tệp nhị phân. |
alwayslink
|
Boolean; 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 hữu ích nếu mã của bạn không được mã trong tệp nhị phân gọi một cách rõ ràng, ví dụ: nếu mã của bạn đăng ký nhận một số lệnh gọi lại do một số dịch vụ cung cấp.
Nếu alwayslink không hoạt động với VS 2017 trên Windows, thì đó là do một vấn đề đã biết. Vui lòng nâng cấp VS 2017 lên phiên bản mới nhất. |
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ự đã cho 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 đến mục tiêu này, cũng như mọi quy tắc phụ thuộc vào mục tiêu này. Hãy cẩn thận vì việc này có thể ảnh hưởng sâu rộng. Khi không chắc chắn, hãy thêm các giá trị xác định vào local_defines .
|
implementation_deps
|
Danh sách nhãn; mặc định là deps , tiêu đề và đường dẫn bao gồm của các thư viện này (và tất 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 này. Các thư viện được chỉ định bằng implementation_deps vẫn được liên kết trong các mục tiêu nhị phân phụ thuộc vào thư viện này.
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
|
Chuỗi; mặc định là Khi được đặt, bạn có thể truy cập vào các tiêu đề trong thuộc tính Tiền tố trong thuộc tính |
includes
|
Danh sách chuỗi; mặc định là
Chịu sự thay thế của "Tạo biến".
Mỗi chuỗi được thêm vào Bạn phải thêm tiêu đề vào srcs hoặc hdrs, nếu không, các tiêu đề này sẽ không có sẵn cho các quy tắc phụ thuộc khi quá trình biên dịch được đưa vào hộp cát (mặc định). |
linkopts
|
Danh sách chuỗi; mặc định là LINKOPTS trước khi liên kết mục tiêu tệp nhị phân.
Mỗi phần tử của danh sách này không bắt đầu bằng |
linkstamp
|
Nhãn; mặc định là base .
|
linkstatic
|
Boolean; 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.linkstatic : hãy 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ụ xây dựng liên kết trong Thực sự có ba cách để liên kết một tệp thực thi:
Thuộc tính
Nếu là |
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 các phần phụ thuộc của mục tiêu.
|
nocopts
|
Chuỗi; 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 cho mục đích biên dịch quy tắc này.
Bạn hiếm khi cần đến thuộc tính này.
|
strip_include_prefix
|
Chuỗi; mặc định là Khi được đặt, bạn có thể truy cập vào các tiêu đề trong thuộc tính Nếu đó là đường dẫn tương đối, thì đường dẫn đó sẽ được coi là đường dẫn tương đối với gói. Nếu là đường dẫn tuyệt đối, thì đường dẫn này đượ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
|
Danh sách nhãn; mặc định là Đây là vị trí khai báo các tệp tiêu đề không thể tự biên dịch; nghĩa là các tệp này luôn cần được các tệp nguồn khác đưa vào 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 hàm 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, 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ừ 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, dynamic_deps, exports_filter, shared_lib_name, tags, user_link_flags, win_def_file)
Công cụ này tạo ra một thư viện dùng chung.
Ví dụ:
cc_shared_library( name = "foo_shared", deps = [ ":foo", ], dynamic_deps = [ ":bar_shared", ], additional_linker_inputs = [ ":foo.lds", ], user_link_flags = [ "-Wl,--version-script=$(location :foo.lds)", ], ) cc_library( name = "foo", srcs = ["foo.cc"], hdrs = ["foo.h"], deps = [ ":bar", ":baz", ], ) cc_shared_library( name = "bar_shared", shared_lib_name = "bar.so", deps = [":bar"], ) cc_library( name = "bar", srcs = ["bar.cc"], hdrs = ["bar.h"], ) cc_library( name = "baz", srcs = ["baz.cc"], hdrs = ["baz.h"], )
Trong ví dụ này, foo_shared
liên kết tĩnh foo
và baz
, trong đó baz
là phần phụ thuộc bắc cầu. Phương thức này không liên kết bar
vì phương thức này đã được cung cấp linh độ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 biểu tượng nào sẽ được xuất. Logic quy tắc cc_shared_library
không kiểm soát việc xuất biểu tượng nào, mà chỉ sử dụng những biểu tượng đượ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 đó, trong quá trình phân tích, Bazel giả định rằng foo
đang được foo_shared
xuất. baz
không được giả định là được xuất bởi 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
trong ví dụ chỉ được xuất hiện tối đa trong một cc_shared_library
. Nếu muốn liên kết baz
vào bar_shared
, chúng ta cần thêm tags = ["LINKABLE_MORE_THAN_ONCE"]
vào baz
.
Do thuộc tính shared_lib_name
, tệp do bar_shared
tạo sẽ có tên là bar.so
thay vì tên libbar.so
theo mặc định trên Linux.
Lỗi
Two shared libraries in dependencies export the same symbols.
Điều này sẽ xảy ra bất cứ khi nào bạn tạo một mục tiêu có 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 dừng việc xuất thư viện trong một trong các phần phụ thuộc cc_shared_library
.
Two shared libraries in dependencies link the same library statically
Điều này sẽ xảy ra bất cứ khi nào bạn tạo một cc_shared_library
mới với hai phần phụ thuộc cc_shared_library
khác nhau liên kết cùng một mục tiêu một cách tĩnh.
Tương tự như lỗi xuất.
Một cách để khắc phục vấn đề này là ngừng liên kết thư viện vào một trong các phần phụ thuộc cc_shared_library
. Đồng thời, tệp vẫn liên kết với thư viện cần xuất thư viện để tệp không liên kết với thư viện vẫn hiển thị các biểu tượng. Một cách khác là lấy một thư viện thứ ba xuất mục tiêu.
Cách thứ ba là gắn thẻ cc_library
gây ra lỗi bằng LINKABLE_MORE_THAN_ONCE
. Tuy nhiên, bạn hiếm khi phải khắc phục lỗi này 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 tập hợp đóng bắc cầu của deps
mà không cần phải truy cập vào một trong các phần phụ thuộc cc_shared_library
, nhưng thư viện này đã đượ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 là xuất tệp này từ phần phụ thuộc cc_shared_library
hoặc lấy một cc_shared_library
thứ ba để xuất tệp 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ì thư viện này không cần và không thể được liên kết tĩnh vào 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 cc_libraries
, thì cc_library
cần trực tiếp phụ thuộc 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 xuất một mục tiêu đang được xuất bởi một trong các phần phụ thuộc động của bạn.
Để khắc phục vấn đề này, hãy xoá mục tiêu khỏi deps
và chỉ dựa vào mục tiêu đó từ phần phụ thuộc động hoặc đảm bảo rằng exports_filter
không 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 sẽ được liên kết vào thư viện dùng chung này, miễn là các phần phụ thuộc đó 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ào nhiều |
additional_linker_inputs
|
Danh sách nhãn; mặc định là user_link_flags .
|
dynamic_deps
|
Danh sách nhãn; mặc định là cc_shared_library khác mà mục tiêu hiện tại phụ thuộc vào.
Việc triển khai |
exports_filter
|
Danh sách chuỗi; mặc định là
Mọi mục tiêu
Xin lưu ý rằng thuộc tính này không thực sự thêm cạnh phần phụ thuộc vào các mục tiêu đó, mà cạnh phần phụ thuộc sẽ do Cú pháp sau đây được cho phép:
|
shared_lib_name
|
Chuỗi; mặc định là |
user_link_flags
|
Danh sách chuỗi; mặc định là 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
|
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 hàm này để xuất biểu tượng trong quá trình liên kết thư viện dùng chung. |
cc_static_library
Xem nguồn quy tắccc_static_library(name, deps, tags)
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 mục tiêu đó, ưu tiên các đố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 bất kỳ tệp đối tượng nào vào thư viện tĩnh, nhưng cung cấp ít nhất một thư viện tĩnh, động hoặc giao diện. Thư viện tĩnh thu được có thể yêu cầu các thư viện này có sẵn 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ả 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
.
Ký hiệu trùng lặp
Theo mặc định, quy tắc cc_static_library
sẽ kiểm tra để đảm bảo thư viện tĩnh thu được không chứa bất kỳ ký hiệu trùng lặp nào. Nếu có, bản dựng sẽ không thành công và thông báo lỗi sẽ liệt kê các biểu tượng trùng lặp và tệp đối tượng chứa các biểu tượng đó.
Bạn có thể tắt tính năng kiểm tra này cho mỗi mục tiêu hoặc mỗi gói bằng cách đặt features = ["-symbol_check"]
hoặc trên toàn cục thông qua --features=-symbol_check
.
Hỗ trợ chuỗi công cụ cho symbol_check
Chuỗi công cụ C++ được định cấu hình tự động đi kèm với Bazel hỗ trợ tính năng symbol_check
trên tất cả các nền tảng. Chuỗi công cụ tuỳ chỉnh có thể thêm tính năng hỗ trợ cho công cụ này theo một trong hai cách:
- Triển khai thao tác
ACTION_NAMES.validate_static_library
và bật thao tác đó bằng tính năngsymbol_check
. Công cụ được đặt trong thao tác đượ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 tệp phải được tạo nếu quá trình kiểm tra thành công. - Tính năng
symbol_check
thêm cờ trình lưu trữ khiến thao tác tạo thư viện tĩnh không thành công trên các 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; 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 thư viện tĩnh, nhưng nhãn của các phần phụ thuộc này sẽ được thu thập trong tệp do nhóm đầu ra |
fdo_prefetch_hints
Xem nguồn quy tắcfdo_prefetch_hints(name, compatible_with, deprecation, distribs, features, licenses, profile, restricted_to, tags, target_compatible_with, testonly, visibility)
Biểu thị hồ sơ gợi ý tải 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; bắt buộc Tên duy nhất cho mục tiêu này. |
profile
|
Nhãn; mặc định là |
fdo_profile
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)
Biểu thị hồ sơ FDO nằm trong không gian làm việc hoặc tại một đường dẫn tuyệt đối đã 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; bắt buộc Tên duy nhất cho mục tiêu này. |
absolute_path_profile
|
Chuỗi; mặc định là |
profile
|
Nhãn; mặc định là |
proto_profile
|
Nhãn; mặc định là |
memprof_profile
Xem nguồn quy tắcmemprof_profile(name, absolute_path_profile, compatible_with, deprecation, distribs, features, licenses, profile, restricted_to, tags, target_compatible_with, testonly, visibility)
Biểu thị hồ sơ MEMPROF nằm 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ụ:
memprof_profile( name = "memprof", profile = "//path/to/memprof:profile.afdo", ) memprof_profile( name = "memprof_abs", absolute_path_profile = "/absolute/path/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. |
absolute_path_profile
|
Chuỗi; mặc định là |
profile
|
Nhãn; mặc định là |
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)
Biểu thị 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" ) 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; bắt buộc Tên duy nhất cho mục tiêu này. |
ld_profile
|
Nhãn; mặc định là |
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, link_extra_lib, 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; 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 Tệp Tất cả tệp Nếu tên của một quy tắc nằm trong
Các loại tệp
...và mọi quy tắc 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
|
Danh sách nhãn; mặc định là Ví dụ: bạn có thể cung cấp các tệp .res Windows đã biên dịch tại đây để nhúng vào mục tiêu tệp 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ự đã cho 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 đến mục tiêu này, cũng như mọi quy tắc phụ thuộc vào mục tiêu này. Hãy cẩn thận vì việc này có thể ảnh hưởng sâu rộng. Khi không chắc chắn, hãy thêm các giá trị xác định vào local_defines .
|
includes
|
Danh sách chuỗi; mặc định là
Chịu sự thay thế của "Tạo biến".
Mỗi chuỗi được thêm vào Bạn phải thêm tiêu đề vào srcs hoặc hdrs, nếu không, các tiêu đề này sẽ không có sẵn cho các quy tắc phụ thuộc khi quá trình biên dịch được đưa vào hộp cát (mặc định). |
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 tệp nhị phân.
Mỗi phần tử của danh sách này không bắt đầu bằng |
linkstatic
|
Boolean; 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.linkstatic : hãy 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ụ xây dựng liên kết trong Thực sự có ba cách để liên kết một tệp thực thi:
Thuộc tính
Nếu là |
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 các phần phụ thuộc của mục tiêu.
|
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 |
nocopts
|
Chuỗi; 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 cho mục đích biên dịch quy tắc này.
Bạn hiếm khi cần đến thuộc tính này.
|
stamp
|
Số nguyên; mặc định là
Tệp nhị phân được đóng dấu không được tạo lại trừ khi các phần phụ thuộc của tệp đó 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 hàm 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_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:
-
Thu thập tất cả cấu phần phần mềm cần thiết để các thao tác C++ chạy. 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 có đuôi là_files
). Đây là các nhóm tệp phổ biến nhất, tổng hợp 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
(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++.
Xem thêm
trang
này để biết tài liệu chi tiết về cấu hình chuỗi công cụ C++ và lựa chọn chuỗi công cụ.
Sử dụng tags = ["manual"]
để ngăn việc 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 Bộ sưu tậ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 vào làm dữ liệu đầu vào cho tất cả các hành động liên quan đến rules_cc (ngoại trừ các hành động đang sử dụng các tập hợp cấu phần phần mềm chính xác hơn từ các thuộc tính bên dưới). Bazel giả định rằngall_files là tập hợp con 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 dấu vết liên kết cần cả tệp biên dịch và tệp liên kết, vì vậy, quá trình này sẽ mất all_files ).
Đây là nội dung mà |
ar_files
|
Nhãn; mặc định là Tập hợp tất cả cấu phần phần mềm cc_toolchain cần thiết cho các thao tác lưu trữ. |
as_files
|
Nhãn; mặc định là Tập hợp tất cả cấu phần phần mềm cc_toolchain cần thiết cho các thao tác tập hợp. |
compiler_files
|
Nhãn; bắt buộc Tập hợ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 Tập hợp tất cả các cấu phần phần mềm cc_toolchain cần thiết cho các hành động dwp. |
dynamic_runtime_lib
|
Nhãn; mặc định là Phương thức này sẽ được dùng khi tính năng "static_link_cpp_runtimes" được bật và chúng ta đang liên kết các phần phụ thuộc một cách linh động. |
exec_transition_for_inputs
|
Boolean; mặc định là |
libc_top
|
Nhãn; mặc định là |
linker_files
|
Nhãn; bắt buộc Tập hợp tất cả cấu phần phần mềm cc_toolchain cần thiết để liên kết các hành động. |
module_map
|
Nhãn; mặc định là |
objcopy_files
|
Nhãn; bắt buộc Tập hợ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. |
static_runtime_lib
|
Nhãn; mặc định là Tệp này sẽ được dùng khi tính năng "static_link_cpp_runtimes" được bật và chúng ta đang liên kết các phần phụ thuộc một cách tĩnh. |
strip_files
|
Nhãn; bắt buộc Tập hợp tất cả cấ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; mặc định là |
supports_param_files
|
Boolean; 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; không thể định cấu hình; 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)
Đại diện cho một tập hợp các chuỗi công cụ C++.
Quy tắc này chịu trách nhiệm:
- 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 các tuỳ chọn
--cpu
và--compiler
được truyền đến Bazel.
Xem thêm trang này để biết tài liệu chi tiết về cấu hình chuỗi công cụ C++ và lựa chọn chuỗi công cụ.
Đố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. |
toolchains
|
Từ điển ánh xạ chuỗi đến nhãn; không thể định cấu hình; bắt buộc Bản đồ từ chuỗi "<cpu>" hoặc "<cpu>|<compiler>" đến nhãncc_toolchain . "<cpu>" sẽ được sử dụng khi chỉ --cpu được truyền đến 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", }, ) |