bazelrc 구성 파일 작성

<ph type="x-smartling-placeholder"></ph> 문제 신고 소스 보기 1박 · 7.3 · 7.2 · 7.1 · 7.0 · 6.5

Bazel은 다양한 옵션을 허용합니다. 경우에 따라 자주 변경되는 옵션도 있습니다 (예: --subcommands), 다른 빌드는 여러 빌드에서 동일하게 유지됩니다 (예: --package_path). 모든 빌드에 대해 변경되지 않은 옵션을 지정하지 않기 위해 (및 다른 명령어 포함) - 구성 파일에서 .bazelrc입니다.

.bazelrc 파일은 어디에 있나요?

Bazel은 다음 위치에서 선택적 구성 파일을 찾습니다. 할 수 있습니다. 옵션은 이 순서대로 해석되므로 나중에 파일의 옵션이 이전 파일의 값을 재정의할 수 있습니다. 발생할 수 있습니다. 로드되는 파일을 제어하는 모든 옵션은 시작 옵션, 즉 bazel 다음에 발생해야 하며 를 입력합니다 (build, test 등).

  1. 시스템 RC 파일(--nosystem_rc이 없는 경우)

    경로:

    • Linux/macOS/Unixes의 경우: /etc/bazel.bazelrc
    • Windows의 경우: %ProgramData%\bazel.bazelrc

    이 파일이 존재하지 않으면 오류가 아닙니다.

    다른 시스템 지정 위치가 필요한 경우 커스텀 Bazel 바이너리: BAZEL_SYSTEM_BAZELRC_PATH 값을 //src/main/cpp:option_processor 시스템 지정 위치에는 환경 변수 참조가 포함될 수 있습니다. (예: Unix에서는 ${VAR_NAME}, Windows에서는 %VAR_NAME%)

  2. 작업공간 RC 파일(--noworkspace_rc이 없는 경우)

    경로: 작업공간 디렉터리 (기본 디렉터리 옆)의 .bazelrc WORKSPACE 파일).

    이 파일이 존재하지 않으면 오류가 아닙니다.

  3. 홈 RC 파일(--nohome_rc이 없는 경우)

    경로:

    • Linux/macOS/Unixes의 경우: $HOME/.bazelrc
    • Windows의 경우: %USERPROFILE%\.bazelrc(있는 경우) 또는 %HOME%/.bazelrc

    이 파일이 존재하지 않으면 오류가 아닙니다.

  4. 사용자 지정 RC 파일( <ph type="x-smartling-placeholder">--bazelrc=file</ph>

    이 플래그는 선택사항이지만 여러 번 지정할 수도 있습니다.

    /dev/null는 이후의 모든 --bazelrc가 무시됨을 나타냅니다. 릴리스 빌드에서와 같이 사용자 rc 파일 검색을 비활성화하는 데 유용합니다.

    예를 들면 다음과 같습니다.

    --bazelrc=x.rc --bazelrc=y.rc --bazelrc=/dev/null --bazelrc=z.rc
    
    • x.rcy.rc를 읽었습니다.
    • 이전 /dev/null로 인해 z.rc가 무시됩니다.

Bazel은 이 선택적 구성 파일 외에도 전역 rc를 찾습니다. 파일에서 참조됩니다. 자세한 내용은 전역 bazelrc 섹션을 참고하세요.

.bazelrc 구문 및 시맨틱

모든 UNIX 'rc'와 같음 .bazelrc 파일은 행 기반이 되는 텍스트 파일입니다. 문법을 따릅니다. 빈 줄과 #로 시작하는 줄 (주석)은 무시됩니다. 각 라인은 일련의 단어를 포함하며, 이 단어들은 사용하는 것을 배웠습니다.

가져오기

import 또는 try-import로 시작하는 줄은 특수 행입니다. 이를 사용하여 로드하세요. 기타 'rc' 할 수 있습니다. 작업공간 루트의 상대 경로를 지정하려면 다음 안내를 따르세요. import %workspace%/path/to/bazelrc을 작성합니다.

importtry-import의 차이점은 다음 조건 충족 시 Bazel이 실패한다는 것입니다. import 대상 파일이 누락되었거나 읽을 수 없지만 try-import 대상의 경우 그렇지 않습니다. 파일에서 참조됩니다.

가져오기 우선순위:

  • 가져온 파일의 옵션이 이전에 지정된 옵션보다 우선합니다. import 문을 엽니다.
  • import 문 다음에 지정된 옵션은 옵션을 선택합니다.
  • 나중에 가져온 파일의 옵션이 이전에 가져온 파일보다 우선 적용됩니다.

옵션 기본값

bazelrc에서 대부분의 줄은 기본 옵션 값을 정의합니다. 각 단어의 첫 단어는 줄은 이러한 기본값이 적용되는 시기를 지정합니다.

  • startup: 시작 옵션으로, 명령어 앞에 위치하며 설명됩니다. (bazel help startup_options)
  • common: 지원하는 모든 Bazel 명령어에 적용되어야 하는 옵션입니다. 있습니다. 명령이 이런 식으로 지정된 옵션을 지원하지 않는 경우, 일부 다른 Bazel 명령어에 유효한 한 무시됩니다. 이는 옵션 이름에만 적용됩니다. 현재 명령어가 지정된 이름을 가진 옵션이지만 지정된 값을 지원하지 않는 경우 실패합니다
  • always: 모든 Bazel 명령어에 적용되는 옵션입니다. 명령어가 지원하지 않는 경우 실패합니다.
  • command: Bazel 명령어(예: build 또는 query) 적용됩니다. 이 옵션은 지정할 수도 있습니다 예를 들어 testbuild에서 상속됩니다.

각 줄은 두 번 이상 사용할 수 있으며 첫 번째 단어는 마치 한 줄에 나타난 것처럼 결합됩니다. (CVS 사용자, '스위스 군용 칼'이 있는 또 다른 도구 명령줄에서 .cvsrc 구문과 유사한 문법) 예를 들어 다음 행은 다음과 같습니다.

build --test_tmpdir=/tmp/foo --verbose_failures
build --test_tmpdir=/tmp/bar

다음과 같이 결합됩니다.

build --test_tmpdir=/tmp/foo --verbose_failures --test_tmpdir=/tmp/bar

따라서 유효 플래그는 --verbose_failures--test_tmpdir=/tmp/bar입니다.

옵션 우선순위:

  • 명령줄의 옵션이 항상 rc 파일의 옵션보다 우선합니다. 예를 들어 rc 파일이 build -c opt이지만 명령줄 플래그는 -c dbg: 명령줄 플래그가 우선합니다.
  • rc 파일 내에서는 특정성에 따라 우선순위가 결정됩니다. 특정 명령이 덜 구체적인 명령의 줄보다 우선합니다.

    특수성은 상속으로 정의됩니다. 일부 명령어는 상속하는 명령어가 기본 명령어보다 더 구체적이 되고 명령어와 함께 사용하면 됩니다 예를 들어 testbuild 명령어에서 상속되므로 모든 bazel build 플래그는 bazel test에 유효하고 모든 build 행이 bazel test이며 동일한 옵션에 관한 test 줄이 없는 경우는 예외입니다. rc가 파일의 내용:

    test -c dbg --test_env=PATH
    build -c opt --verbose_failures
    

    bazel build //foo에서 -c opt --verbose_failures를 사용하고 bazel test //foo에서 --verbose_failures -c dbg --test_env=PATH를 사용합니다.

    상속 (특이성) 그래프는 다음과 같습니다.

    • 모든 명령어는 common에서 상속받습니다.
    • 다음 명령어는 에서 상속하며 이보다 더 구체적입니다. build: test, run, clean, mobile-install, info print_action, config, cqueryaquery
    • coveragetest에서 상속됨
  • 동일한 특이성으로 동일한 명령에 대한 옵션을 지정하는 두 줄은 파일 내에 나타나는 순서대로 파싱됩니다.

  • 이 우선순위 규칙은 파일 순서와 일치하지 않으므로 rc 파일 내에서 우선순위를 따르는 경우의 가독성: common 옵션은 상단에 배치하고 가장 구체적인 명령어는 클릭하면 됩니다. 이렇게 하면 옵션을 읽는 순서가 적용되는 순서와 동일하므로 더 직관적입니다.

rc 파일의 줄에 지정된 인수에는 옵션이 아니라 빌드 대상의 이름 등입니다. 예를 들어 같은 파일에 지정된 옵션은 동위 옵션보다 우선순위가 낮습니다. 를 사용하고, 항상 비 옵션 인수를 사용합니다.

--config

옵션 기본값 설정 외에도 rc 파일을 사용하여 옵션을 그룹화할 수 있습니다. 공통 그룹화의 약식을 제공합니다. 이 작업은 :name 추가할 수 있습니다 이 옵션은 기본적으로 무시되지만 --config=name 옵션이 있는 경우 포함됩니다. (명령줄 또는 .bazelrc 파일에서) 재귀적으로 다른 구성 정의가 있습니다 command:name로 지정된 옵션은 관련 명령어에 대해 위에서 설명한 우선순위 순서로 펼쳐집니다.

--config=foorc 파일 'in-place' 이렇게 하면 구성에 지정된 옵션은 --config=foo 옵션과 동일한 우선순위를 갖습니다. 있습니다.

이 구문은 startup를 사용하여 확장되지 않으며 시작 옵션. 설정 .bazelrc의 startup:config-name --some_startup_option은 무시됩니다.

다음은 ~/.bazelrc 파일의 예입니다.

# Bob's Bazel option defaults

startup --host_jvm_args=-XX:-UseParallelGC
import /home/bobs_project/bazelrc
build --show_timestamps --keep_going --jobs 600
build --color=yes
query --keep_going

# Definition of --config=memcheck
build:memcheck --strip=never --test_timeout=3600

Bazel의 동작을 제어하는 기타 파일

.bazelignore

작업공간 내에서 디렉터리를 지정할 수 있습니다. 관련 프로젝트와 같이 Bazel이 무시해야 하는 사용할 수 있습니다 이름이 지정된 작업공간의 루트에 있는 .bazelignore Bazel이 무시할 디렉터리를 행입니다. 항목은 작업공간 루트를 기준으로 합니다.

전역 bazelrc 파일

Bazel은 선택적 bazelrc 파일을 다음 순서로 읽습니다. - etc/bazel.bazelrc에 있는 시스템 rc-file - $workspace/tools/bazel.rc에 있는 작업공간 rc-file - $HOME/.bazelrc에서 로컬화된 홈 rc-file

여기에 나열된 각 bazelrc 파일에는 사용 중지에 사용할 수 있는 해당 플래그가 있습니다 (예: --nosystem_rc, --noworkspace_rc, --nohome_rc). --ignore_all_rc_files 시작 옵션을 전달하여 Bazel이 모든 bazelrcs를 무시하도록 할 수도 있습니다.