इस पेज में, Windows पर Basel का इस्तेमाल करने के सबसे सही तरीके बताए गए हैं. इंस्टॉल करने के लिए निर्देशों के मुताबिक, Windows पर Basel को इंस्टॉल करें लेख देखें.
पहले से मालूम समस्याएं
Windows से जुड़ी Basel की समस्याएं "team-Windows" के साथ मार्क होती हैं GitHub पर लेबल है. समस्याओं को ठीक किया गया है.
सबसे सही तरीके
लंबे पाथ से जुड़ी समस्याओं से बचें
Windows पर कुछ टूल की संख्यात्मक विश्लेषण की सीमा तय होती है. इनमें MSVC कंपाइलर भी शामिल है. इस समस्या का सामना करने से बचने के लिए, --output_user_root फ़्लैग की मदद से बेज़ल के लिए एक छोटी आउटपुट डायरेक्ट्री तय की जा सकती है.
उदाहरण के लिए, अपनी baazrc फ़ाइल में यह लाइन जोड़ें:
startup --output_user_root=C:/tmp
फ़ाइल नाम 8.3 की सुविधा देता है
Baज़ल, लंबे फ़ाइल पाथ के लिए, छोटे नाम का वर्शन बनाने की कोशिश करता है. हालांकि, ऐसा करने के लिए 8.3 फ़ाइल नाम से जुड़ी सहायता की सुविधा उस वॉल्यूम के लिए चालू होनी चाहिए जिसमें लंबे पाथ वाली फ़ाइल मौजूद है. आप निम्न आदेश चलाकर सभी वॉल्यूम में 8.3 नाम बनाना सक्षम कर सकते हैं:
fsutil 8dot3name set 0
सिमलिंक की सुविधा चालू करें
कुछ सुविधाओं के लिए ज़रूरी है कि Windows पर फ़ाइल सिमलिंक बना पाए, या तो चालू करके डेवलपर मोड (Windows 10 के 1703 या इसके बाद के वर्शन पर) या एडमिन के तौर पर Basel का इस्तेमाल करके. इससे ये सुविधाएं चालू हो जाती हैं:
इसे आसान बनाने के लिए, अपनी baazrc फ़ाइल में ये लाइनें जोड़ें:
startup --windows_enable_symlinks
build --enable_runfiles
ध्यान दें: Windows पर सिमलिंक बनाना एक महंगी प्रक्रिया है. --enable_runfiles
फ़्लैग की मदद से, बहुत ज़्यादा फ़ाइल सिमलिंक बनाए जा सकते हैं. इस सुविधा को सिर्फ़ तब चालू करें, जब आपको इसकी ज़रूरत हो.
रनिंग Baज़र: MSYS2 शेल बनाम कमांड प्रॉम्प्ट बनाम PowerShell
सुझाव: कमांड प्रॉम्प्ट (cmd.exe
) या कमांड प्रॉम्प्ट से Baज़र को चलाएं
PowerShell.
15-01-2020 तक, bash
से Basel को न चलाएं -- या तो
MSYS2 शेल, Git Bash या Cyगin या किसी अन्य Bash वैरिएंट से कॉपी किया जा सकता है. हालांकि बेज़ल
ज़्यादातर मामलों में काम कर सकता है, लेकिन कुछ चीज़ें ठीक से काम नहीं करतीं, जैसे कि
MSYS2 से Ctrl+C का इस्तेमाल करके बिल्ड में रुकावट डालना).
साथ ही, अगर आपको MSYS2 के तहत चलाना है, तो आपको MSYS2
का इस्तेमाल न करने पर MSYS कमांड लाइन आर्ग्युमेंट को बदल देगा.
जो Windows पाथ में यूनिक्स पाथ (जैसे कि //foo:bar
) की तरह दिखते हैं. यहां जाएं:
StackOverflow का यह जवाब
देखें.
बैश के बिना बेज़ल का इस्तेमाल करना (MSYS2)
बैश के बिना बेज़ल बिल्ड का इस्तेमाल किया जा रहा है
1.0 से पहले के Basel वर्शन में, Bash के इस्तेमाल के लिए कुछ नियम बनाना ज़रूरी था.
Baze 1.0 की शुरुआत के साथ, Bash के बिना कोई भी नियम बनाया जा सकता है. ऐसा तब तक किया जा सकता है, जब तक:
genrule
, क्योंकि genrules, Bash कमांड को एक्ज़ीक्यूट करते हैंsh_binary
याsh_test
नियम लागू करता है, क्योंकि इन्हें बैश की ज़रूरत है- स्टारलार्क नियम जो
ctx.actions.run_shell()
याctx.resolve_command()
का इस्तेमाल करता है
हालांकि, genrule
का इस्तेमाल अक्सर कुछ आसान कामों के लिए किया जाता है, जैसे कि
फ़ाइल कॉपी करना
या टेक्स्ट फ़ाइल लिखना.
genrule
का इस्तेमाल करने के बजाय (बैश के हिसाब से) आपको सही नियम दिख सकता है
में
baज़ल-skylib रिपॉज़िटरी.
Windows पर बने होने पर, इन नियमों के लिए Bash की ज़रूरत नहीं है.
बैश के बिना बेज़ल टेस्ट का इस्तेमाल करना
1.0 से पहले के Baज़ल वर्शन के लिए, Bash को bazel test
करना ज़रूरी था.
Basel 1.0 के बाद के वर्शन में, Bash के बिना किसी भी नियम की जांच की जा सकती है. हालांकि, इन मामलों में ऐसा नहीं किया जा सकता:
- आप
--run_under
का इस्तेमाल करती हैं - जांच के नियम के लिए Bash की ज़रूरत होती है, क्योंकि इसका एक्ज़ीक्यूटेबल एक शेल स्क्रिप्ट है
बैश के बिना बेज़ल रन का इस्तेमाल किया जा रहा है
1.0 से पहले के Baज़ल वर्शन के लिए, Bash को bazel run
करना ज़रूरी था.
Basel 1.0 के साथ शुरू करते हुए, Bash के बिना कोई भी नियम चलाया जा सकता है. हालांकि, इन मामलों में ऐसा नहीं होगा:
- आप
--run_under
या--script_path
का इस्तेमाल करते/करती हैं - जांच के नियम के लिए Bash की ज़रूरत होती है, क्योंकि इसका एक्ज़ीक्यूटेबल एक शेल स्क्रिप्ट है
sh_binary और sh_* नियमों और बैश के बिना ctx.action.run_shell() का इस्तेमाल करना
आपको sh_*
के नियमों को बनाने और टेस्ट करने के साथ-साथ Starlark को बनाने और टेस्ट करने के लिए Bash की ज़रूरत है
ctx.actions.run_shell()
और ctx.resolve_command()
का इस्तेमाल करने वाले नियम. यह
न सिर्फ़ आपके प्रोजेक्ट के नियमों पर लागू होता है, बल्कि बाहरी
यह डेटा स्टोर करने की उन जगहों पर निर्भर करता है जिन पर आपका प्रोजेक्ट निर्भर करता है. भले ही, वे ट्रांज़िट स्थिति में हों.
आने वाले समय में, Windows Subsystem का इस्तेमाल करने का विकल्प उपलब्ध हो सकता है इन नियमों को बनाने के लिए Linux (WSL) है, लेकिन फ़िलहाल यह Windows पर पढ़ाने के लिए बनाया गया था.
एनवायरमेंट वैरिएबल सेट करना
Windows Command Prompt (cmd.exe
) में सेट किए गए एनवायरमेंट वैरिएबल सिर्फ़
सेट करने में मदद मिलेगी. नया cmd.exe
शुरू करने पर, आपको ये काम करने होंगे
वैरिएबल को फिर से सेट करें. cmd.exe
के शुरू होने पर, वैरिएबल को हमेशा सेट करने के लिए
उन्हें Control Panel >
System Properties > Advanced > Environment Variables...
डायलॉग बॉक्स के उपयोगकर्ता वैरिएबल या सिस्टम वैरिएबल में जोड़ सकता है.
Windows पर बनाएं
MSVC के साथ C++ बनाएं
MSVC से C++ टारगेट बनाने के लिए, आपको इनकी ज़रूरत होगी:
(ज़रूरी नहीं)
BAZEL_VC
औरBAZEL_VC_FULL_VERSION
एनवायरमेंट वैरिएबल.Baज़र, आपके सिस्टम पर Visual C++ कंपाइलर का अपने-आप पता लगा लेता है. बेज़ल को किसी खास वीसी इंस्टॉलेशन इस्तेमाल करने का निर्देश देने के लिए, ये एनवायरमेंट वैरिएबल:
विज़ुअल स्टूडियो 2017 और 2019 के लिए,
BAZEL_VC
में से किसी एक को सेट करें. इसके अलावा,BAZEL_VC_FULL_VERSION
को भी सेट किया जा सकता है.BAZEL_VC
Visual C++ Build Tools इंस्टॉल करने की डायरेक्ट्रीset BAZEL_VC=C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC
BAZEL_VC_FULL_VERSION
(ज़रूरी नहीं) सिर्फ़ Visual Studio 2017 और 2019 के लिए, फ़ुल वर्शन आपके विज़ुअल C++ बिल्ड टूल की संख्या कितनी है. विज़ुअल C++ बिल्ड टूल चुना जा सकता है एक से ज़्यादा वर्शन इंस्टॉल होने परBAZEL_VC_FULL_VERSION
से होकर रिलीज़ होने वाला वर्शन, अन्यथा Basel का वर्शन सबसे नया वर्शन चुनेगा.set BAZEL_VC_FULL_VERSION=14.16.27023
Visual Studio 2015 या उससे पहले के वर्शन के लिए,
BAZEL_VC
सेट करें. (BAZEL_VC_FULL_VERSION
का इस्तेमाल नहीं किया जा सकता.)BAZEL_VC
Visual C++ Build Tools इंस्टॉल करने की डायरेक्ट्रीset BAZEL_VC=C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC
-
Windows SDK टूल में ऐसी हेडर फ़ाइलें और लाइब्रेरी होती हैं जिनकी आपको ज़रूरत होती है Windows ऐप्लिकेशन, जिसमें खुद Basel शामिल है. डिफ़ॉल्ट रूप से, Windows SDK का नया वर्शन इंस्टॉल होने पर इस्तेमाल नहीं किया जा सकता.
BAZEL_WINSDK_FULL_VERSION
सेट करके, Windows SDK टूल का वर्शन भी तय किया जा सकता है. आपने लोगों तक पहुंचाया मुफ़्त में Windows 10 SDK टूल के पूरे नंबर का इस्तेमाल किया जा सकता है, जैसे कि 10.0.10240.0 या Windows 8.1 का इस्तेमाल करने के लिए, 8.1 डालें SDK टूल (Windows 8.1 SDK टूल का सिर्फ़ एक वर्शन उपलब्ध है). कृपया पक्का करें कि आपने Windows SDK टूल इंस्टॉल किया गया.ज़रूरी शर्त: यह VC 2017 और 2019 के साथ काम करता है. स्टैंडअलोन VC 2015 Build Tools में ये काम नहीं करते अगर आपको Windows SDK टूल चुनना है, तो आपको पूरी तरह से Visual Studio 2015 इंस्टॉल करना होगा, वरना
BAZEL_WINSDK_FULL_VERSION
को अनदेखा कर दिया जाएगा.set BAZEL_WINSDK_FULL_VERSION=10.0.10240.0
अगर सब कुछ सेट अप हो जाता है, तो अभी C++ टारगेट बनाया जा सकता है!
हमारे किसी सैंपल की मदद से, टारगेट ऑडियंस बनाकर देखें प्रोजेक्ट:
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
डाइनैमिक रूप से लिंक की गई लाइब्रेरी (डीएलएल फ़ाइलें) बनाने और उनका इस्तेमाल करने के लिए, यह उदाहरण के लिए.
कमांड लाइन की लंबाई की सीमा:
Windows कमांड लाइन की लंबाई की सीमा से जुड़ी समस्या,
--features=compiler_param_file
की मदद से कंपाइलर पैरामीटर फ़ाइल की सुविधा चालू करें.
Clang की मदद से C++ बनाएं
बेज़ल, 0.29.0 से, LLVM के MSVC के साथ काम करने वाले कंपाइलर ड्राइवर (clang-cl.exe
) के साथ बिल्डिंग बनाने की सुविधा देता है.
ज़रूरी शर्त: Clang के साथ बनाने के लिए, आपको दोनों इंस्टॉल करने होंगे
LLVM और विज़ुअल C++ बिल्ड टूल.
क्योंकि भले ही आप clang-cl.exe
का इस्तेमाल कंपाइलर के तौर पर करते हैं, लेकिन फिर भी आपको
विज़ुअल C++ लाइब्रेरी.
Basel आपके सिस्टम पर एलएलवीएम इंस्टॉलेशन का अपने-आप पता लगा सकता है या आप साफ़ तौर पर बता सकते हैं
Basel जहां LLVM को BAZEL_LLVM
ने इंस्टॉल किया है.
एलएलवीएम इंस्टॉलेशन डायरेक्ट्री
BAZEL_LLVM
set BAZEL_LLVM=C:\Program Files\LLVM
C++ बनाने के लिए, Clang टूलचेन को चालू करने के कई तरीके हैं.
बैज 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
- अपनी
MODULE.bazel
फ़ाइल में प्लैटफ़ॉर्म और टूलचेन को रजिस्टर करें:
register_execution_platforms( ":x64_windows-clang-cl" ) register_toolchains( "@local_config_cc//:cc-toolchain-x64_windows-clang-cl", )
--incompatible_enable_cc_toolchain_resolution फ़्लैग को, आने वाले समय में Basel की रिलीज़ में, डिफ़ॉल्ट रूप से चालू करने के लिए प्लान किया गया है. इसलिए, हमारा सुझाव है कि दूसरे तरीके से Clang के लिए सहायता चालू करें.
Java बनाएं
Java टारगेट बनाने के लिए, आपको इनकी ज़रूरत होगी:
Windows पर, Baze, java_binary
नियमों के लिए दो आउटपुट फ़ाइलें बनाता है:
- एक
.jar
फ़ाइल - एक
.exe
फ़ाइल, जो JVM के लिए एनवायरमेंट सेट अप कर सकती है और बाइनरी चला सकती है
हमारे किसी सैंपल की मदद से, टारगेट ऑडियंस बनाकर देखें प्रोजेक्ट:
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 पर, Baze, py_binary
नियमों के लिए दो आउटपुट फ़ाइलें बनाता है:
- एक सेल्फ़-एक्सट्रैक्टिंग ज़िप फ़ाइल
- एक ऐसी एक्ज़ीक्यूटेबल फ़ाइल है जो Python अनुवादक को ज़िप फ़ाइल को तर्क के तौर पर खुद निकालें
आप या तो एक्ज़ीक्यूटेबल फ़ाइल चला सकते हैं (इसका एक्सटेंशन .exe
है) या आप इसे चला सकते हैं
आर्ग्युमेंट के तौर पर, अपने-आप एक्सट्रैक्ट होने वाली ZIP फ़ाइल वाला Python.
हमारे किसी सैंपल की मदद से, टारगेट ऑडियंस बनाकर देखें प्रोजेक्ट:
bazel build //examples/py_native:bin
bazel-bin\examples\py_native\bin.exe
python bazel-bin\examples\py_native\bin.zip
अगर आपको यह जानना है कि Ba जानना, Python टारगेट कैसे बनाता है Windows के लिए, यह डिज़ाइन देखें दस्तावेज़ में दिया गया है.