بازل گزینه های زیادی را می پذیرد. برخی از گزینهها اغلب تغییر میکنند (مثلاً --subcommands ) در حالی که برخی دیگر در چندین بیلد یکسان میمانند (مانند --package_path ). برای جلوگیری از تعیین این گزینه های بدون تغییر برای هر ساخت (و سایر دستورات)، می توانید گزینه هایی را در یک فایل پیکربندی به نام .bazelrc کنید.
فایل های .bazelrc کجا هستند؟
Bazel به دنبال فایل های پیکربندی اختیاری در مکان های زیر، به ترتیب نشان داده شده در زیر است. گزینهها به این ترتیب تفسیر میشوند، بنابراین گزینههای موجود در فایلهای بعدی میتوانند در صورت بروز تضاد، مقداری از فایل قبلی را لغو کنند. تمام گزینههایی که کنترل میکنند کدام یک از این فایلها لود میشوند، گزینههای راهاندازی هستند، به این معنی که باید بعد از bazel و قبل از دستور ( build ، test و غیره) رخ دهند.
فایل RC سیستم ، مگر اینکه
--nosystem_rcموجود باشد.مسیر:
- در Linux/macOS/Unixes:
/etc/bazel.bazelrc - در ویندوز:
%ProgramData%\bazel.bazelrc
اگر این فایل وجود نداشته باشد، خطا نیست.
اگر مکان مشخص دیگری از سیستم مورد نیاز است، باید یک باینری Bazel سفارشی بسازید، که مقدار
BAZEL_SYSTEM_BAZELRC_PATHدر//src/main/cpp:option_processorکند. مکان مشخص شده توسط سیستم ممکن است حاوی ارجاعات متغیر محیطی باشد، مانند${VAR_NAME}در Unix یا%VAR_NAME%در Windows.- در Linux/macOS/Unixes:
فایل RC فضای کاری ، مگر اینکه
--noworkspace_rcوجود داشته باشد.مسیر:
.bazelrcدر فهرست فضای کاری شما (در کنار فایلWORKSPACEاصلی).اگر این فایل وجود نداشته باشد، خطا نیست.
فایل RC خانگی ، مگر اینکه
--nohome_rcموجود باشد.مسیر:
- در Linux/macOS/Unixes:
$HOME/.bazelrc - در ویندوز:
%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 نحو و معناشناسی
مانند همه فایلهای "rc" یونیکس، فایل .bazelrc . یک فایل متنی با دستور زبان مبتنی بر خط است. خطوط خالی و خطوطی که با # شروع می شوند (نظرات) نادیده گرفته می شوند. هر خط حاوی یک دنباله از کلمات است که مطابق با قوانین پوسته Bourne نشانه گذاری می شوند.
واردات
خطوطی که با import یا try-import شروع می شوند خاص هستند: از آنها برای بارگیری سایر فایل های "rc" استفاده کنید. برای تعیین مسیری که نسبت به ریشه فضای کاری است، import %workspace%/path/to/bazelrc .
تفاوت بین import و try-import در این است که Bazel اگر فایل import 'ed گم شده باشد (یا قابل خواندن نباشد) با شکست مواجه می شود، اما برای یک فایل try-import 'ed اینطور نیست.
اولویت واردات:
- گزینه های موجود در فایل وارد شده بر گزینه های مشخص شده قبل از دستور import اولویت دارند.
- گزینه های مشخص شده پس از دستور import بر گزینه های موجود در فایل وارد شده اولویت دارند.
- گزینههای موجود در فایلهایی که بعداً وارد میشوند بر فایلهایی که قبلاً وارد شدهاند اولویت دارند.
گزینه های پیش فرض
اکثر خطوط یک bazelrc مقادیر گزینه پیش فرض را تعریف می کنند. اولین کلمه در هر خط مشخص می کند که این پیش فرض ها چه زمانی اعمال می شوند:
-
startup: گزینه های راه اندازی، که قبل از دستور قرار می گیرند و درbazel help startup_optionsتوضیح داده شده اند. -
common: گزینه هایی که برای همه دستورات Bazel اعمال می شوند. -
command: دستور Bazel، مانندbuildیاqueryکه گزینه ها برای آن اعمال می شود. این گزینه ها همچنین برای تمام دستوراتی که از دستور مشخص شده ارث می برند اعمال می شود. (به عنوان مثال،testارث بری ازbuild.)
هر یک از این خطوط ممکن است بیش از یک بار مورد استفاده قرار گیرد و آرگومان هایی که پس از کلمه اول قرار می گیرند طوری ترکیب می شوند که گویی در یک خط ظاهر شده اند. (کاربران CVS، ابزار دیگری با رابط خط فرمان "Swiss Army Knife"، نحوی شبیه به .cvsrc . را پیدا می کنند.) به عنوان مثال، خطوط:
build --test_tmpdir=/tmp/foo --verbose_failuresbuild --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 buildbazel برایbazel testمعتبر هستند، و همه خطوطbuildبرایbazel testنیز اعمال میشوند، مگر اینکه یک خطtestبرای همان گزینه وجود داشته باشد. اگر فایل rc می گوید:test -c dbg --test_env=PATHbuild -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 "در محل" گسترش مییابد تا گزینههای تعیینشده برای پیکربندی همان اولویتی را داشته باشند که گزینه --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 را در ریشه فضای کاری قرار دهید و دایرکتوری هایی را که می خواهید Bazel نادیده بگیرد، در هر خط اضافه کنید. ورودی ها نسبت به ریشه فضای کاری هستند.
فایل bazelrc جهانی
Bazel فایل های bazelrc اختیاری را به این ترتیب می خواند: - فایل rc سیستم واقع در etc/bazel.bazelrc . - فایل rc فضای کاری واقع در $workspace/tools/bazel.rc . - فایل rc صفحه اصلی در $HOME/.bazelrc
هر فایل bazelrc لیست شده در اینجا دارای یک پرچم مربوطه است که می تواند برای غیرفعال کردن آنها استفاده شود (به عنوان مثال --nosystem_rc ، --noworkspace_rc ، --nohome_rc ). همچنین می توانید با عبور از گزینه --ignore_all_rc_files startup همه bazelrc ها را نادیده بگیرید.