전이 종속 항목에서 축적된 값이 포함된 큰 명령줄이 작업에 필요한 경우가 많습니다. 예를 들어 링커 명령줄은 링크되는 모든 라이브러리에 필요한 모든 객체 파일을 나열할 수 있습니다. 여러 타겟에서 공유할 수 있도록 이러한 전이 데이터를 depset
에 저장하는 것이 좋습니다. 그러나 규칙 작성자가 작업 명령줄을 구성하기 위해 이러한 디셋을 문자열 목록으로 변환해야 하는 경우 이 메모리 공유 최적화가 무효화됩니다.
이러한 이유로 작업 구성 함수는 문자열 외에도 Args
객체를 허용합니다. 각 Args
객체는 데이터 조작을 위한 변환(선택사항)과 함께 문자열과 디플렉스의 연결을 나타냅니다. Args
객체는 명령줄을 계산할 때가 된 실행 단계까지 캡슐화된 디펜스를 처리하지 않습니다. 따라서 분석 단계가 완료될 때까지 비용이 많이 드는 복사 작업을 지연할 수 있습니다. 자세한 내용은 성능 최적화 페이지를 참조하세요.
Args
는 ctx.actions.args()
를 호출하여 구성됩니다. ctx.actions.run()
또는 ctx.actions.run_shell()
의 arguments
매개변수로 전달할 수 있습니다. Args
객체의 각 변형은 최종 명령줄에 값을 추가합니다.
map_each
기능을 사용하면 항목이 문자열로 변환되는 방식을 맞춤설정할 수 있습니다. map_each
함수를 제공하지 않으면 표준 변환은 다음과 같습니다.
- 이미 문자열인 값은 그대로 둡니다.
File
객체는File.path
값으로 변환됩니다.- 다른 모든 유형은 미지정 방식으로 문자열로 변환됩니다. 따라서 문자열 또는
File
유형이 아닌 값은add()
에 전달해서는 안 되며add_all()
또는add_joined()
에 전달하는 경우map_each
함수를 제공해야 합니다.
문자열 형식(add*()
메서드의 format
, format_each
, format_joined
매개변수)을 사용하면 형식 템플릿이 문자열 대체 항목(%
)과 동일한 방식으로 해석됩니다. 단, 템플릿에 대체 자리표시자가 정확히 하나만 있어야 하며 %s
여야 합니다. 리터럴 백분율은 %%
로 이스케이프 처리할 수 있습니다. 서식은 위에 설명된 대로 값이 문자열로 변환된 후 적용됩니다.
각 add*()
메서드에는 추가 위치 매개변수(다른 인수 앞에 삽입할 'arg name' 문자열)를 허용하는 대체 양식이 있습니다. add_all
및 add_joined
의 경우 시퀀스가 비어 있으면 추가 문자열이 추가되지 않습니다. 예를 들어 동일한 시퀀스에 지정된 시퀀스에 val1..val3
가 포함되어 있는지 또는 비어 있는지에 따라 --foo val1 val2 val3 --bar
또는 --bar
만 추가할 수 있습니다.
명령줄의 크기가 시스템에서 허용하는 최대 크기보다 길어질 수 있는 경우 인수가 매개변수 파일로 스필링될 수 있습니다. use_param_file()
및 set_param_file_format()
을 참고하세요.
예: 다음 명령줄을 생성한다고 가정해 보겠습니다.
--foo foo1.txt foo2.txt ... fooN.txt --bar bar1.txt,bar2.txt,...,barM.txt --baz다음과 같은
Args
객체를 사용할 수 있습니다. # foo_deps and bar_deps are depsets containing # File objects for the foo and bar .txt files. args = ctx.actions.args() args.add_all("--foo", foo_deps) args.add_joined("--bar", bar_deps, join_with=",") args.add("--baz") ctx.actions.run( ... arguments = [args], ... )
구성원
add
Args Args.add(arg_name_or_value, value=unbound, *, format=None)이 명령줄에 인수를 추가합니다.
매개변수
매개변수 | 설명 |
---|---|
arg_name_or_value
|
필수 위치 매개변수 두 개가 전달되면 인수 이름으로 해석됩니다. 인수 이름은 처리 없이 값 앞에 추가됩니다. 위치 매개변수 하나만 전달되면 value 로 해석됩니다 (아래 참고).
|
value
|
default = unbound 추가할 객체입니다. 위에서 언급한 표준 변환을 사용하여 문자열로 변환됩니다. 이 함수에는 map_each 매개변수가 없으므로 value 는 문자열 또는 File 여야 합니다. 목록, 튜플, depset 또는 디렉터리 File 는 이 메서드 대신 add_all() 또는 add_joined() 에 전달되어야 합니다.
|
format
|
string; or None ;
기본값 = Nonevalue 의 문자열화된 버전에 적용될 형식 문자열 패턴입니다.
|
전체_추가
Args Args.add_all(arg_name_or_values, values=unbound, *, map_each=None, format_each=None, before_each=None, omit_if_empty=True, uniquify=False, expand_directories=True, terminate_with=None, allow_closure=False)이 명령줄에 여러 인수를 추가합니다. 항목은 실행 단계 중에 느리게 처리됩니다.
대부분의 처리는 다음 단계에 따라 추가할 인수 목록에서 이루어집니다.
- 각 디렉터리
File
항목은 이 디렉터리에 포함된 모든File
로 대체됩니다. map_each
가 제공되면 각 항목에 적용되며 결과 문자열 목록이 연결되어 초기 인수 목록을 형성합니다. 그렇지 않으면 초기 인수 목록은 각 항목에 표준 변환을 적용한 결과입니다.- 목록의 각 인수는
format_each
로 형식이 지정됩니다(있는 경우). uniquify
이 true인 경우 중복 인수가 삭제됩니다. 첫 번째 항목은 남아 있는 항목입니다.before_each
문자열이 지정되면 목록의 각 기존 인수 앞에 새 인수로 삽입됩니다. 이렇게 하면 이 시점에 추가할 인수의 수가 두 배가 됩니다.- 목록이 비어 있고
omit_if_empty
가 true(기본값)인 경우를 제외하고 인수 이름과terminate_with
는 각각 첫 번째와 마지막 인수로 삽입됩니다(지정된 경우).
매개변수
매개변수 | 설명 |
---|---|
arg_name_or_values
|
필수 위치 매개변수 두 개가 전달되면 인수 이름으로 해석됩니다. 인수 이름은 별도의 처리 없이 별도의 인수로 values 앞에 추가됩니다. 이 인수 이름은 omit_if_empty 가 true (기본값)이고 다른 항목이 추가되지 않는 경우 추가되지 않습니다 (values 가 비어 있거나 모든 항목이 필터링된 경우). 위치 매개변수 하나만 전달되면 values 로 해석됩니다 (아래 참고).
|
values
|
sequence; or depset ;
default = unbound항목이 추가될 목록, 튜플 또는 오프셋입니다. |
map_each
|
callable; or None ;
default = None각 항목을 0개 이상의 문자열로 변환하는 함수이며 추가 전에 추가로 처리될 수 있습니다. 이 매개변수가 제공되지 않으면 표준 변환이 사용됩니다. 함수에는 변환할 항목 1개 또는 2개(전달할 항목 다음에 반환 값 유형은 항목에 대해 생성되는 인수의 수에 따라 다릅니다.
None 를 반환하는 것은 길이 1 또는 길이 0의 목록을 각각 반환하는 것과 같습니다. 하지만 필요하지 않은 목록을 만들지 않아도 되므로 더 효율적이고 읽기 쉽습니다.일반적으로 디렉터리인 항목은 대규모 분석 단계 데이터 구조가 실행 단계에 의도치 않게 유지되지 않도록 하려면 경고: |
format_each
|
string; or None ;
기본값 = Nonemap_each 함수에서 반환하는 각 문자열에 적용되는 선택적 형식 문자열 패턴입니다. 형식 문자열에는 정확히 하나의 '%s' 자리표시자가 있어야 합니다.
|
before_each
|
string; or None ;
기본값 = Nonevalues 에서 파생된 각 인수가 추가되기 전에 추가할 선택적 인수입니다.
|
omit_if_empty
|
default = True true인 경우 추가할 values 에서 파생된 인수가 없으면 모든 추가 처리가 중단되고 명령줄이 변경되지 않습니다. false인 경우 인수 이름과 terminate_with (제공되는 경우)는 다른 인수가 있는지 여부와 관계없이 계속 추가됩니다.
|
uniquify
|
default = False true인 경우 values 에서 파생된 중복 인수는 생략됩니다. 각 인수의 첫 번째 항목만 유지됩니다. 일반적으로 이 기능은 디펜스에서 중복을 생략하기 때문에 필요하지 않지만 map_each 가 여러 항목에 같은 문자열을 내보내는 경우 유용할 수 있습니다.
|
expand_directories
|
default = True true이면 values 의 모든 디렉터리가 파일 플랫 목록으로 확장됩니다. 이는 map_each 가 적용되기 전에 발생합니다.
|
terminate_with
|
string; or None ;
default = None다른 모든 인수 뒤에 추가할 선택적 인수입니다. omit_if_empty 가 true (기본값)이고 다른 항목이 추가되지 않는 경우 (values 가 비어 있거나 모든 항목이 필터링된 경우) 이 인수가 추가되지 않습니다.
|
allow_closure
|
default = False true인 경우 map_each 와 같은 함수 매개변수에 클로저를 사용할 수 있습니다. 일반적으로 이는 필요하지 않으며 대규모 분석 단계 데이터 구조를 실행 단계에 보관할 위험이 있습니다.
|
add_joined
Args Args.add_joined(arg_name_or_values, values=unbound, *, join_with, map_each=None, format_each=None, format_joined=None, omit_if_empty=True, uniquify=False, expand_directories=True, allow_closure=False)구분자를 사용하여 여러 값을 연결하여 이 명령줄에 인수를 추가합니다. 항목은 실행 단계 중에 느리게 처리됩니다.
처리는 add_all()
와 비슷하지만 values
에서 파생된 인수 목록은 join_with.join(...)
에서와 같이 단일 인수로 결합된 후 지정된 format_joined
문자열 템플릿을 사용하여 형식이 지정됩니다. add_all()
와 달리 before_each
또는 terminate_with
매개변수는 항목이 단일 인수로 결합될 때 일반적으로 유용하지 않으므로 없습니다.
필터링 후 인수로 조인할 문자열이 없고 omit_if_empty
가 true (기본값)인 경우 처리가 수행되지 않습니다. 조인할 문자열이 없지만 omit_if_empty
이 false인 경우 조인 문자열은 빈 문자열입니다.
매개변수
매개변수 | 설명 |
---|---|
arg_name_or_values
|
필수 위치 매개변수 두 개가 전달되면 인수 이름으로 해석됩니다. 인수 이름은 처리 없이 values 앞에 추가됩니다. 이 인수는 omit_if_empty 가 true (기본값)이고 함께 조인하기 위해 values 에서 파생된 문자열이 없는 경우 추가되지 않습니다 (values 가 비어 있거나 모든 항목이 필터링된 경우 발생할 수 있음). 위치 매개변수 하나만 전달되면 values 로 해석됩니다 (아래 참고).
|
values
|
sequence; or depset ;
default = unbound항목이 조인될 목록, 튜플 또는 디플렉스입니다. |
join_with
|
필수string.join() 와 같은 방식으로 map_each 및 format_each 을 적용하여 얻은 문자열을 결합하는 데 사용되는 구분 기호 문자열입니다.
|
map_each
|
callable; or None ;
기본값 = Noneadd_all 의 경우와 같습니다.
|
format_each
|
string; or None ;
기본값 = Noneadd_all 의 경우와 같습니다.
|
format_joined
|
string; or None ;
기본값 = None조인된 문자열에 적용되는 선택적 형식 문자열 패턴입니다. 형식 문자열에는 정확히 하나의 '%s' 자리표시자가 있어야 합니다. |
omit_if_empty
|
default = True true인 경우 조인할 문자열이 없는 경우 ( values 가 비어 있거나 모든 항목이 필터링됨) 모든 추가 처리가 중단되고 명령줄이 변경되지 않습니다. false인 경우 함께 조인할 문자열이 없더라도 두 인수, 즉 인수 이름과 빈 문자열 (0개의 문자열의 논리적 결합)이 추가됩니다.
|
uniquify
|
default = Falseadd_all 의 경우와 동일합니다.
|
expand_directories
|
default = Trueadd_all 의 경우와 동일합니다.
|
allow_closure
|
default = Falseadd_all 의 경우와 동일합니다.
|
set_param_file_format
Args Args.set_param_file_format(format)매개변수 파일의 형식을 설정합니다(사용되는 경우).
매개변수
매개변수 | 설명 |
---|---|
format
|
필수 다음 중 하나여야 합니다.
호출하지 않을 경우 형식은 기본적으로 '셸'입니다. |
use_param_file
Args Args.use_param_file(param_file_arg, *, use_always=False)인수를 매개변수 파일에 스필링하여 매개변수 파일에 대한 포인터로 바꿉니다. 인수가 시스템의 명령어 길이 제한에 비해 너무 클 때 사용합니다.
Bazel은 효율성을 위해 실행 중에 매개변수 파일을 쓰기 트리에 삭제할 수 있습니다. 작업을 디버깅 중이며 매개변수 파일을 검사하려면 --materialize_param_files
를 빌드에 전달합니다.
매개변수
매개변수 | 설명 |
---|---|
param_file_arg
|
필수 '%s'가 하나인 형식 문자열. params가 params 파일에 스필되면 매개변수 파일의 경로로 형식이 지정된 이 문자열로 구성된 인수로 대체됩니다. 예를 들어 인수가 매개변수 파일 'params.txt'에 있는 경우 '--file=%s'를 지정하면 작업 명령줄에 '--file=params.txt'가 포함됩니다. |
use_always
|
default = False 항상 매개변수를 매개변수 파일로 스필링할지 여부입니다. false인 경우 bazel은 시스템과 인수 길이에 따라 인수를 스필링할지 결정합니다. |