작업에 전이 종속 항목에서 누적된 값이 포함된 큰 명령줄이 필요한 경우가 많습니다. 예를 들어 링커 명령줄은 링크되는 모든 라이브러리에 필요한 모든 객체 파일을 나열할 수 있습니다. 이러한 전이 데이터는 여러 대상에서 공유할 수 있도록 depset
에 저장하는 것이 좋습니다. 그러나 규칙 작성자가 작업 명령줄을 생성하기 위해 이러한 depset을 문자열 목록으로 변환해야 한다면 이 메모리 공유 최적화가 무효화됩니다.
이러한 이유로 작업 구성 함수는 문자열 외에도 Args
객체도 허용합니다. 각 Args
객체는 문자열과 디코딩 세트의 연결을 나타내며, 데이터 조작을 위한 선택적 변환이 있습니다. Args
객체는 명령줄을 계산할 때가 되면 실행 단계까지 캡슐화된 depset을 처리하지 않습니다. 이렇게 하면 분석 단계가 완료될 때까지 비용이 많이 드는 복사를 지연하는 데 도움이 됩니다. 자세한 내용은 실적 최적화 페이지를 참조하세요.
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
매개변수)을 사용할 때 형식 템플릿은 문자열의 %
대체와 같은 방식으로 해석됩니다. 단, 템플릿에 대체 자리표시자가 정확히 1개 있어야 하고 %s
여야 합니다. 리터럴 백분율은 %%
로 이스케이프 처리할 수 있습니다. 위와 같이 값이 문자열로 변환된 후에 서식이 적용됩니다.
각 add*()
메서드에는 추가 위치 매개변수, 즉 나머지 인수 앞에 삽입할 '인수 이름' 문자열을 허용하는 대체 형식이 있습니다. 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 ;
default = Nonevalue 의 문자열화된 버전에 적용할 형식 문자열 패턴입니다.
|
add_all
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항목이 추가될 목록, 튜플 또는 depset입니다. |
map_each
|
callable; or None ;
default = None각 항목을 0개 이상의 문자열로 변환하는 함수로, 추가하기 전에 추가로 처리할 수 있습니다. 이 매개변수를 제공하지 않으면 표준 변환이 사용됩니다. 함수에는 한 개 또는 두 개의 위치 인수(변환할 항목, 선택적 반환 값의 유형은 항목에 생성될 인수의 수에 따라 다릅니다.
None 를 반환하는 것은 각각 길이 1 또는 길이 0의 목록을 반환하는 것과 같은 효과가 있습니다. 그러나 불필요한 목록을 만들지 않는 것이 더 효율적이고 읽기 쉽습니다.일반적으로 디렉터리인 항목은 대규모 분석 단계 데이터 구조를 의도치 않게 실행 단계에서 보관하지 않으려면 최상위 경고: |
format_each
|
string; or None ;
default = Nonemap_each 함수에서 반환된 각 문자열에 적용되는 선택적 형식 문자열 패턴. 형식 문자열에는 정확히 하나의 '%s' 자리표시자가 있어야 합니다.
|
before_each
|
string; or None ;
default = Nonevalues 에서 파생된 각 인수가 추가되기 전에 추가할 문자열입니다(선택사항).
|
omit_if_empty
|
default = True true인 경우 추가할 values 에서 파생된 인수가 없으면 모든 추가 처리가 억제되고 명령줄이 변경되지 않습니다. false인 경우 인수 이름과 terminate_with (제공된 경우)는 다른 인수가 있는지 여부와 관계없이 계속 추가됩니다.
|
uniquify
|
default = False true인 경우 values 에서 파생된 중복 인수는 생략됩니다. 각 인수에서 처음 발견된 값만 남습니다. 보통은 depset에서 중복을 생략하기 때문에 이 기능이 필요하지 않지만, 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항목이 조인될 목록, 튜플 또는 depset. |
join_with
|
필수map_each 및 format_each 를 적용하여 얻은 문자열을 string.join() 와 같은 방식으로 조인하는 데 사용되는 구분 기호 문자열입니다.
|
map_each
|
callable; or None ;
default = Noneadd_all 와 동일합니다.
|
format_each
|
string; or None ;
default = Noneadd_all 와 동일합니다.
|
format_joined
|
string; or None ;
default = 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
|
필수 다음 중 하나여야 합니다.
호출되지 않으면 형식은 기본적으로 'shell'로 설정됩니다. |
use_param_file
Args Args.use_param_file(param_file_arg, *, use_always=False)인수를 매개변수 파일에 분산하여 매개변수 파일을 가리키는 포인터로 대체합니다. 인수가 시스템의 명령어 길이 제한에 비해 너무 클 수 있는 경우에 사용합니다.
Bazel은 효율성을 위해 실행 중에 매개변수 파일을 출력 트리에 쓰지 않도록 선택할 수 있습니다. 작업을 디버깅하는 중이고 매개변수 파일을 검사하려면 빌드에 --materialize_param_files
를 전달합니다.
매개변수
매개변수 | 설명 |
---|---|
param_file_arg
|
필수 단일 '%s'가 포함된 형식 문자열입니다. 인수가 매개변수 파일에 스필링되면 매개변수 파일의 경로로 형식이 지정된 이 문자열로 구성된 인수로 대체됩니다. 예를 들어 인수가 매개변수 파일 'params.txt'에 스필링된 경우 '--file=%s'를 지정하면 작업 명령줄에 '--file=params.txt'가 포함됩니다. |
use_always
|
default = False 인수를 항상 매개변수 파일에 스필링할지 여부입니다. false인 경우 bazel은 시스템 및 인수 길이를 기준으로 인수를 스필해야 하는지 결정합니다. |