Quy tắc
bí danh
alias(name, actual, compatible_with, deprecation, features, restricted_to, tags, target_compatible_with, testonly, visibility)
Quy tắc alias
tạo một tên khác mà quy tắc có thể được gọi là.
Hiện tượng chồng phổ (aliasing) chỉ hoạt động đối với các mục tiêu "thông thường". Cụ thể, bạn không được đặt bí danh package_group
và test_suite
.
Quy tắc bí danh có phần khai báo riêng về chế độ hiển thị. Ở tất cả các khía cạnh khác, hàm này hoạt động giống như quy tắc mà mã tham chiếu (ví dụ: chỉ kiểm thử trên bí danh sẽ bị bỏ qua; thay vào đó, giá trị chỉ kiểm thử của quy tắc được tham chiếu được sử dụng) với một số ngoại lệ nhỏ:
-
Quy trình kiểm thử sẽ không chạy nếu bí danh được đề cập trên dòng lệnh. Để xác định một bí danh chạy thử nghiệm được tham chiếu, hãy sử dụng quy tắc
test_suite
với một mục tiêu duy nhất trong thuộc tínhtests
. -
Khi xác định nhóm môi trường, bí danh cho các quy tắc
environment
không được hỗ trợ. Các hàm này cũng không được hỗ trợ trong tuỳ chọn dòng lệnh--target_environment
.
Ví dụ
filegroup( name = "data", srcs = ["data.txt"], ) alias( name = "other", actual = ":data", )
Đối số
Thuộc tính | |
---|---|
name |
Tên dành riêng cho mục tiêu này. |
actual
|
|
config_setting
config_setting(name, constraint_values, define_values, deprecation, distribs, features, flag_values, licenses, tags, testonly, values, visibility)
Khớp với trạng thái cấu hình dự kiến (được biểu thị dưới dạng cờ bản dựng hoặc các quy tắc ràng buộc của nền tảng) nhằm mục đích kích hoạt các thuộc tính có thể định cấu hình. Hãy xem phần chọn để biết cách sử dụng quy tắc này và Các thuộc tính có thể định cấu hình để biết thông tin tổng quan về tính năng chung.
Ví dụ
Các lệnh sau đây khớp với mọi bản dựng đặt --compilation_mode=opt
hoặc -c opt
(có thể rõ ràng ở dòng lệnh hoặc ngầm ẩn từ các tệp .bazelrc):
config_setting( name = "simple", values = {"compilation_mode": "opt"} )
Các giá trị sau sẽ khớp với bất kỳ bản dựng nào nhắm mục tiêu đến ARM và áp dụng định nghĩa tuỳ chỉnh FOO=bar
(ví dụ: bazel build --cpu=arm --define FOO=bar ...
):
config_setting( name = "two_conditions", values = { "cpu": "arm", "define": "FOO=bar" } )
Các hàm sau đây khớp với mọi bản dựng đặt cờ do người dùng xác định
--//custom_flags:foo=1
(một cách rõ ràng ở dòng lệnh hoặc ngầm ẩn từ các tệp .bazelrc):
config_setting( name = "my_custom_flag_is_set", flag_values = { "//custom_flags:foo": "1" }, )
Các phiên bản sau đây phù hợp với mọi bản dựng nhắm đến một nền tảng có cấu trúc x86_64 và glibc phiên bản 2.25, giả sử sự tồn tại của constraint_value
có nhãn //example:glibc_2_25
. Xin lưu ý rằng một nền tảng vẫn khớp nếu nền tảng đó xác định thêm các giá trị ràng buộc khác ngoài hai giá trị này.
config_setting( name = "64bit_glibc_2_25", constraint_values = [ "@platforms//cpu:x86_64", "//example:glibc_2_25", ] )Trong mọi trường hợp như vậy, cấu hình có thể thay đổi trong bản dựng, chẳng hạn như nếu một mục tiêu cần được tạo cho một nền tảng khác với nền tảng của nó. Tức là ngay cả khi một
config_setting
không khớp với cờ dòng lệnh cấp cao nhất, nó vẫn có thể khớp với một số mục tiêu của bản dựng.
Ghi chú
- Hãy xem phần chọn để biết điều gì sẽ xảy ra khi nhiều
config_setting
khớp với trạng thái cấu hình hiện tại. - Đối với cờ hỗ trợ dạng viết tắt (ví dụ:
--compilation_mode
so với-c
), định nghĩavalues
phải sử dụng dạng đầy đủ. Các lệnh gọi này tự động so khớp bằng một trong hai biểu mẫu. -
Nếu một cờ nhận nhiều giá trị (như
--copt=-Da --copt=-Db
hoặc cờ Starlark thuộc danh sách), thìvalues = { "flag": "a" }
sẽ khớp nếu"a"
có mặt ở bất cứ đâu trong danh sách thực tế.values = { "myflag": "a,b" }
hoạt động theo cách tương tự: khớp với--myflag=a --myflag=b
,--myflag=a --myflag=b --myflag=c
,--myflag=a,b
và--myflag=c,b,a
. Ngữ nghĩa chính xác khác nhau giữa các cờ. Ví dụ:--copt
không hỗ trợ nhiều giá trị trong cùng một thực thể:--copt=a,b
tạo ra["a,b"]
trong khi--copt=a --copt=b
tạo["a", "b"]
(vì vậyvalues = { "copt": "a,b" }
khớp với giá trị trước đó nhưng không khớp với giá trị sau). Nhưng--ios_multi_cpus
(đối với các quy tắc của Apple) có:-ios_multi_cpus=a,b
vàios_multi_cpus=a --ios_multi_cpus=b
đều tạo["a", "b"]
. Hãy kiểm tra các định nghĩa về cờ và kiểm tra kỹ các điều kiện của bạn để xác minh các kỳ vọng chính xác. - Nếu bạn cần xác định những điều kiện không được mô hình hoá bằng cờ bản dựng tích hợp sẵn, hãy sử dụng
cờ do Starlark xác định. Bạn cũng có thể sử dụng
--define
, nhưng hỗ trợ yếu hơn và không được khuyên dùng. Hãy xem tại đây để biết thêm thông tin thảo luận. - Tránh lặp lại các định nghĩa
config_setting
giống nhau trong các gói khác nhau. Thay vào đó, hãy tham chiếu mộtconfig_setting
chung được xác định trong một gói chuẩn hoá. - Bạn có thể dùng
values
,define_values
vàconstraint_values
theo bất kỳ cách kết hợp nào trong cùng mộtconfig_setting
nhưng phải đặt ít nhất một mã choconfig_setting
bất kỳ.
Đối số
Thuộc tính | |
---|---|
name |
Tên dành riêng cho mục tiêu này. |
constraint_values
|
constraint_values tối thiểu mà nền tảng mục tiêu phải chỉ định để khớp với config_setting này. (Chúng tôi không xem xét đến nền tảng thực thi ở đây.) Mọi giá trị ràng buộc bổ sung mà nền tảng đã bỏ qua đều bị bỏ qua. Xem
Thuộc tính bản dựng có thể định cấu hình để biết thông tin chi tiết.
Trong trường hợp hai |
define_values
|
values nhưng dành riêng cho cờ --define .
Tức là: config_setting( name = "a_and_b", values = { "define": "a=1", "define": "b=2", }) không hoạt động vì cùng một khoá ( config_setting( name = "a_and_b", define_values = { "a": "1", "b": "2", }) khớp chính xác với
|
flag_values
|
values nhưng dành cho
cờ bản dựng do người dùng xác định.
Đây là một thuộc tính riêng biệt vì cờ do người dùng xác định được tham chiếu dưới dạng nhãn, còn cờ tích hợp được tham chiếu dưới dạng chuỗi tuỳ ý. |
values
|
Quy tắc này kế thừa cấu hình của mục tiêu đã định cấu hình tham chiếu đến mục tiêu đó trong câu lệnh Để thuận tiện, các giá trị cấu hình sẽ được chỉ định là cờ bản dựng (không có Nếu cờ không được đặt rõ ràng ở dòng lệnh, thì giá trị mặc định của cờ sẽ được sử dụng.
Nếu một khóa xuất hiện nhiều lần trong từ điển thì chỉ lần xuất hiện cuối cùng được sử dụng.
Nếu một khoá tham chiếu đến một cờ có thể được đặt nhiều lần trên dòng lệnh (ví dụ:
|
nhóm tệp
filegroup(name, srcs, data, compatible_with, deprecation, distribs, features, licenses, output_group, restricted_to, tags, target_compatible_with, testonly, visibility)
Sử dụng filegroup
để đặt tên thuận tiện cho tập hợp các mục tiêu.
Sau đó, bạn có thể tham khảo những thông tin này từ các quy tắc khác.
Bạn nên sử dụng filegroup
thay vì tham chiếu trực tiếp các thư mục.
Phương án thứ hai không phù hợp vì hệ thống xây dựng không có đầy đủ kiến thức về mọi tệp bên dưới thư mục, vì vậy, hệ thống có thể không tạo lại khi các tệp này thay đổi. Khi kết hợp với glob, filegroup
có thể đảm bảo rằng hệ thống xây dựng sẽ biết rõ mọi tệp.
Ví dụ
Để tạo một filegroup
bao gồm hai tệp nguồn, hãy thực hiện
filegroup( name = "mygroup", srcs = [ "a_file.txt", "some/subdirectory/another_file.txt", ], )
Bạn cũng có thể sử dụng glob
để tạo thư mục testdata:
filegroup( name = "exported_testdata", srcs = glob([ "testdata/*.dat", "testdata/logs/**/*.log", ]), )
Để sử dụng các định nghĩa này, hãy tham chiếu filegroup
với nhãn thuộc quy tắc bất kỳ:
cc_library( name = "my_library", srcs = ["foo.cc"], data = [ "//my_package:exported_testdata", "//my_package:mygroup", ], )
Đối số
Thuộc tính | |
---|---|
name |
Tên dành riêng cho mục tiêu này. |
srcs
|
Thường thì sử dụng kết quả của biểu thức glob cho giá trị của thuộc tính |
data
|
Các mục tiêu có tên trong thuộc tính |
output_group
|
"Nhóm đầu ra" là một danh mục cấu phần phần mềm đầu ra của một mục tiêu, được chỉ định trong phương thức triển khai quy tắc đó. |
truy vấn tạo
genquery(name, deps, data, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, expression, features, licenses, opts, restricted_to, scope, strict, tags, target_compatible_with, testonly, visibility)
genquery()
chạy truy vấn được chỉ định bằng Ngôn ngữ truy vấn BigQuery và kết xuất kết quả vào một tệp.
Để đảm bảo tính nhất quán của bản dựng, truy vấn chỉ được phép truy cập vào trạng thái đóng bắc cầu của các mục tiêu đã chỉ định trong thuộc tính scope
. Các truy vấn vi phạm quy tắc này sẽ không thực thi được trong quá trình thực thi nếu strict
chưa được chỉ định hoặc đúng (nếu strict
là sai, các mục tiêu nằm ngoài phạm vi sẽ bị bỏ qua kèm theo một cảnh báo). Cách dễ nhất để đảm bảo điều này không xảy ra là đề cập đến cùng các nhãn trong phạm vi như trong biểu thức truy vấn.
Điểm khác biệt duy nhất giữa các truy vấn được phép ở đây và trên dòng lệnh là các truy vấn chứa thông số kỹ thuật đích bằng ký tự đại diện (ví dụ: //pkg:*
hoặc //pkg:all
) không được cho phép ở đây.
Có 2 lý do dẫn đến điều này: một là vì genquery
phải chỉ định một phạm vi để ngăn các mục tiêu nằm ngoài trạng thái đóng bắc cầu của truy vấn làm ảnh hưởng đến kết quả của truy vấn; và thứ hai, vì tệp BUILD
không hỗ trợ các phần phụ thuộc ký tự đại diện (ví dụ: deps=["//a/..."]
không được cho phép).
Đầu ra của truy vấn tạo sinh được sắp xếp bằng cách sử dụng --order_output=full
để thực thi đầu ra xác định.
Tên của tệp đầu ra là tên của quy tắc.
Ví dụ
Ví dụ này ghi danh sách các nhãn trong đóng bắc cầu của mục tiêu được chỉ định vào một tệp.
genquery( name = "kiwi-deps", expression = "deps(//kiwi:kiwi_lib)", scope = ["//kiwi:kiwi_lib"], )
Đối số
Thuộc tính | |
---|---|
name |
Tên dành riêng cho mục tiêu này. |
expression
|
:b trong thuộc tính này trong tệp a/BUILD sẽ tham chiếu đến //:b mục tiêu.
|
opts
|
bazel query . Một số tuỳ chọn truy vấn không được chấp nhận tại đây: --keep_going , --query_file , --universe_scope , --order_results và --order_output . Các tuỳ chọn không được chỉ định ở đây sẽ có giá trị mặc định giống như trên dòng lệnh bazel query .
|
scope
|
|
strict
|
|
quy tắc
genrule(name, srcs, outs, cmd, cmd_bash, cmd_bat, cmd_ps, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, exec_tools, executable, features, licenses, local, message, output_licenses, output_to_bindir, restricted_to, tags, target_compatible_with, testonly, toolchains, tools, visibility)
genrule
tạo một hoặc nhiều tệp bằng lệnh Bash do người dùng xác định.
Quy tắc tạo sinh là các quy tắc bản dựng chung mà bạn có thể sử dụng nếu không có quy tắc cụ thể nào cho tác vụ.
Ví dụ: bạn có thể chạy một lớp lót Bash. Tuy nhiên, nếu bạn cần biên dịch tệp C++, hãy tuân theo các quy tắc cc_*
hiện có, vì mọi công việc phức tạp đã được thực hiện cho bạn.
Không sử dụng quy tắc tạo (genRule) để chạy chương trình kiểm thử. Có những khuôn khổ đặc biệt cho các hoạt động kiểm thử và kết quả kiểm thử, bao gồm cả chính sách lưu vào bộ nhớ đệm và các biến môi trường. Thường cần chạy kiểm thử sau khi bản dựng hoàn tất và trên cấu trúc mục tiêu, trong khi genrules được thực thi trong quá trình tạo bản dựng và trên cấu trúc máy chủ lưu trữ (hai quy tắc này có thể khác nhau). Nếu bạn cần một quy tắc kiểm thử mục đích chung, hãy sử dụng sh_test
.
Các yếu tố cần cân nhắc khi biên dịch chéo
Xem hướng dẫn sử dụng để biết thêm thông tin về tính năng biên dịch chéo.
Mặc dù genrules chạy trong quá trình tạo bản dựng, nhưng kết quả của chúng thường được dùng sau khi tạo bản dựng để triển khai hoặc kiểm thử. Hãy xem ví dụ về việc biên dịch mã C cho bộ vi điều khiển: trình biên dịch chấp nhận các tệp nguồn C và tạo mã chạy trên bộ vi điều khiển. Rõ ràng là mã được tạo không thể chạy trên CPU dùng để tạo mã, nhưng bản thân trình biên dịch C (nếu được biên dịch từ nguồn) thì phải làm vậy.
Hệ thống xây dựng sử dụng cấu hình máy chủ để mô tả(các) máy mà bản dựng chạy trên đó và cấu hình mục tiêu để mô tả(các) máy mà đầu ra của bản dựng sẽ chạy. Thư viện này cung cấp các tuỳ chọn để định cấu hình từng tệp trong số này và phân tách các tệp tương ứng thành các thư mục riêng biệt để tránh xung đột.
Đối với quy tắc tạo sinh, hệ thống xây dựng đảm bảo rằng các phần phụ thuộc được tạo một cách phù hợp: srcs
được tạo (nếu cần) cho cấu hình mục tiêu, tools
được tạo cho cấu hình máy chủ và kết quả đầu ra được coi là dành cho cấu hình mục tiêu. API này cũng cung cấp
biến "Make" mà các lệnh genRule có thể truyền đến các công cụ tương ứng.
Điều này có chủ ý rằng quy tắc tạo không xác định thuộc tính deps
: các quy tắc tích hợp khác sử dụng thông tin meta phụ thuộc vào ngôn ngữ được truyền giữa các quy tắc để tự động xác định cách xử lý các quy tắc phụ thuộc. Tuy nhiên, quy tắc tự động hoá không thể thực hiện mức độ tự động này. Quy tắc gen chỉ hoạt động ở cấp tệp và cấp runfiles.
Các trường hợp đặc biệt
Biên dịch máy chủ lưu trữ: trong một số trường hợp, hệ thống xây dựng cần chạy các quy tắc genrules để có thể thực thi đầu ra trong quá trình tạo bản dựng. Ví dụ: nếu một quy tắc tạo bản dựng tạo một số trình biên dịch tuỳ chỉnh mà sau đó được một quy tắc tạo khác sử dụng, thì quy tắc đầu tiên phải tạo đầu ra cho cấu hình máy chủ lưu trữ, vì đó là nơi trình biên dịch sẽ chạy trong quy tắc tạo khác. Trong trường hợp này, hệ thống xây dựng sẽ tự động thực hiện đúng quy tắc: tạo srcs
và outs
của quy tắc tạo đầu tiên cho cấu hình máy chủ lưu trữ thay vì cấu hình mục tiêu. Hãy xem hướng dẫn sử dụng để biết thêm thông tin.
Công cụ JDK và C++: để sử dụng công cụ trong JDK hoặc bộ trình biên dịch C++, hệ thống xây dựng sẽ cung cấp một tập hợp các biến để sử dụng. Xem biến"Tạo" để biết thông tin chi tiết.
Môi trường quy tắc thế hệ
Lệnh genRules được thực thi bởi một shell Bash được định cấu hình sẽ không thành công khi một lệnh hoặc một quy trình không thành công, bằng cách sử dụng set -e -o pipefail
.
Công cụ xây dựng thực thi lệnh Bash trong một môi trường quy trình sạch sẽ chỉ xác định các biến cốt lõi như PATH
, PWD
, TMPDIR
và một số biến khác.
Để đảm bảo rằng các bản dựng có thể tái tạo, hầu hết các biến được xác định trong môi trường shell của người dùng sẽ không được truyền qua lệnh của quy tắc gen. Tuy nhiên, Bazel (nhưng không phải là Blaze) sẽ truyền giá trị của biến môi trường PATH
của người dùng.
Mọi thay đổi đối với giá trị của PATH
sẽ khiến Bazel thực thi lại lệnh trong bản dựng tiếp theo.
Lệnh tạo quy tắc không được truy cập mạng ngoại trừ việc kết nối các quy trình là phần tử con của chính lệnh đó, mặc dù lệnh này hiện không được thực thi.
Hệ thống xây dựng tự động xoá mọi tệp đầu ra hiện có, nhưng sẽ tạo mọi thư mục mẹ cần thiết trước khi chạy genRules. Thao tác này cũng sẽ xoá mọi tệp đầu ra trong trường hợp không thực hiện được.
Lời khuyên chung
- Đảm bảo rằng các công cụ chạy theo quy tắc chung có tính xác định và khép kín. Các đối tượng này không nên ghi dấu thời gian vào kết quả và nên sử dụng thứ tự ổn định cho tập hợp và bản đồ, cũng như chỉ ghi các đường dẫn tệp tương đối vào kết quả, không dùng đường dẫn tuyệt đối. Việc không tuân theo quy tắc này sẽ dẫn đến hành vi bản dựng không mong muốn (Bazel không tạo lại quy tắc tạo sinh mà bạn nghĩ) và làm giảm hiệu suất bộ nhớ đệm.
- Hãy sử dụng
$(location)
một cách rộng rãi để xem đầu ra, công cụ và nguồn. Do sự phân tách các tệp đầu ra cho các cấu hình khác nhau, quy tắc gen không thể dựa vào các đường dẫn và/hoặc đường dẫn tuyệt đối được mã hoá cứng. - Hãy viết một macro Starlark phổ biến trong trường hợp các quy tắc tạo quy tắc giống nhau hoặc rất giống nhau được sử dụng ở nhiều vị trí. Nếu quy tắc tạo sinh phức tạp, hãy cân nhắc triển khai quy tắc đó trong một tập lệnh hoặc dưới dạng quy tắc Starlark. Điều này giúp cải thiện khả năng đọc cũng như khả năng kiểm thử.
- Đảm bảo rằng mã thoát cho biết chính xác sự thành công hay thất bại của quy tắc tạo.
- Đừng viết tin nhắn cung cấp thông tin cho stdout hoặc stderr. Mặc dù hữu ích cho việc gỡ lỗi, nhưng thuộc tính này có thể dễ dàng trở thành nhiễu; một quy tắc tạo thành công phải là im lặng. Mặt khác, một quy tắc tạo không thành công sẽ phát đi các thông báo lỗi hợp lệ.
$$
evaluates to a$
, a literal dollar-sign, so in order to invoke a shell command containing dollar-signs such asls $(dirname $x)
, one must escape it thus:ls $$(dirname $$x)
.- Tránh tạo các đường liên kết tượng trưng và thư mục. Bazel không sao chép cấu trúc thư mục/đường liên kết tượng trưng được tạo bằng genrules và việc kiểm tra phần phụ thuộc của các thư mục là không hợp lý.
- Khi tham chiếu quy tắc tạo sinh trong các quy tắc khác, bạn có thể sử dụng nhãn của quy tắc tạo này hoặc nhãn của từng tệp đầu ra. Việc tham chiếu kết quả theo tên trong
srcs
của quy tắc tiêu thụ sẽ giúp tránh việc vô tình nhận các kết quả khác của quy tắc tạo sinh, nhưng có thể trở nên tẻ nhạt nếu quy tắc tạo sinh tạo ra nhiều đầu ra.
Ví dụ
Ví dụ này sẽ tạo foo.h
. Không có nguồn nào, vì lệnh này không lấy bất kỳ dữ liệu đầu vào nào. "Tệp nhị phân" chạy bởi lệnh là một tập lệnh perl trong cùng gói với quy tắc tạo sinh.
genrule( name = "foo", srcs = [], outs = ["foo.h"], cmd = "./$(location create_foo.pl) > \"$@\"", tools = ["create_foo.pl"], )
Ví dụ sau đây cho biết cách sử dụng filegroup
và kết quả của một genrule
khác. Xin lưu ý rằng việc sử dụng $(SRCS)
thay vì lệnh $(location)
tường minh cũng sẽ có tác dụng. Ví dụ này sử dụng lệnh sau để minh hoạ.
genrule( name = "concat_all_files", srcs = [ "//some:files", # a filegroup with multiple files in it ==> $(locations) "//other:gen", # a genrule with a single output ==> $(location) ], outs = ["concatenated.txt"], cmd = "cat $(locations //some:files) $(location //other:gen) > $@", )
Đối số
Thuộc tính | |
---|---|
name |
Tên dành riêng cho mục tiêu này. Bạn có thể tham chiếu đến quy tắc này theo tên trong phần srcs hoặc deps của các quy tắc BUILD khác. Nếu quy tắc đó tạo tệp nguồn, thì bạn nên sử dụng thuộc tính srcs .
|
srcs
|
Thuộc tính này không phù hợp để liệt kê các công cụ do
Hệ thống xây dựng đảm bảo các điều kiện tiên quyết này được xây dựng trước khi chạy lệnh genRules. Các điều kiện này được xây dựng bằng cấu hình giống như yêu cầu bản dựng gốc. Tên của các tệp của các điều kiện tiên quyết này có sẵn cho lệnh dưới dạng danh sách được phân tách bằng dấu cách trong |
outs
|
Tệp đầu ra không được vượt quá ranh giới của gói. Tên tệp đầu ra được diễn giải là tương ứng với gói.
Nếu bạn đặt cờ
Lệnh genRule sẽ tạo mỗi tệp đầu ra tại một vị trí được xác định trước.
Vị trí này có trong |
cmd
|
$(location)
và biến"Make".
cmd_bash , cmd_ps và cmd_bat , nếu không có lựa chọn nào trong số đó phù hợp.
Nếu độ dài dòng lệnh vượt quá giới hạn nền tảng (64K trên Linux/macOS, 8K trên Windows), thì quy tắc tạo sẽ ghi lệnh vào một tập lệnh và thực thi tập lệnh đó để giải quyết vấn đề. Lệnh này áp dụng cho tất cả các thuộc tính cmd ( |
cmd_bash
|
Thuộc tính này có mức độ ưu tiên cao hơn |
cmd_bat
|
Thuộc tính này có mức độ ưu tiên cao hơn
|
cmd_ps
|
Thuộc tính này có mức độ ưu tiên cao hơn
Để giúp Powershell dễ sử dụng hơn và ít xảy ra lỗi hơn, chúng ta chạy các lệnh sau để thiết lập môi trường trước khi thực thi lệnh Powershell trong genRule.
|
exec_tools
|
tools , ngoại trừ việc những phần phụ thuộc này sẽ được định cấu hình cho nền tảng thực thi của quy tắc thay vì cấu hình máy chủ lưu trữ.
Tức là các phần phụ thuộc trong exec_tools không phải tuân theo các giới hạn giống như các phần phụ thuộc trong tools . Cụ thể, các mã này không bắt buộc phải sử dụng cấu hình máy chủ lưu trữ cho các phần phụ thuộc bắc cầu của riêng chúng. Hãy xem tools để biết thêm thông tin chi tiết.
Nhóm Blaze đang di chuyển tất cả cách sử dụng |
executable
|
Việc đặt cờ này thành True có nghĩa là đầu ra là một tệp thực thi và có thể chạy bằng lệnh Việc khai báo phần phụ thuộc dữ liệu cho tệp thực thi được tạo không được hỗ trợ. |
local
|
Nếu bạn đặt chính sách này thành True, thì tuỳ chọn này sẽ buộc
Điều này tương đương với việc cung cấp "local" dưới dạng thẻ ( |
message
|
Thông báo tiến trình sẽ được in khi thực thi bước tạo bản dựng này. Theo mặc định, thông báo sẽ là "Đang tạo kết quả" (hoặc một thông báo nào đó nhạt nhẽo như nhau), nhưng bạn có thể cung cấp một thông báo cụ thể hơn. Hãy dùng thuộc tính này thay vì |
output_licenses
|
common attributes
|
output_to_bindir
|
Nếu bạn đặt thành True, thì tuỳ chọn này sẽ ghi các tệp đầu ra vào thư mục |
tools
|
Hệ thống xây dựng đảm bảo các điều kiện tiên quyết này được xây dựng trước khi chạy lệnh genRules; các điều kiện này được xây dựng bằng cấu hình host, vì các công cụ này được thực thi như một phần của bản dựng. Bạn có thể lấy đường dẫn của một mục tiêu
Mọi |
test_suite
test_suite(name, compatible_with, deprecation, distribs, features, licenses, restricted_to, tags, target_compatible_with, testonly, tests, visibility)
test_suite
xác định một tập hợp các bài kiểm thử được coi là "hữu ích" với con người. Điều này cho phép các dự án xác định tập hợp kiểm thử, chẳng hạn như "các chương trình kiểm thử bạn phải chạy trước khi kiểm tra", "kiểm thử căng thẳng của dự án" hoặc "tất cả các kiểm thử nhỏ". Lệnh blaze test
tôn trọng kiểu tổ chức này: Đối với một lệnh gọi như blaze test //some/test:suite
, trước tiên, Blaze sẽ liệt kê tất cả các mục tiêu kiểm thử được đưa vào mục tiêu //some/test:suite
theo cách bắc cầu (chúng tôi gọi đây là "bản mở rộng kiểm thử"), sau đó Blaze tạo và kiểm thử các mục tiêu đó.
Ví dụ
Một bộ kiểm thử để chạy mọi bài kiểm thử nhỏ trong gói hiện tại.
test_suite( name = "small_tests", tags = ["small"], )
Một bộ kiểm thử chạy một tập hợp các bài kiểm thử được chỉ định:
test_suite( name = "smoke_tests", tests = [ "system_unittest", "public_api_unittest", ], )
Một bộ kiểm thử để chạy mọi bài kiểm thử trong gói hiện tại và đảm bảo không bị lỗi.
test_suite( name = "non_flaky_test", tags = ["-flaky"], )
Đối số
Thuộc tính | |
---|---|
name |
Tên dành riêng cho mục tiêu này. |
tags
|
Những thẻ bắt đầu bằng ký tự "-" được xem là thẻ phủ định. Ký tự "-" ở trên không được coi là một phần của thẻ, vì vậy thẻ "-nhỏ" sẽ khớp với kích thước "nhỏ" của kiểm thử. Tất cả các thẻ khác đều được coi là thẻ khẳng định. Để làm cho các thẻ khẳng định rõ ràng hơn, các thẻ cũng có thể bắt đầu bằng ký tự "+" (không bắt buộc). Ký tự này sẽ không được đánh giá là một phần trong văn bản của thẻ. Công cụ này chỉ giúp dễ đọc hơn sự khác biệt mang tính tích cực và tiêu cực. Chỉ những quy tắc kiểm thử phù hợp với tất cả thẻ khẳng định và không có thẻ phủ định nào mới được đưa vào bộ thử nghiệm. Xin lưu ý rằng điều này không có nghĩa là việc kiểm tra lỗi đối với các phần phụ thuộc trên kiểm thử đã lọc ra sẽ bị bỏ qua; các phần phụ thuộc trên kiểm thử bị bỏ qua vẫn cần phải hợp pháp (ví dụ: không bị chặn bởi các giới hạn về chế độ hiển thị).
Hệ thống xử lý từ khoá trong thẻ
Xin lưu ý rằng
Nếu cần một |
tests
|
Mọi
Nếu thuộc tính |