이 페이지에서는 Windows에서 Bazel을 사용하기 위한 권장사항을 다룹니다. 설치용 자세한 안내는 Windows에 Bazel 설치를 참조하세요.
알려진 문제
Windows 관련 Bazel 문제는 'team-Windows'로 표시됩니다. GitHub에 있는 '마지막'처럼 여기에서 미해결 문제를 확인할 수 있습니다.
권장사항
긴 경로 문제 방지
Windows에서 MSVC 컴파일러를 비롯한 일부 도구에는 최대 경로 길이 제한이 있습니다. 이 문제가 발생하지 않도록 --output_user_root 플래그를 사용하여 Bazel용 짧은 출력 디렉터리를 지정할 수 있습니다.
예를 들어 bazelrc 파일에 다음 줄을 추가합니다.
startup --output_user_root=C:/tmp
8.3 파일 이름 지원 사용 설정
Bazel이 긴 파일 경로에 짧은 이름 버전을 만들려고 합니다. 하지만 이렇게 하려면 긴 경로를 가진 파일이 있는 볼륨에 대해 8.3 파일 이름 지원을 활성화해야 합니다. 다음 명령어를 실행하여 모든 볼륨에서 8.3 이름 생성을 사용 설정할 수 있습니다.
fsutil 8dot3name set 0
심볼릭 링크 지원 사용 설정
일부 기능의 경우 Bazel이 Windows에서 파일 심볼릭 링크를 만들 수 있어야 합니다. 배포를 사용 설정하거나 개발자 모드 (Windows 10 버전 1703 이상) 또는 관리자로 Bazel을 실행하여 할 수 있습니다. 이를 통해 다음 기능을 사용할 수 있습니다.
더 쉽게 하려면 bazelrc 파일에 다음 줄을 추가합니다.
startup --windows_enable_symlinks
build --enable_runfiles
참고: Windows에서 심볼릭 링크를 만드는 것은 비용이 많이 드는 작업입니다. --enable_runfiles
플래그는 많은 양의 파일 심볼릭 링크를 만들 수 있습니다. 이 기능은 필요할 때만 사용 설정하세요.
Bazel 실행: MSYS2 셸, 명령 프롬프트, PowerShell 비교
권장사항: 명령어 프롬프트 (cmd.exe
) 또는 다음 위치에서 Bazel을 실행하세요.
PowerShell.
2020년 1월 15일부터는 bash
에서 Bazel을 실행하지 마세요.
MSYS2 셸, Git Bash, Cygwin 또는 기타 Bash 변형에서 가져옴 Bazel은
대부분의 사용 사례에서 작동할 수 있지만 일부는 다음과 같이 손상됩니다.
MSYS2에서 Ctrl+C로 빌드 중단).
또한 MSYS2에서 실행하려면 MSYS2의
자동 경로 변환, 그렇지 않은 경우 MSYS가 명령줄 인수 변환
Windows 경로로 연결되는 Unix 경로 (예: //foo:bar
) 모습 자세한 내용은
이 StackOverflow 답변
참조하세요.
Bash 없이 Bazel 사용 (MSYS2)
Bash 없이 bazel 빌드 사용
1.0 이전의 Bazel 버전에서는 Bash가 몇 가지 규칙을 빌드해야 했습니다.
Bazel 1.0부터는 다음과 같은 경우를 제외하고 Bash 없이 모든 규칙을 만들 수 있습니다.
genrule
: genrule이 Bash 명령어를 실행하기 때문입니다.sh_binary
또는sh_test
규칙, 기본적으로 Bash가 필요하기 때문ctx.actions.run_shell()
또는ctx.resolve_command()
를 사용하는 Starlark 규칙
그러나 genrule
는 종종 다음과 같은 간단한 작업에 사용됩니다.
파일 복사하기
또는 텍스트 파일 작성을 할 수 있습니다.
genrule
(Bash에 따라 다름)를 사용하는 대신 적절한 규칙을 찾을 수 있습니다.
를
bazel-skylib 저장소에 있습니다.
Windows에서 빌드할 때 이러한 규칙에는 Bash가 필요하지 않습니다.
Bash 없이 bazel 테스트 사용
1.0 이전의 Bazel 버전에서는 Bash가 무엇이든 bazel test
해야 했습니다.
Bazel 1.0부터는 다음과 같은 경우를 제외하고 Bash 없이 모든 규칙을 테스트할 수 있습니다.
--run_under
를 사용하는 경우- 테스트 규칙 자체에 Bash가 필요함 (실행 파일이 셸 스크립트이기 때문)
Bash 없이 bazel 실행 사용
1.0 이전의 Bazel 버전에서는 Bash가 무엇이든 bazel run
해야 했습니다.
Bazel 1.0부터는 다음과 같은 경우를 제외하고 Bash 없이 모든 규칙을 실행할 수 있습니다.
--run_under
또는--script_path
를 사용하는 경우- 테스트 규칙 자체에 Bash가 필요함 (실행 파일이 셸 스크립트이기 때문)
shbinary 및 sh* 규칙과 Bash 없이 ctx.actions.run_shell() 사용
sh_*
규칙을 빌드 및 테스트하고 Starlark를 빌드 및 테스트하려면 Bash가 필요합니다.
ctx.actions.run_shell()
및 ctx.resolve_command()
규칙을 사용합니다. 이
프로젝트의 규칙뿐 아니라
저장소도 만들 수 있습니다 (전이적으로도 가능).
향후에는 윈도우즈 하위 시스템을 사용하는 옵션이 Linux (WSL)를 사용하여 이러한 규칙을 구축해야 하지만 현재는 Bazel-on-Windows 하위팀
환경 변수 설정
Windows 명령 프롬프트 (cmd.exe
)에서 설정한 환경 변수는
실행할 수 있습니다 새 cmd.exe
을(를) 시작하는 경우
변수를 다시 설정합니다 cmd.exe
가 시작될 때 항상 변수를 설정하려면 다음을 실행합니다.
Control Panel >
System Properties > Advanced > Environment Variables...
대화상자에서 사용자 변수 또는 시스템 변수에 추가할 수 있습니다.
Windows에서 빌드
MSVC를 사용하여 C++ 빌드
MSVC를 사용하여 C++ 대상을 빌드하려면 다음이 필요합니다.
(선택사항)
BAZEL_VC
및BAZEL_VC_FULL_VERSION
환경 변수입니다.Bazel은 시스템에서 Visual C++ 컴파일러를 자동으로 감지합니다. Bazel에 특정 VC 설치를 사용하도록 지시하려면 환경 변수에 적용됩니다.
Visual Studio 2017 및 2019의 경우
BAZEL_VC
중 하나를 설정합니다. 또한BAZEL_VC_FULL_VERSION
를 설정할 수도 있습니다.BAZEL_VC
: Visual C++ 빌드 도구 설치 디렉터리set BAZEL_VC=C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC
BAZEL_VC_FULL_VERSION
(선택사항) Visual Studio 2017 및 2019, 전체 버전만 해당 비주얼 C++ 빌드 도구 번호 정확한 Visual C++ 빌드 도구 선택 가능 둘 이상의 버전이 설치된 경우BAZEL_VC_FULL_VERSION
를 통해 버전 관리, 그렇지 않으면 Bazel을 통해 설치 최신 버전을 선택합니다set BAZEL_VC_FULL_VERSION=14.16.27023
Visual Studio 2015 및 이전 버전의 경우
BAZEL_VC
를 설정합니다. (BAZEL_VC_FULL_VERSION
은 지원되지 않음)BAZEL_VC
: Visual C++ 빌드 도구 설치 디렉터리set BAZEL_VC=C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC
Windows SDK를 사용하는 것이 좋습니다.
Windows SDK에는 빌드 시 필요한 헤더 파일과 라이브러리가 포함되어 있습니다. Bazel 자체를 비롯한 Windows 애플리케이션 기본적으로 설치된 최신 Windows SDK는 사용됩니다.
BAZEL_WINSDK_FULL_VERSION
를 설정하여 Windows SDK 버전을 지정할 수도 있습니다. 나 10.0.10240.0과 같은 전체 Windows 10 SDK 번호를 사용하거나 8.1을 지정하여 Windows 8.1 SDK (Windows 8.1 SDK의 한 버전만 사용 가능) 지정된 Windows SDK가 설치되었습니다.요구사항: VC 2017 및 2019에서 지원됩니다. 독립형 VC 2015 빌드 도구는 Windows SDK 선택을 지원하지 않으려면 Visual Studio 2015 전체를 설치해야 하며, 그렇지 않은 경우
BAZEL_WINSDK_FULL_VERSION
은(는) 무시됩니다.set BAZEL_WINSDK_FULL_VERSION=10.0.10240.0
모든 항목이 설정되었다면 이제 C++ 타겟을 빌드할 수 있습니다.
Google의 샘플 중 하나를 사용하여 타겟을 만들어 보세요. 프로젝트:
bazel build //examples/cpp:hello-world
bazel-bin\examples\cpp\hello-world.exe
기본적으로 빌드된 바이너리는 x64 아키텍처를 대상으로 합니다. 다른 포드를 지정하려면
대상 아키텍처를 사용하려면 대상 아키텍처에 --cpu
빌드 옵션을 설정하세요.
* x64 (기본값): --cpu=x64_windows
또는 옵션 없음
* x86: --cpu=x64_x86_windows
* ARM: --cpu=x64_arm_windows
* ARM64: --cpu=arm64_windows
예를 들어 ARM 아키텍처용 타겟을 빌드하려면 다음을 실행합니다.
bazel build //examples/cpp:hello-world --cpu=x64_arm_windows
동적으로 연결된 라이브러리 (DLL 파일)를 빌드하고 사용하려면 이 예시를 참조하세요.
명령줄 길이 제한:
Windows 명령줄 길이 제한 문제,
--features=compiler_param_file
를 통해 컴파일러 매개변수 파일 기능을 사용 설정합니다.
Clang으로 C++ 빌드
0.29.0부터 Bazel은 LLVM의 MSVC 호환 컴파일러 드라이버 (clang-cl.exe
)를 사용한 빌드를 지원합니다.
요구사항: Clang을 사용하여 빌드하려면 다음을 모두 설치해야 합니다.
LLVM 및 Visual C++ 빌드 도구,
clang-cl.exe
를 컴파일러로 사용하지만 여전히
Visual C++ 라이브러리.
Bazel은 시스템에서 LLVM 설치를 자동으로 감지할 수 있습니다.
BAZEL_LLVM
로 LLVM을 설치하는 Bazel
BAZEL_LLVM
: LLVM 설치 디렉터리set BAZEL_LLVM=C:\Program Files\LLVM
C++ 빌드를 위해 Clang 도구 모음을 사용 설정하는 데는 여러 가지 상황이 있습니다.
bazel 0.28 이하: Clang이 지원되지 않습니다.
--incompatible_enable_cc_toolchain_resolution
가 없는 경우: 빌드 플래그--compiler=clang-cl
를 사용하여 Clang 도구 모음을 사용 설정할 수 있습니다.--incompatible_enable_cc_toolchain_resolution
사용:BUILD file
에 플랫폼 타겟을 추가해야 합니다 (예: 최상위BUILD
파일).platform( name = "x64_windows-clang-cl", constraint_values = [ "@platforms//cpu:x86_64", "@platforms//os:windows", "@bazel_tools//tools/cpp:clang-cl", ], )
다음 두 가지 방법 중 하나로 Clang 도구 모음을 사용 설정할 수 있습니다.
- 다음 빌드 플래그를 지정합니다.
--extra_toolchains=@local_config_cc//:cc-toolchain-x64_windows-clang-cl --extra_execution_platforms=//:x64_windows-clang-cl
WORKSPACE
파일에 플랫폼 및 도구 모음을 등록합니다.
register_execution_platforms( ":x64_windows-clang-cl" ) register_toolchains( "@local_config_cc//:cc-toolchain-x64_windows-clang-cl", )
--incompatible_enable_cc_toolchain_resolution 플래그는 향후 Bazel 릴리스에서 기본적으로 사용 설정될 예정입니다. 따라서 두 번째 접근 방식으로 Clang 지원을 사용 설정하는 것이 좋습니다.
Java 빌드
Java 타겟을 빌드하려면 다음이 필요합니다.
Windows에서 Bazel은 java_binary
규칙에 대해 두 개의 출력 파일을 빌드합니다.
.jar
파일- JVM의 환경을 설정하고 바이너리를 실행할 수 있는
.exe
파일
Google의 샘플 중 하나를 사용하여 타겟을 만들어 보세요. 프로젝트:
bazel build //examples/java-native/src/main/java/com/example/myproject:hello-world
bazel-bin\examples\java-native\src\main\java\com\example\myproject\hello-world.exe
Python 빌드
Python 대상을 빌드하려면 다음이 필요합니다.
Windows에서 Bazel은 py_binary
규칙에 대해 두 개의 출력 파일을 빌드합니다.
- 자동 압축 해제 ZIP 파일
- Python 인터프리터를 시작할 수 있는 실행 파일이 인수로 자동 압축 해제 ZIP 파일
실행 파일 (확장자가 .exe
있음)을 실행하거나
Python: 자동 압축 해제 zip 파일을 인수로 사용합니다.
Google의 샘플 중 하나를 사용하여 타겟을 만들어 보세요. 프로젝트:
bazel build //examples/py_native:bin
bazel-bin\examples\py_native\bin.exe
python bazel-bin\examples\py_native\bin.zip
Bazel이 Python 타겟을 빌드하는 방법에 대해 Windows의 경우, 이 디자인을 문서를 참조하세요.