일반적인 정의

문제 신고 소스 보기

이 섹션에서는 여러 함수 또는 빌드 규칙에 공통적으로 사용되는 다양한 용어와 개념을 정의합니다.

목차

Bourne 셸 토큰화

일부 규칙의 특정 문자열 속성은 Bourne 셸의 토큰화 규칙에 따라 여러 단어로 분할됩니다. 따옴표로 묶이지 않은 공백은 개별 단어를 구분하며 작은따옴표와 큰따옴표 문자와 백슬래시는 토큰화를 방지하기 위해 사용됩니다.

이 토큰화의 대상이 되는 속성은 이 문서의 정의에 명시적으로 표시되어 있습니다.

'Make' 변수 확장 및 Bourne 셸 토큰화가 적용되는 속성은 일반적으로 컴파일러 및 기타 도구에 임의의 옵션을 전달하는 데 사용됩니다. 이러한 속성의 예로는 cc_library.coptsjava_library.javacopts가 있습니다. 이러한 대체를 함께 사용하면 단일 문자열 변수를 구성별 옵션 단어 목록으로 확장할 수 있습니다.

라벨 확장

매우 적은 수의 규칙의 일부 문자열 속성에는 라벨 확장이 적용됩니다. 문자열에 유효한 라벨(예: //mypkg:target)이 포함되어 있고 이 라벨이 현재 규칙의 선언된 전제 조건인 경우 대상 //mypkg:target가 나타내는 파일의 경로 이름으로 확장됩니다.

속성의 예로는 genrule.cmdcc_binary.linkopts가 있습니다. 관련 라벨의 확장 여부, 여러 파일로 확장되는 라벨이 처리되는 방식 등 각 경우에 세부정보는 크게 다를 수 있습니다. 구체적인 내용은 규칙 속성 문서를 참고하세요.

대부분의 빌드 규칙에서 정의하는 일반적인 속성

이 섹션에서는 전부는 아니지만 많은 빌드 규칙에서 정의하는 속성을 설명합니다.

속성 설명
data

라벨 목록. 기본값은 []입니다.

런타임 시 이 규칙에 필요한 파일입니다. 파일 또는 규칙 대상을 나열할 수 있습니다. 일반적으로 모든 대상을 허용합니다.

data 속성에 있는 타겟의 기본 출력 및 실행 파일은 이 타겟으로 출력되거나 이 타겟의 런타임 종속 항목이 있는 실행 파일의 *.runfiles 영역에 표시되어야 합니다. 여기에는 이 타겟의 srcs가 실행될 때 사용되는 데이터 파일이나 바이너리가 포함될 수 있습니다. 데이터 파일을 사용하고 사용하는 방법에 관한 자세한 내용은 데이터 종속 항목 섹션을 참고하세요.

새 규칙은 런타임에 다른 입력을 사용할 수 있는 입력을 처리하는 경우 data 속성을 정의해야 합니다. 규칙의 구현 함수는 data 속성의 출력과 실행 파일뿐만 아니라 소스 코드 또는 런타임 종속 항목을 제공하는 종속 항목 속성의 실행 파일에서 대상의 실행 파일을 채워야 합니다.

deps

라벨 목록. 기본값은 []입니다.

이 타겟의 종속 항목입니다. 일반적으로 규칙 대상만 나열해야 합니다. 일부 규칙은 파일을 deps에 직접 나열할 수 있지만, 가능하면 피해야 합니다.

언어별 규칙은 일반적으로 나열된 대상을 특정 제공업체가 있는 대상으로 제한합니다.

deps를 사용하여 대상이 다른 대상에 종속된다는 의미에 대한 정확한 의미는 규칙의 종류에 따라 다르며 규칙별 문서에서 자세히 설명합니다. 소스 코드를 처리하는 규칙의 경우 deps는 일반적으로 srcs의 코드에 사용되는 코드 종속 항목을 지정합니다.

대부분의 경우 deps 종속 항목은 한 모듈이 같은 프로그래밍 언어로 작성되고 별도로 컴파일된 다른 모듈에 정의된 기호를 사용할 수 있도록 하는 데 사용됩니다. 언어 간 종속 항목도 많은 경우에 허용됩니다. 예를 들어 java_library 타겟은 deps 속성에 후자를 나열하여 cc_library 타겟의 C++ 코드에 종속될 수 있습니다. 자세한 내용은 종속 항목 정의를 참고하세요.

licenses

문자열 목록입니다. 구성할 수 없습니다. 기본값은 ["none"]입니다.

이 특정 대상에 사용할 라이선스 유형 문자열 목록입니다. 이는 Bazel이 더 이상 사용하지 않는 지원 중단된 라이선스 API의 일부입니다. 사용하지 마세요.

srcs

라벨 목록. 기본값은 []입니다.

이 규칙에 의해 처리되거나 포함된 파일입니다. 일반적으로 파일을 직접 나열하지만 기본 출력을 포함하도록 규칙 대상 (예: filegroup 또는 genrule)을 나열할 수 있습니다.

언어별 규칙에서는 종종 나열된 파일에 특정 파일 확장자가 있어야 합니다.

모든 빌드 규칙에 공통된 속성

이 섹션에서는 모든 빌드 규칙에 암시적으로 추가되는 속성을 설명합니다.

속성 설명
compatible_with

라벨 목록, 구성할 수 없음, 기본값은 []입니다.

기본 지원 환경 외에 이 대상을 빌드할 수 있는 환경 목록입니다.

이는 Bazel의 제약조건 시스템의 일부로서 사용자가 서로 종속될 수 있는 대상과 종속될 수 없는 대상을 선언할 수 있게 해줍니다. 예를 들어 외부에 배포 가능한 바이너리는 회사 보안 비밀 코드가 있는 라이브러리에 종속되면 안 됩니다. 자세한 내용은 ConstraintSemantics를 참조하세요.

deprecation

문자열. 구성할 수 없음, 기본값은 None입니다.

이 타겟과 관련된 설명 경고 메시지입니다. 일반적으로 대상이 더 이상 사용되지 않거나, 다른 규칙으로 대체되었거나, 패키지에 속해 있거나, 어떤 이유로든 유해한 것으로 간주될 수 있음을 사용자에게 알리는 데 사용됩니다. 메시지를 피하기 위해 어떤 변경사항이 필요한지 쉽게 확인할 수 있도록 참조 (예: 웹페이지, 버그 번호, 이전 CL 예시)를 포함하는 것이 좋습니다. 감소 대체용으로 사용할 수 있는 새 대상이 있는 경우 이전 대상의 모든 사용자를 이전하는 것이 좋습니다.

이 속성은 빌드 방식에는 영향을 미치지 않지만 빌드 도구의 진단 출력에는 영향을 줄 수 있습니다. 빌드 도구는 deprecation 속성이 있는 규칙이 다른 패키지의 타겟에 의해 종속되면 경고를 표시합니다.

내부 패키지 종속 항목은 이 경고에서 제외되므로 지원 중단된 규칙의 테스트를 빌드해도 경고가 발생하지 않습니다.

지원 중단된 대상이 지원 중단된 다른 대상에 종속된 경우에는 경고 메시지가 표시되지 않습니다.

일단 사람들이 사용을 중단하면 표적을 제거할 수 있습니다.

distribs

문자열 목록입니다. 구성할 수 없습니다. 기본값은 []입니다.

이 특정 대상에 사용할 배포 방법 문자열 목록입니다. 이는 Bazel이 더 이상 사용하지 않는 지원 중단된 라이선스 API의 일부입니다. 사용하지 마세요.

exec_compatible_with

라벨 목록, 구성할 수 없음, 기본값은 []입니다.

이 타겟의 실행 플랫폼에 있어야 하는 constraint_values의 목록입니다. 이는 규칙 유형에서 이미 설정한 제약 조건에 추가됩니다. 제약 조건은 사용 가능한 실행 플랫폼 목록을 제한하는 데 사용됩니다. 자세한 내용은 도구 모음 해결에 관한 설명을 참고하세요.

exec_properties

문자열 사전입니다. 기본값은 {}입니다.

이 타겟용으로 선택된 플랫폼의 exec_properties에 추가될 문자열 사전입니다. platform 규칙의 exec_properties를 참고하세요.

키가 플랫폼 및 타겟 수준 속성에 모두 존재하는 경우 타겟에서 값을 가져옵니다.

features

feature 문자열 목록. 기본값은 []입니다.

기능은 대상에서 사용 설정하거나 사용 중지할 수 있는 문자열 태그입니다. 특성의 의미는 규칙 자체에 따라 다릅니다.

features 속성은 패키지 수준 features 속성과 결합됩니다. 예를 들어 ['a', 'b'] 기능이 패키지 수준에서 사용 설정되고 대상의 features 속성에 ['-a', 'c']가 포함된 경우 규칙에 사용 설정된 기능은 'b' 및 'c'가 됩니다. 예시 보기

restricted_to

라벨 목록, 구성할 수 없음, 기본값은 []입니다.

기본 지원 환경 대신 이 대상을 빌드할 수 있는 환경 목록입니다.

이는 Bazel의 제약 조건 시스템의 일부입니다. 자세한 내용은 compatible_with를 참고하세요.

tags

문자열 목록입니다. 구성할 수 없습니다. 기본값은 []입니다.

태그는 모든 규칙에 사용할 수 있습니다. 테스트 및 test_suite 규칙의 태그는 테스트를 분류하는 데 유용합니다. 테스트 대상이 아닌 대상의 태그genruleStarlark 작업의 샌드박스 실행을 제어하고 사람 또는 외부 도구에 의한 파싱에 사용됩니다.

Bazel은 테스트 또는 genrule 타겟의 tags 속성이나 Starlark 작업의 execution_requirements 키에서 다음과 같은 키워드를 발견하면 샌드박스 코드의 동작을 수정합니다.

  • no-sandbox 키워드를 사용하면 작업 또는 테스트가 샌드박스 처리되지 않습니다. 여전히 캐시되거나 원격으로 실행될 수 있습니다. no-cache 또는 no-remote를 사용하여 둘 중 하나 또는 둘 다 방지합니다.
  • no-cache 키워드가 있으면 작업 또는 테스트가 로컬 또는 원격으로 캐시되지 않습니다. 참고: 이 태그의 목적상 디스크 캐시는 로컬 캐시로 간주되지만 HTTP 및 gRPC 캐시는 원격으로 간주됩니다. Skyframe 또는 영구 작업 캐시와 같은 다른 캐시는 영향을 받지 않습니다.
  • no-remote-cache 키워드를 사용하면 작업 또는 테스트가 원격으로 캐시되지 않습니다 (그러나 로컬에 캐시될 수 있으며 원격으로 실행될 수도 있음). 참고: 이 태그의 목적상 디스크 캐시는 로컬 캐시로 간주되지만 HTTP 및 gRPC 캐시는 원격으로 간주됩니다. Skyframe 또는 영구 작업 캐시와 같은 다른 캐시는 영향을 받지 않습니다. 로컬 디스크 캐시와 원격 캐시의 조합 (복합된 캐시)을 사용하면 원격 캐시로 취급되며 --incompatible_remote_results_ignore_disk를 설정하지 않으면 로컬 구성요소가 사용됩니다.
  • no-remote-exec 키워드를 사용하면 작업 또는 테스트가 원격으로 실행되지 않습니다 (그러나 원격으로 캐시될 수 있음).
  • no-remote 키워드는 작업 또는 테스트가 원격으로 실행되지 않거나 원격으로 캐시되지 않도록 합니다. 이는 no-remote-cacheno-remote-exec를 모두 사용하는 것과 같습니다.
  • no-remote-cache-upload 키워드는 생성의 원격 캐싱의 업로드 부분을 사용 중지합니다. 원격 실행이 비활성화되지는 않습니다.
  • local 키워드는 작업 또는 테스트가 원격으로 캐시되거나, 원격으로 실행되거나, 샌드박스 내에서 실행되지 못하도록 합니다. genrules와 테스트의 경우 local = True 속성으로 규칙을 표시하면 같은 효과가 있습니다.
  • requires-network 키워드는 샌드박스 내부에서 외부 네트워크로의 액세스를 허용합니다. 이 태그는 샌드박스가 사용 설정된 경우에만 효과가 있습니다.
  • block-network 키워드는 샌드박스 내부에서 외부 네트워크로의 액세스를 차단합니다. 이 경우 localhost와의 통신만 허용됩니다. 이 태그는 샌드박스가 사용 설정된 경우에만 효과가 있습니다.
  • requires-fakeroot는 테스트 또는 작업을 uid 및 gid 0 (즉, 루트 사용자)으로 실행합니다. 이 기능은 Linux에서만 지원됩니다. 이 태그는 --sandbox_fake_username 명령줄 옵션보다 우선합니다.

테스트의 태그는 일반적으로 디버그 및 출시 프로세스에서 테스트의 역할을 주석 처리하는 데 사용됩니다. 일반적으로 태그는 런타임 주석 기능이 없는 C++ 및 Python 테스트에 가장 유용합니다. 태그 및 크기 요소를 사용하여 코드베이스 체크인 정책을 기반으로 테스트 모음을 유연하게 조합할 수 있습니다.

Bazel은 테스트 규칙의 tags 속성에서 다음 키워드를 발견하면 테스트 실행 동작을 수정합니다.

  • exclusive는 다른 테스트가 동시에 실행되지 않도록 테스트를 '독점' 모드로 강제 실행합니다. 이러한 테스트는 모든 빌드 활동과 비독점 테스트가 완료된 후 직렬 방식으로 실행됩니다. Bazel이 원격 머신에서 실행 중인 항목을 제어할 수 없기 때문에 이러한 테스트에서는 원격 실행이 사용 중지됩니다.
  • exclusive-if-local는 테스트가 로컬에서 실행되는 경우 '독점' 모드로 강제 실행되지만 원격으로 실행되는 경우 테스트를 병렬로 실행합니다.
  • manual 키워드는 build, test, coverage 명령어에 대해 빌드/실행할 최상위 대상 집합을 계산할 때 테스트를 명시적으로 나열하지 않는 대상 패턴 와일드 카드(..., :*, :all 등) 및 test_suite 규칙의 확장에서 대상을 제외합니다. query 명령어를 비롯한 다른 컨텍스트의 타겟 와일드 카드 또는 테스트 모음 확장에는 영향을 미치지 않습니다. manual는 타겟이 연속 빌드/테스트 시스템에 의해 자동으로 빌드/실행되어서는 안 된다는 것을 의미하지 않습니다. 예를 들어 특정 Bazel 플래그가 필요하지만 올바르게 구성된 사전 제출 또는 지속적 테스트 실행에는 계속 포함하는 대상을 bazel test ...에서 제외하는 것이 좋을 수 있습니다.
  • external 키워드는 --cache_test_results 값과 관계없이 테스트가 무조건 실행되도록 강제합니다.
테스트 대상에 연결된 태그에 관한 추가 규칙은 테스트 백과사전의 태그 규칙을 참고하세요.
target_compatible_with

라벨 목록. 기본값은 []입니다.

이 타겟이 호환되는 것으로 간주되려면 타겟 플랫폼에 있어야 하는 constraint_value의 목록입니다. 이는 규칙 유형에서 이미 설정한 제약 조건에 추가됩니다. 타겟 플랫폼이 나열된 모든 제약조건을 충족하지 않으면 타겟은 incompatible 것으로 간주됩니다. 호환되지 않는 대상은 대상 패턴이 확장될 때 빌드 및 테스트를 위해 건너뜁니다(예: //..., :all). 명령줄에서 명시적으로 지정된 경우 호환되지 않는 대상으로 인해 Bazel이 오류를 출력하고 빌드 또는 테스트 실패가 발생합니다.

호환되지 않는 타겟에 전이적으로 종속되는 타겟은 그 자체가 호환되지 않는 것으로 간주됩니다. 빌드 및 테스트용으로도 건너뜁니다.

빈 목록 (기본값)은 타겟이 모든 플랫폼과 호환됨을 나타냅니다.

작업공간 규칙을 제외한 모든 규칙은 이 속성을 지원합니다. 일부 규칙에서는 이 속성이 효과가 없습니다. 예를 들어 cc_toolchaintarget_compatible_with를 지정하는 것은 유용하지 않습니다.

호환되지 않는 타겟 건너뛰기에 관한 자세한 내용은 플랫폼 페이지를 참고하세요.

testonly

부울, 구성 불가능. 기본값은 False입니다(테스트 및 테스트 묶음 타겟 제외).

True인 경우 테스트 전용 타겟 (예: 테스트)만 이 타겟에 종속될 수 있습니다.

마찬가지로 testonly이 아닌 규칙은 testonly인 규칙에 종속될 수 없습니다.

테스트 (*_test 규칙) 및 테스트 모음 (test_suite 규칙)은 기본적으로 testonly입니다.

이 속성은 프로덕션으로 출시된 바이너리에 대상이 포함되면 안 된다는 것을 의미하기 위한 것입니다.

test는 런타임이 아닌 빌드 시간에만 적용되고 종속 항목 트리를 통해 급속도로 전파되므로 신중하게 적용해야 합니다. 예를 들어 단위 테스트에 유용한 스텁 및 모조 객체는 프로덕션에 출시될 동일한 바이너리를 포함하는 통합 테스트에 유용할 수 있으므로 테스트 전용으로 표시하면 안 됩니다. 반대로 정상 동작을 무조건 재정의하기 때문에 연결하는 것이 위험한 규칙은 테스트 전용으로 표시해야 합니다.

toolchains

라벨 목록, 구성할 수 없음, 기본값은 []입니다.

이 타겟이 액세스할 수 있는 Make variables가 있는 타겟의 집합입니다. 이러한 대상은 TemplateVariableInfo를 제공하는 규칙의 인스턴스이거나 Bazel에 빌드된 도구 모음 유형을 위한 특수 대상입니다. 여기에는 다음이 포함됩니다.

  • @bazel_tools//tools/cpp:current_cc_toolchain
  • @bazel_tools//tools/jdk:current_java_runtime

이는 플랫폼 종속 구성에 대한 규칙 구현에서 사용하는 도구 모음 확인 개념과는 다릅니다. 이 속성은 타겟에서 사용할 특정 cc_toolchainjava_toolchain를 결정하는 데 사용할 수 없습니다.

visibility

라벨 목록. 구성 불가. 기본값은 지정된 경우 패키지default_visibility, 그렇지 않은 경우 "//visibility:private"입니다.

타겟의 visibility 속성은 타겟을 다른 패키지에서 사용할 수 있는지를 제어합니다. 공개 상태에 대한 문서를 참조하세요.

모든 테스트 규칙에 공통된 속성 (*_test)

이 섹션에서는 모든 테스트 규칙에 공통된 속성을 설명합니다.

속성 설명
args

문자열 목록. $(location)'Makevariable' 대체 및 Bourne 셸 토큰화가 적용됨. 기본값은 []입니다.

Bazel이 bazel test로 실행될 때 대상에 전달하는 명령줄 인수입니다.

이러한 인수는 bazel test 명령줄에서 --test_arg 값 전에 전달됩니다.

env

문자열의 사전으로, 값은 $(location)"Makevariable" 대체가 적용됩니다. 기본값은 {}입니다.

bazel test로 테스트가 실행될 때 설정할 추가 환경 변수를 지정합니다.

이 속성은 cc_test, py_test, sh_test와 같은 네이티브 규칙에만 적용됩니다. Starlark에서 정의한 테스트 규칙에는 적용되지 않습니다. 자체 Starlark 규칙의 경우 'env' 속성을 추가하고 이 속성을 사용하여 TestEnvironment 공급자를 채울 수 있습니다.

env_inherit

문자열 목록. 기본값은 []입니다.

bazel test로 테스트가 실행될 때 외부 환경에서 상속할 추가 환경 변수를 지정합니다.

이 속성은 cc_test, py_test, sh_test와 같은 네이티브 규칙에만 적용됩니다. Starlark에서 정의한 테스트 규칙에는 적용되지 않습니다.

size

문자열 "enormous", "large", "medium" 또는 "small", 구성 불가능. 기본값은 "medium"입니다.

테스트 대상의 '무거움', 즉 실행해야 하는 시간/리소스의 양을 지정합니다.

단위 테스트는 '소형' 테스트, 통합 테스트는 '중간' 테스트, 엔드 투 엔드 테스트는 '대형' 또는 '대규모'로 간주됩니다. Bazel은 크기를 사용하여 기본 시간 제한을 결정하며, timeout 속성을 사용하여 재정의할 수 있습니다. 제한 시간은 각 개별 테스트가 아닌 BUILD 타겟의 모든 테스트에 적용됩니다. 테스트가 로컬에서 실행되는 경우 size가 예약 목적으로 추가로 사용됩니다. Bazel은 --local_{ram,cpu}_resources를 준수하려고 하며 동시에 많은 고부하 테스트를 실행하여 로컬 머신에 부담을 주지 않으려고 합니다.

테스트 크기는 다음 기본 제한 시간 및 가정된 최대 로컬 리소스 사용량에 해당합니다.

크기 RAM (MB) CPU (CPU 코어) 기본 제한 시간
small 20 1 단편 (1분)
중간 100 1 보통 (5분)
대형 300 1 장편 (15분)
거대한 800 1 Eternal (60분)

환경 변수 TEST_SIZE는 테스트를 생성할 때 이 속성 값으로 설정됩니다.

timeout

문자열 "short", "moderate", "long" 또는 "eternal", 구성 불가능. 기본값은 테스트의 size 속성에서 파생됩니다.

반환하기 전에 테스트를 실행할 것으로 예상되는 시간입니다.

테스트의 크기 속성은 리소스 추정을 제어하지만 테스트의 제한 시간은 독립적으로 설정할 수 있습니다. 명시적으로 지정되지 않은 경우 제한 시간은 테스트 크기를 기준으로 합니다. 예를 들어 느리다고 알려진 특정 조건에서 실행되는 경우와 같이 테스트 제한 시간은 --test_timeout 플래그를 사용하여 재정의할 수 있습니다. 테스트 제한 시간 값은 다음 기간에 해당합니다.

제한 시간 값 기간
short 1분
보통 5분
long 15분
영원한 60분

위의 경우가 아닌 경우 테스트 제한 시간은 --test_timeout bazel 플래그로 재정의할 수 있습니다(예: 느리다고 알려진 조건에서 수동으로 실행하는 경우). --test_timeout 값은 초 단위입니다. 예를 들어 --test_timeout=120은 테스트 제한 시간을 2분으로 설정합니다.

환경 변수 TEST_TIMEOUT은 테스트를 생성할 때 테스트 제한 시간 (초)으로 설정됩니다.

flaky

부울, 구성 불가, 기본값은 False

테스트를 불안정한 것으로 표시합니다.

이 옵션을 설정하면 테스트를 최대 3회까지 실행하고 매번 실패하는 경우에만 실패로 표시합니다. 기본적으로 이 속성은 False로 설정되며 테스트는 한 번만 실행됩니다. 이 속성은 일반적으로 사용하지 않는 것이 좋습니다. 어설션이 유지되면 테스트는 안정적으로 통과해야 합니다.

shard_count

50 이하의 음이 아닌 정수입니다. 기본값은 -1입니다.

테스트를 실행하는 데 사용할 병렬 샤드 수를 지정합니다.

이 값을 설정하면 테스트를 실행할 병렬 샤드 수를 결정하는 데 사용되는 휴리스틱이 재정의됩니다. 일부 테스트 규칙의 경우 애초에 샤딩을 사용 설정하기 위해 이 매개변수가 필요할 수 있습니다. --test_sharding_strategy도 참조하세요.

테스트 샤딩을 사용 설정하면 테스트 생성 시 환경 변수 TEST_TOTAL_SHARDS 이 이 값으로 설정됩니다.

샤딩하려면 테스트 실행기가 테스트 샤딩 프로토콜을 지원해야 합니다. 그렇지 않으면 모든 샤드에서 모든 테스트를 실행할 가능성이 높지만 이는 원치 않는 작업입니다.

샤딩에 관한 자세한 내용은 테스트 백과사전의 테스트 샤딩을 참고하세요.

local

부울, 구성 불가, 기본값은 False

샌드박스 없이 테스트를 로컬에서 실행하도록 강제합니다.

이를 True로 설정하는 것은 'local'을 태그(tags=["local"])로 제공하는 것과 같습니다.

모든 바이너리 규칙에 공통된 속성 (*_binary)

이 섹션에서는 모든 바이너리 규칙에 공통적인 속성을 설명합니다.

속성 설명
args

문자열 목록. $(location)'Makevariable' 대체 및 Bourne 셸 토큰화 적용, 구성 불가. 기본값은 []입니다.

Bazel이 run 명령어를 통해 또는 테스트로 실행될 때 대상에 전달할 명령줄 인수입니다. 이러한 인수는 bazel run 또는 bazel test 명령줄에 지정된 인수보다 먼저 전달됩니다.

참고: Bazel 외부에서 타겟을 실행할 때 (예: bazel-bin/에서 바이너리를 수동으로 실행) 인수가 전달되지 않습니다.

env

문자열의 사전으로, 값은 $(location)"Makevariable" 대체가 적용됩니다. 기본값은 {}입니다.

대상이 bazel run에 의해 실행될 때 설정할 추가 환경 변수를 지정합니다.

이 속성은 cc_binary, py_binary, sh_binary와 같은 네이티브 규칙에만 적용됩니다. Starlark에서 정의한 실행 규칙에는 적용되지 않습니다.

참고: Bazel 외부에서 대상을 실행하는 경우 (예: bazel-bin/에서 바이너리를 수동으로 실행) 환경 변수가 설정되지 않습니다.

output_licenses

문자열 목록. 기본값은 []입니다.

이 바이너리가 생성하는 출력 파일의 라이선스입니다. 이는 Bazel이 더 이상 사용하지 않는 지원 중단된 라이선스 API의 일부입니다. 사용하지 마세요.

구성 가능한 속성

대부분의 속성은 '구성 가능'합니다. 즉, 타겟이 다른 방식으로 빌드될 때 값이 변경될 수 있습니다. 특히 구성 가능한 속성은 Bazel 명령줄에 전달된 플래그 또는 타겟을 요청하는 다운스트림 종속 항목에 따라 달라질 수 있습니다. 예를 들어 여러 플랫폼 또는 컴파일 모드에 맞게 타겟을 맞춤설정하는 데 사용할 수 있습니다.

다음 예에서는 타겟 아키텍처마다 다른 소스를 선언합니다. bazel build :multiplatform_lib --cpu x86를 실행하면 x86_impl.cc를 사용하여 타겟이 빌드되며, --cpu arm를 대체하면 arm_impl.cc가 대신 사용됩니다.

cc_library(
    name = "multiplatform_lib",
    srcs = select({
        ":x86_mode": ["x86_impl.cc"],
        ":arm_mode": ["arm_impl.cc"]
    })
)
config_setting(
    name = "x86_mode",
    values = { "cpu": "x86" }
)
config_setting(
    name = "arm_mode",
    values = { "cpu": "arm" }
)

select() 함수는 타겟 구성이 충족하는 config_setting 또는 constraint_value 기준에 따라 구성 가능한 속성의 여러 대체 값 중에서 선택합니다.

Bazel은 매크로를 처리한 후, 규칙을 처리하기 전에 (엄밀히 말해 로드 및 분석 단계 사이) 구성 가능한 속성을 평가합니다. select() 평가 이전의 모든 처리는 select()가 어떤 브랜치를 선택하는지 알 수 없습니다. 예를 들어 매크로는 선택된 브랜치를 기반으로 동작을 변경할 수 없으며 bazel query는 타겟의 구성 가능한 종속 항목에 관해서만 보수적으로 추측할 수 있습니다. 규칙 및 매크로와 함께 select()를 사용하는 방법에 관한 자세한 내용은 이 FAQ를 참조하세요.

문서에 nonconfigurable로 표시된 속성은 이 기능을 사용할 수 없습니다. 일반적으로 Bazel이 select() 해결 방법을 결정하기 전에 Bazel이 속성 값을 알아야 하기 때문에 속성은 구성할 수 없습니다.

자세한 개요는 구성 가능한 빌드 속성을 참조하세요.

암시적 출력 대상

C++의 암시적 출력은 지원 중단되었습니다. 가능한 경우 다른 언어로는 사용하지 마세요. 아직 지원 중단 경로는 없지만 최종적으로는 지원 중단될 예정입니다.

BUILD 파일에서 빌드 규칙을 정의하면 이름이 지정된 새 규칙 대상을 패키지에 명시적으로 선언합니다. 또한 많은 빌드 규칙 함수에는 암시적으로 하나 이상의 출력 파일 대상이 수반되며, 이 대상의 콘텐츠와 의미가 규칙별로 다릅니다. 예를 들어 java_binary(name='foo', ...) 규칙을 명시적으로 선언하면 출력 파일 대상 foo_deploy.jar도 동일한 패키지의 멤버로 암시적으로 선언합니다. (이 특정 대상은 배포에 적합한 독립 실행형 자바 보관 파일입니다.)

암시적 출력 대상은 전역 대상 그래프의 최고 수준 구성원입니다. 다른 타겟과 마찬가지로, 최상위 빌드 명령어에 지정되거나 다른 빌드 타겟에 필요한 전제 조건인 경우 요청 시 빌드됩니다. 이는 BUILD 파일에서 종속 항목으로 참조될 수 있으며 bazel query와 같은 분석 도구의 출력에서 관찰할 수 있습니다.

각 유형의 빌드 규칙에서 규칙 문서에는 해당 종류의 규칙 선언에 수반되는 암시적 출력의 이름과 내용을 자세히 설명하는 특별한 섹션이 있습니다.

빌드 시스템에서 사용하는 두 네임스페이스 간의 중요하지만 다소 미묘한 차이점이 있습니다. 라벨대상(규칙 또는 파일일 수 있음)을 식별하고 파일 대상은 소스(또는 입력) 파일 타겟과 파생(또는 출력) 파일 타겟으로 나눌 수 있습니다. BUILD 파일에서 언급하거나 명령줄에서 빌드하거나 bazel query을 사용하여 검사할 수 있는 항목이 바로 대상 네임스페이스입니다. 각 파일 대상은 디스크에 있는 실제 파일 한 개('파일 시스템 네임스페이스')에 해당합니다. 각 규칙 대상은 디스크에 있는 실제 파일 0개 또는 1개 이상에 해당할 수 있습니다. 상응하는 타겟이 없는 파일이 디스크에 있을 수 있습니다. 예를 들어 C++ 컴파일 중에 생성된 .o 객체 파일은 BUILD 파일 내에서 또는 명령줄에서 참조할 수 없습니다. 이렇게 하면 빌드 도구가 작업 방식에 관한 특정 구현 세부정보를 숨길 수 있습니다. 자세한 내용은 빌드 개념 참조에 설명되어 있습니다.