Bazel कई विकल्पों को स्वीकार करता है. कुछ विकल्प अक्सर अलग-अलग होते हैं (उदाहरण के लिए,
--subcommands
) जबकि अन्य बिल्ड कई बिल्ड (जैसे कि
--package_path
) में एक जैसे ही रहते हैं. हर बिल्ड (और दूसरे निर्देश) के लिए इन बिना बदले गए विकल्पों के बारे में बताने से बचने के लिए, किसी कॉन्फ़िगरेशन फ़ाइल में विकल्प बताएं जिसे .bazelrc
कहा जाता है.
.bazelrc
फ़ाइलें कहां हैं?
बेज़ल नीचे दिए गए क्रम में, इन जगहों पर वैकल्पिक कॉन्फ़िगरेशन फ़ाइलों को खोजता है. विकल्पों के बारे में इस क्रम में बताया गया है. इसलिए,
बाद में कोई समस्या होने पर, पहले वाली फ़ाइल की वैल्यू को बदला जा सकता है. इनमें से किसी भी फ़ाइल के लोड होने के विकल्प के लिए, स्टार्टअप के विकल्प दिखते हैं. इसका मतलब है कि इनका इस्तेमाल कमांड (build
, test
वगैरह) के बाद और bazel
के बाद किया जाना चाहिए.
जब तक
--nosystem_rc
मौजूद न हो, सिस्टम RC फ़ाइल.पाथ:
- Linux/macOS/Unixes पर:
/etc/bazel.bazelrc
- Windows पर:
%ProgramData%\bazel.bazelrc
अगर यह फ़ाइल मौजूद नहीं है, तो गड़बड़ी नहीं होगी.
अगर सिस्टम की तय की गई किसी दूसरी जगह की जानकारी देना ज़रूरी है, तो आपको
//src/main/cpp:option_processor
मेंBAZEL_SYSTEM_BAZELRC_PATH
वैल्यू बदलकर, एक कस्टम Bazel की बाइनरी बनानी होगी. सिस्टम की बताई गई जगह में, एनवायरमेंट वैरिएबल के रेफ़रंस हो सकते हैं, जैसे कि Unix पर${VAR_NAME}
और Windows पर%VAR_NAME%
.- Linux/macOS/Unixes पर:
फ़ाइल फ़ोल्डर की आरसी फ़ाइल, जब तक
--noworkspace_rc
मौजूद नहीं होता.पाथ:
.bazelrc
आपकी फ़ाइल फ़ोल्डर डायरेक्ट्री में (मुख्यWORKSPACE
फ़ाइल के बगल में).अगर यह फ़ाइल मौजूद नहीं है, तो गड़बड़ी नहीं होगी.
होम आरसी फ़ाइल, जब तक
--nohome_rc
मौजूद न हो.पाथ:
- Linux/macOS/Unixes पर:
$HOME/.bazelrc
- Windows पर:
%USERPROFILE%\.bazelrc
मौजूद होने पर या%HOME%/.bazelrc
अगर यह फ़ाइल मौजूद नहीं है, तो गड़बड़ी नहीं होगी.
- Linux/macOS/Unixes पर:
उपयोगकर्ता की तय की गई आरसी फ़ाइल, अगर
--bazelrc=file
के साथ बताया गया होयह फ़्लैग ज़रूरी नहीं है, लेकिन इसे एक से ज़्यादा बार भी इस्तेमाल किया जा सकता है.
/dev/null
यह बताता है कि आगे की सभी--bazelrc
को अनदेखा कर दिया जाएगा. यह उपयोगकर्ता के आरसी फ़ाइल, जैसे कि रिलीज़ बिल्ड के लिए खोज को बंद करने में मदद करता है.उदाहरण के लिए:
--bazelrc=x.rc --bazelrc=y.rc --bazelrc=/dev/null --bazelrc=z.rc
x.rc
औरy.rc
पढ़ी गई हैं.z.rc
को पिछले/dev/null
की वजह से अनदेखा किया गया है.
बेज़ल, इस वैकल्पिक कॉन्फ़िगरेशन फ़ाइल के अलावा ग्लोबल rc फ़ाइल भी खोजता है. ज़्यादा जानकारी के लिए, ग्लोबल बाज़ार सेक्शन देखें.
.bazelrc
सिंटैक्स और सिमेंटिक
सभी UNIX "rc" फ़ाइलों की तरह, .bazelrc
फ़ाइल भी लाइन-आधारित व्याकरण वाली टेक्स्ट फ़ाइल होती है. #
(टिप्पणियां) से शुरू होने वाली खाली लाइनों और पंक्तियों को अनदेखा कर दिया जाता है. हर लाइन में शब्दों का एक क्रम होता है. इन नियमों को बॉर्न शेल वाले नियमों के मुताबिक बनाया जाता है.
इंपोर्ट
import
या try-import
से शुरू होने वाली लाइनें खास होती हैं: इनका इस्तेमाल करके, "अन्य" फ़ाइलें लोड करें. फ़ाइल फ़ोल्डर के रूट से मिलता-जुलता कोई पाथ तय करने के लिए,
import %workspace%/path/to/bazelrc
लिखें.
import
और try-import
के बीच यह अंतर है कि अगर import
की फ़ाइल मौजूद नहीं है या पढ़ने की अनुमति नहीं दी जाती है, तो
बैजल बंद रहता है, लेकिन try-import
की फ़ाइल के लिए ऐसा नहीं होता.
इंपोर्ट की प्राथमिकता:
- इंपोर्ट की गई फ़ाइल में दिए गए विकल्पों को इंपोर्ट स्टेटमेंट से पहले दिए गए विकल्पों पर प्राथमिकता दी जाती है.
- इंपोर्ट के समय के बाद दिए गए विकल्पों को, इंपोर्ट की गई फ़ाइल में मौजूद विकल्पों पर प्राथमिकता दी जाती है.
- बाद में इंपोर्ट की गई फ़ाइलों के विकल्पों को, पहले इंपोर्ट की गई फ़ाइलों पर प्राथमिकता दी जाती है.
डिफ़ॉल्ट विकल्प
किसी बेज़लर्क की ज़्यादातर लाइनें, डिफ़ॉल्ट विकल्प वैल्यू तय करती हैं. हर लाइन का पहला शब्द बताता है कि डिफ़ॉल्ट कब लागू होते हैं:
startup
: स्टार्टअप विकल्प, जो कमांड से पहले जाते हैं औरbazel help startup_options
में इनके बारे में बताया गया है.common
: ऐसे सभी विकल्पों पर लागू किए जाने वाले विकल्प जो डिवाइसों के साथ काम करते हैं. अगर कोई निर्देश इस तरह से दिए गए किसी विकल्प के साथ काम नहीं करता है, तो यह विकल्प तब तक नज़रअंदाज़ किया जाता है, जब तक कि वह कुछ अन्य Bazel कमांड के लिए मान्य रहता है. ध्यान दें कि यह सिर्फ़ विकल्प के नामों पर लागू होता है: अगर मौजूदा निर्देश दिए गए नाम के साथ किसी विकल्प को स्वीकार करता है, लेकिन बताई गई वैल्यू के साथ काम नहीं करता है, तो यह फ़ेल हो जाएगा.always
: वे सभी विकल्प जो सभी बेज़ल निर्देशों पर लागू होते हैं. अगर कोई निर्देश इस तरीके से दिए गए विकल्प पर काम नहीं करता है, तो वह फ़ेल हो जाएगा.command
: बैज़ल कमांड, जैसे किbuild
याquery
, जिस पर विकल्प लागू होते हैं. ये विकल्प उन सभी निर्देशों पर भी लागू होते हैं जो तय किए गए निर्देश से इनहेरिट किए जाते हैं. (उदाहरण के लिए,test
कोbuild
से इनहेरिट किया जाता है.)
इनमें से हर लाइन का एक से ज़्यादा बार इस्तेमाल किया जा सकता है और पहले शब्द के बाद आने वाले आर्ग्युमेंट को इस तरह जोड़ दिया जाता है कि वे एक ही लाइन में दिख रहे हों. सीवीएस के उपयोगकर्ता "स्विस आर्मी चाकू" के कमांड-लाइन इंटरफ़ेस वाले दूसरे टूल को
.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
लागू होते हैं.
प्राथमिकता वाला विकल्प:
- कमांड लाइन के विकल्पों को, आरसी फ़ाइल में मौजूद विकल्पों के मुकाबले हमेशा प्राथमिकता दी जाती है.
उदाहरण के लिए, अगर किसी आरसी फ़ाइल में
build -c opt
लिखा है, लेकिन कमांड लाइन फ़्लैग-c dbg
है, तो कमांड लाइन फ़्लैग को प्राथमिकता दी जाती है. आरसी फ़ाइल में, प्राथमिकता को खास चीज़ों से नियंत्रित किया जाता है: ज़्यादा खास कमांड के लिए लाइनों को प्राथमिकता दी जाती है. वहीं, कम खास कमांड के लिए लाइनों को प्राथमिकता दी जाती है.
खासियत को इनहेरिटेंस के ज़रिए तय किया जाता है. कुछ निर्देश, दूसरे कमांड से विकल्प इनहेरिट करते हैं. इससे, बेसिंग कमांड की तुलना में इनहेरिट करने का निर्देश ज़्यादा खास हो जाता है. उदाहरण के लिए,
test
कमांड,build
कमांड से इनहेरिट की जाती है. इसलिए, सभीbazel build
फ़्लैगbazel test
के लिए मान्य होते हैं. साथ ही, सभीbuild
लाइनें तब तकbazel test
पर लागू होती हैं, जब तक एक ही विकल्प के लिएtest
लाइन न हो. अगर आरसी फ़ाइल में यह लिखा हो: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
से ज़्यादा (और ज़्यादा सटीक) हैं:build
:test
,run
,clean
,mobile-install
,info
,print_action
,config
,cquery
, औरaquery
coverage
कोtest
से इनहेरिट किया गया है
- हर निर्देश,
एक ही निर्देश के लिए एक जैसी खासियत वाले दो लाइन को पार्स किया जाता है. ये फ़ाइल में दिखने के क्रम में होते हैं.
प्राथमिकता का यह नियम, फ़ाइल के क्रम से मेल नहीं खाता है. इसलिए, अगर आप आरसी फ़ाइलों में प्राथमिकता के क्रम को फ़ॉलो करते हैं, तो पढ़ने में आसानी होती है. सबसे ऊपर
common
विकल्पों के साथ शुरू करें और फ़ाइल के सबसे नीचे, सबसे खास निर्देशों पर खत्म करें. इस तरह, विकल्पों को पढ़े जाने का क्रम और उन्हें लागू करने का क्रम भी एक जैसा रहता है.
आरसी फ़ाइल की किसी लाइन पर दिए गए आर्ग्युमेंट में वे आर्ग्युमेंट शामिल हो सकते हैं जो विकल्प नहीं हैं, जैसे कि बिल्ड टारगेट के नाम वगैरह. हालांकि, एक जैसी फ़ाइलों में दिए गए विकल्पों की तरह ही, कमांड लाइन पर मौजूद सिबलिंग की तुलना में इन्हें प्राथमिकता दी जाती है. साथ ही, इन्हें गैर-विकल्प वाले आर्ग्युमेंट की एक्सप्लिसिट सूची में पहले जोड़ा जाता है.
--config
विकल्पों की डिफ़ॉल्ट सेटिंग के अलावा, आरसी फ़ाइल का इस्तेमाल विकल्पों को ग्रुप करने के लिए और सामान्य ग्रुपिंग के लिए शॉर्टहैंड की मदद करने के लिए किया जा सकता है. ऐसा करने के लिए, निर्देश में :name
सफ़िक्स जोड़ें. इन विकल्पों को डिफ़ॉल्ट रूप से अनदेखा किया जाता है. हालांकि, इन्हें विकल्प के मौजूद होने पर या तो --config=name
.bazelrc
command:name
में दिए गए विकल्पों को सिर्फ़ लागू होने वाले निर्देशों के लिए ही बड़ा किया जाएगा. यहां ऊपर बताया गया क्रम है.
--config=foo
rc फ़ाइल "इन-प्लेस" में तय किए गए विकल्पों तक बड़ा हो जाता है, ताकि कॉन्फ़िगरेशन के लिए दिए गए विकल्पों में
--config=foo
विकल्प की प्राथमिकता एक ही हो.
इस स्टार्टअप में, स्टार्ट अप के विकल्पों को सेट करने के लिए,
startup
का इस्तेमाल नहीं किया जा सकता. startup:config-name --some_startup_option
में .bazelrc पर सेट की जाने वाली सेटिंग को अनदेखा कर दिया जाएगा.
उदाहरण
यहां एक ~/.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
बेज़ल के व्यवहार को कंट्रोल करने वाली अन्य फ़ाइलें
.bazelignore
आप फ़ाइल फ़ोल्डर में ऐसी डायरेक्ट्री तय कर सकते हैं जिन्हें आप Bazel से अनदेखा करना चाहते हैं, जैसे कि मिलते-जुलते प्रोजेक्ट जो अन्य बिल्ड सिस्टम का इस्तेमाल करते हैं. फ़ाइल फ़ोल्डर के रूट में .bazelignore
फ़ाइल रखें. साथ ही, डायरेक्ट्री में हर लाइन में एक डायरेक्ट्री को जोड़ने का विकल्प चुनें. एंट्री, फ़ाइल फ़ोल्डर के रूट से जुड़ी होती हैं.
दुनिया की ऊंचे स्तर की फ़ाइल
बेज़ल, क्रम से लगने वाली वैकल्पिक बैच फ़ाइलों को इस क्रम में पढ़ता है:
- सिस्टम rc-file, जो
etc/bazel.bazelrc
पर मौजूद है. - Workspace की आरसी-फ़ाइल,
$workspace/tools/bazel.rc
पर मौजूद है. - घर की आरसी-फ़ाइल,
$HOME/.bazelrc
में मौजूद है
यहां सूची में दी गई हर बाज़ार फ़ाइल के नाम से जुड़ा एक फ़्लैग है, जिसका इस्तेमाल करके उसे बंद किया जा सकता है (जैसे, --nosystem_rc
, --noworkspace_rc
, --nohome_rc
).
--ignore_all_rc_files
शुरू करने का विकल्प पास करके, आप बेज़ल को सभी
बैजल में शामिल नहीं कर सकते.