작업공간 규칙은 일반적으로 기본 저장소 외부에 있는 외부 종속 항목인 소스 코드를 가져오는 데 사용됩니다.
참고: Bazel은 기본 작업공간 규칙 외에도 다양한 Starlark 작업공간 규칙, 특히 웹에서 호스팅되는 Git 저장소 또는 아카이브를 처리하는 규칙을 삽입합니다.
규칙
바인드
규칙 소스 보기bind(name, actual, compatible_with, deprecation, distribs, features, licenses, restricted_to, tags, target_compatible_with, testonly, visibility)
경고: bind() 사용은 권장되지 않습니다. 문제 및 대안에 관한 긴
논의는 "바인드 삭제 고려"를 참고하세요. 특히
repo_mapping
저장소 속성 사용을 고려하세요..
경고: select()는 bind()에서 사용할 수 없습니다. 자세한 내용은 구성 가능한 속성 FAQ를
참고하세요.
//external 패키지에 타겟의 별칭을 지정합니다.
//external 패키지는 '일반' 패키지가 아닙니다. external/ 디렉터리가 없으므로
모든 바인드된 타겟을 포함하는 '가상 패키지'로 생각할 수 있습니다.
예
타겟에 별칭을 지정하려면 bind WORKSPACE 파일에서 지정합니다. 예를 들어 java_library 타겟인 //third_party/javacc-v2이 있다고 가정해 보겠습니다. 다음과 같이
WORKSPACE 파일에 추가하여 별칭을 지정할 수 있습니다.
bind(
name = "javacc-latest",
actual = "//third_party/javacc-v2",
)
이제 타겟은
//third_party/javacc-v2 대신 //external:javacc-latest에 종속될 수 있습니다. javacc-v3이 출시되면 bind 규칙을
업데이트할 수 있으며 //external:javacc-latest에 종속된 모든 BUILD 파일은 이제
수정할 필요 없이 javacc-v3에 종속됩니다.
바인드를 사용하여 외부 저장소의 타겟을 작업공간에서 사용할 수 있도록 할 수도 있습니다.
예를 들어
@my-ssl이라는 원격 저장소가 WORKSPACE 파일에 가져와 있고 cc_library 타겟 //src:openssl-lib이 있는 경우
bind를 사용하여 이 타겟의 별칭을 만들 수 있습니다.
bind(
name = "openssl",
actual = "@my-ssl//src:openssl-lib",
)
그러면 작업공간의 BUILD 파일에서 바인드된 타겟을 다음과 같이 사용할 수 있습니다.
cc_library(
name = "sign-in",
srcs = ["sign_in.cc"],
hdrs = ["sign_in.h"],
deps = ["//external:openssl"],
)
sign_in.cc 및 sign_in.h 내에서
//external:openssl에 의해 노출된 헤더 파일은 저장소
루트를 기준으로 하는 경로를 사용하여 참조할 수 있습니다. 예를 들어 @my-ssl//src:openssl-lib의 규칙 정의가 다음과 같은 경우
cc_library(
name = "openssl-lib",
srcs = ["openssl.cc"],
hdrs = ["openssl.h"],
)
sign_in.cc'의 포함은 다음과 같습니다.
#include "sign_in.h" #include "src/openssl.h"
인수
| 속성 | |
|---|---|
name |
이름(필수) 이 타겟의 고유한 이름입니다. |
actual
|
라벨(기본값은 이 타겟은 존재해야 하지만 바인드를 포함한 모든 유형의 규칙일 수 있습니다. 이 속성이 생략되면 |
local_repository
규칙 소스 보기local_repository(name, path, repo_mapping)
로컬 디렉터리의 타겟을 바인드할 수 있습니다. 즉, 현재 저장소는 이 다른 디렉터리에 정의된 타겟을 사용할 수 있습니다. 자세한 내용은 바인드 섹션을 참고하세요.
예
현재 저장소가 ~/chat-app 디렉터리에 루트가 있는 채팅 클라이언트라고 가정해 보겠습니다. 다른 저장소인 ~/ssl에 정의된 SSL 라이브러리를 사용하려고 합니다. SSL 라이브러리에는 타겟 //src:openssl-lib이 있습니다.
사용자는 ~/chat-app/WORKSPACE에 다음 줄을 추가하여 이 타겟에 종속 항목을 추가할 수 있습니다.
local_repository(
name = "my-ssl",
path = "/home/user/ssl",
)
타겟은 이
라이브러리에 종속되도록 @my-ssl//src:openssl-lib을 종속 항목으로 지정합니다.
인수
| 속성 | |
|---|---|
name |
이름(필수) 이 타겟의 고유한 이름입니다. |
path
|
문자열(필수) 로컬 저장소 디렉터리의 경로입니다.이는 저장소의 WORKSPACE 파일이 포함된 디렉터리의 경로여야 합니다. 경로는 기본 저장소의 WORKSPACE 파일에 대해 절대적이거나 상대적일 수 있습니다. |
repo_mapping
|
사전: 문자열 -> 문자열(기본값은 예를 들어 |
new_local_repository
규칙 소스 보기new_local_repository(name, build_file, build_file_content, path, repo_mapping, workspace_file, workspace_file_content)
로컬 디렉터리를 Bazel 저장소로 전환할 수 있습니다. 즉, 현재 저장소는 파일 시스템의 어느 곳에서나 타겟을 정의하고 사용할 수 있습니다.
이 규칙은 WORKSPACE 파일과 지정된 BUILD 파일 및 경로에 대한
심볼릭 링크가 포함된 하위 디렉터리를 만들어 Bazel 저장소를 만듭니다. 빌드 파일은
path를 기준으로 타겟을 만들어야 합니다. WORKSPACE 파일과 BUILD 파일이 이미 포함된 디렉터리의 경우
local_repository 규칙을 사용할 수 있습니다.
예
현재 저장소가 ~/chat-app 디렉터리에 루트가 있는 채팅 클라이언트라고 가정해 보겠습니다. 다른 디렉터리인 ~/ssl에 정의된 SSL 라이브러리를 사용하려고 합니다.
사용자는 다음을 포함하는 SSL 라이브러리 (~/chat-app/BUILD.my-ssl)의 BUILD 파일을 만들어 종속 항목을 추가할 수 있습니다.
java_library(
name = "openssl",
srcs = glob(['*.java'])
visibility = ["//visibility:public"],
)
그런 다음 ~/chat-app/WORKSPACE에 다음 줄을 추가할 수 있습니다.
new_local_repository(
name = "my-ssl",
path = "/home/user/ssl",
build_file = "BUILD.my-ssl",
)
이렇게 하면 @my-ssl 저장소가 /home/user/ssl에 심볼릭 링크됩니다.
타겟의 종속 항목에 @my-ssl//:openssl을 추가하여 타겟이 이 라이브러리에 종속될 수 있습니다.
new_local_repository를 사용하여 디렉터리뿐만 아니라 단일 파일도 포함할 수 있습니다. 예를 들어 /home/username/Downloads/piano.jar에 jar 파일이 있다고 가정해 보겠습니다. WORKSPACE 파일에 다음을 추가하여 빌드에 해당 파일만 추가할 수 있습니다.
new_local_repository(
name = "piano",
path = "/home/username/Downloads/piano.jar",
build_file = "BUILD.piano",
)
다음 BUILD.piano 파일을 만듭니다.
java_import(
name = "play-music",
jars = ["piano.jar"],
visibility = ["//visibility:public"],
)
@piano//:play-music에 종속되어 piano.jar를 사용할 수 있습니다.
인수
| 속성 | |
|---|---|
name |
이름(필수) 이 타겟의 고유한 이름입니다. |
build_file
|
이름(기본값은 build_file 또는 build_file_content를 지정해야 합니다. 이 속성은 기본 작업공간을 기준으로 하는 라벨입니다. 파일 이름이 BUILD일 필요는 없지만 BUILD일 수도 있습니다. (BUILD.new-repo-name과 같은 이름은 저장소의 실제 BUILD 파일과 구별하는 데 유용할 수 있습니다.) |
build_file_content
|
문자열(기본값은 build_file 또는 build_file_content를 지정해야 합니다. |
path
|
문자열(필수) 로컬 파일 시스템의 경로입니다.이는 기본 저장소의 WORKSPACE 파일에 대해 절대적이거나 상대적일 수 있습니다. |
repo_mapping
|
사전: 문자열 -> 문자열(기본값은 예를 들어 |
workspace_file
|
이름(기본값은 workspace_file 또는 workspace_file_content를 지정할 수 있지만 둘 다 지정할 수는 없습니다. 이 속성은 기본 작업공간을 기준으로 하는 라벨입니다. 파일 이름이 WORKSPACE일 필요는 없지만 WORKSPACE일 수도 있습니다. (WORKSPACE.new-repo-name과 같은 이름은 저장소의 실제 WORKSPACE 파일과 구별하는 데 유용할 수 있습니다.) |
workspace_file_content
|
문자열(기본값은 workspace_file 또는 workspace_file_content를 지정할 수 있지만 둘 다 지정할 수는 없습니다. |