Bazel은 많은 옵션을 허용합니다. 몇 가지 옵션 (예: --subcommands
)은 자주 변하지만 여러 빌드 (예: --package_path
)에서 동일하게 유지되는 옵션도 있습니다. 모든 빌드(및 기타 명령어)에 변경되지 않은 옵션을 지정하지 않으려면 구성 파일인 .bazelrc
에서 옵션을 지정하면 됩니다.
.bazelrc
파일은 어디에 있나요?
Bazel은 아래에 표시된 순서대로 선택적 위치에서 구성 파일을 찾습니다. 옵션은 이 순서대로 해석되므로 이후 파일의 옵션은 충돌이 발생할 경우 이전 파일의 값을 재정의할 수 있습니다. 로드되는 파일을 제어하는 모든 옵션은 시작 옵션입니다. 즉, bazel
다음에, 명령어 앞에 있어야 합니다 (build
, test
등).
시스템 RC 파일(
--nosystem_rc
이 없는 경우)경로:
- Linux/macOS/Unixes:
/etc/bazel.bazelrc
- Windows의 경우:
%ProgramData%\bazel.bazelrc
이 파일이 존재하지 않으면 오류가 아닙니다.
다른 시스템 지정 위치가 필요하면 커스텀 Bazel 바이너리를 빌드하여
//src/main/cpp:option_processor
에서BAZEL_SYSTEM_BAZELRC_PATH
값을 재정의해야 합니다. 시스템 지정 위치에는 Unix의${VAR_NAME}
또는 Windows의%VAR_NAME%
와 같은 환경 변수 참조가 포함될 수 있습니다.- Linux/macOS/Unixes:
작업공간 RC 파일(
--noworkspace_rc
이 없는 경우)경로: 기본
WORKSPACE
파일 옆의 작업공간 디렉터리에 있는.bazelrc
.이 파일이 존재하지 않으면 오류가 아닙니다.
홈 RC 파일(
--nohome_rc
이 없는 경우)경로:
- Linux/macOS/Unixes:
$HOME/.bazelrc
- Windows:
%USERPROFILE%\.bazelrc
(있는 경우) 또는%HOME%/.bazelrc
이 파일이 존재하지 않으면 오류가 아닙니다.
- Linux/macOS/Unixes:
사용자 지정 RC 파일(
--bazelrc=file
로 지정된 경우)이 플래그는 선택사항이지만 여러 번 지정할 수도 있습니다.
/dev/null
는 모든 추가--bazelrc
가 무시됨을 나타냅니다. 이 버전은 출시 빌드에서와 같이 사용자 rc 파일 검색을 사용 중지하는 데 유용합니다.예:
--bazelrc=x.rc --bazelrc=y.rc --bazelrc=/dev/null --bazelrc=z.rc
x.rc
및y.rc
를 읽습니다.z.rc
는 이전/dev/null
으로 인해 무시됩니다.
Bazel은 이 선택적 구성 파일 외에도 전역 rc 파일을 찾습니다. 자세한 내용은 전역 bazelrc 섹션을 참조하세요.
.bazelrc
구문 및 시맨틱스
모든 UNIX 'rc' 파일과 마찬가지로 .bazelrc
파일은 줄 기반 문법이 포함된 텍스트 파일입니다. 빈 줄과 #
(주석)로 시작하는 줄은 무시됩니다. 각 줄에는 Bourne 셸과 동일한 규칙에 따라 토큰화된 일련의 단어가 포함됩니다.
가져오기
import
또는 try-import
으로 시작하는 행은 특별합니다. 다른 'rc' 파일을 로드하는 데 사용됩니다. 작업공간 루트를 기준으로 상대적인 경로를 지정하려면 import %workspace%/path/to/bazelrc
을 작성합니다.
import
과 try-import
의 차이점은 import
된 파일이 누락되거나 읽을 수 없는 경우 Bazel이 실패하지만 try-import
된 경우 Bazel이 실패한다는 것입니다. 파일을 엽니다.
가져오기 우선순위:
- 가져온 파일의 옵션은 import 문 앞에 지정된 옵션보다 우선 적용됩니다.
- import 문 이후에 지정된 옵션은 가져온 파일의 옵션보다 우선 적용됩니다.
- 나중에 가져온 파일 옵션이 이전에 가져온 파일보다 우선 적용됩니다.
옵션 기본값
대부분의 bazelrc 행은 기본 옵션 값을 정의합니다. 각 행의 첫 번째 단어는 이러한 기본값이 적용되는 시점을 지정합니다.
startup
: 명령어 앞에 나오는 시작 옵션으로,bazel help startup_options
에 설명되어 있습니다.common
: 모든 Bazel 명령어에 적용되는 옵션입니다.command
: 옵션이 적용되는build
또는query
과 같은 Bazel 명령어입니다. 이러한 옵션은 지정된 명령어에서 상속되는 모든 명령어에도 적용됩니다. 예를 들어test
는build
에서 상속됩니다.
이러한 각 줄은 두 번 이상 사용될 수 있으며 첫 번째 단어 다음에 오는 인수는 한 줄에 표시된 것처럼 결합됩니다. 'Swiss army knife' 명령줄 인터페이스가 있는 또 다른 도구인 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 파일 내에서 우선순위는 특이성에 따라 달라집니다. 더 구체적인 명령어의 행은 덜 구체적인 명령어의 행보다 우선합니다.
구체성은 상속으로 정의됩니다. 일부 명령어는 다른 명령어의 옵션을 상속하므로 상속 명령어가 기본 명령어보다 더 구체적입니다. 예를 들면 다음과 같습니다.
test
로부터build
명령어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
,cquery
,aquery
coverage
은test
에서 상속됩니다.
- 모든 명령어는
같은 특이도의 동일한 명령어에 대한 옵션을 지정하는 두 행은 파일 내에 나타나는 순서대로 파싱됩니다.
이 우선순위 규칙은 파일 순서와 일치하지 않으므로 rc 파일 내에서 우선순위 순서를 따르면 쉽게 읽을 수 있습니다. 맨 위에 있는
common
옵션으로 시작하고 가장 구체적인 명령어까지 끝납니다. 하단에 표시합니다. 이렇게 하면 옵션을 읽는 순서가 적용되는 순서와 동일하므로 더 직관적입니다.
rc 파일 행에 지정된 인수에는 빌드 대상의 이름과 같이 옵션이 아닌 인수가 포함될 수 있습니다. 이는 같은 파일에 지정된 옵션과 마찬가지로 명령줄의 동위 요소보다 우선순위가 낮으며 항상 비옵션 인수의 명시적 목록 앞에 옵니다.
--config
옵션 기본값을 설정하는 것 외에 rc 파일을 사용하여 옵션을 그룹화하고 일반적인 그룹화를 위한 간단한 방법을 제공할 수 있습니다. 이렇게 하려면 명령어에 :name
서픽스를 추가합니다. 이러한 옵션은 기본적으로 무시되지만, --config=name
또는 명령줄에 있는 경우 .bazelrc
파일에 포함되고 다른 파일 내부에도 반복적으로 포함됩니다. 구성 정의. command:name
에서 지정한 옵션은 위에 설명된 우선순위 순으로 해당 명령어에 대해서만 확장됩니다.
--config=foo
는 rc 파일 '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 파일
- $workspace/tools/bazel.rc
에 있는 Workspace rc 파일
- $HOME/.bazelrc
에 현지화된 홈 rc 파일
여기에 나열된 각 bazelrc 파일에는 이를 사용 중지하는 데 사용할 수 있는 해당 플래그가 있습니다 (예: --nosystem_rc
, --noworkspace_rc
, --nohome_rc
). --ignore_all_rc_files
시작 옵션을 전달하여 Bazel에서 모든 bazelrcs를 무시하도록 할 수도 있습니다.