bazelrc কনফিগারেশন ফাইল লিখুন

Bazel অনেক বিকল্প গ্রহণ করে. কিছু বিকল্প ঘন ঘন পরিবর্তিত হয় (উদাহরণস্বরূপ, --subcommands ) যখন অন্যগুলি বিভিন্ন বিল্ডে একই থাকে (যেমন --package_path )। প্রতিটি বিল্ডের (এবং অন্যান্য কমান্ড) জন্য এই অপরিবর্তিত বিকল্পগুলি নির্দিষ্ট না করার জন্য, আপনি .bazelrc নামে একটি কনফিগারেশন ফাইলে বিকল্পগুলি নির্দিষ্ট করতে পারেন।

.bazelrc ফাইল কোথায়?

Bazel নীচের দেখানো ক্রমানুসারে, নিম্নলিখিত অবস্থানে ঐচ্ছিক কনফিগারেশন ফাইলগুলি সন্ধান করে৷ বিকল্পগুলি এই ক্রমে ব্যাখ্যা করা হয়, তাই পরবর্তী ফাইলগুলির বিকল্পগুলি যদি কোনও বিরোধ দেখা দেয় তবে আগের ফাইল থেকে একটি মান ওভাররাইড করতে পারে। এই ফাইলগুলির মধ্যে কোনটি লোড হবে তা নিয়ন্ত্রণ করে এমন সমস্ত বিকল্পগুলি হল স্টার্টআপ বিকল্প, যার মানে সেগুলি অবশ্যই bazel পরে এবং কমান্ডের আগে ঘটতে হবে ( build , test , ইত্যাদি)।

  1. সিস্টেম RC ফাইল , যদি না --nosystem_rc উপস্থিত থাকে।

    পথ:

    • Linux/macOS/Unixes-এ: /etc/bazel.bazelrc
    • উইন্ডোজে: %ProgramData%\bazel.bazelrc

    এই ফাইলটি বিদ্যমান না থাকলে এটি একটি ত্রুটি নয়।

    অন্য সিস্টেম-নির্দিষ্ট অবস্থানের প্রয়োজন হলে, আপনাকে অবশ্যই একটি কাস্টম Bazel বাইনারি তৈরি করতে হবে, //src/main/cpp:option_processorBAZEL_SYSTEM_BAZELRC_PATH মানকে ওভাররাইড করে। সিস্টেম-নির্দিষ্ট অবস্থানে পরিবেশ পরিবর্তনশীল রেফারেন্স থাকতে পারে, যেমন ইউনিক্সে ${VAR_NAME} বা Windows-এ %VAR_NAME%

  2. ওয়ার্কস্পেস RC ফাইল , যদি না --noworkspace_rc উপস্থিত থাকে।

    পাথ: .bazelrc আপনার ওয়ার্কস্পেস ডিরেক্টরিতে (প্রধান WORKSPACE ফাইলের পাশে)।

    এই ফাইলটি বিদ্যমান না থাকলে এটি একটি ত্রুটি নয়।

  3. হোম RC ফাইল , যদি না --nohome_rc উপস্থিত থাকে।

    পথ:

    • Linux/macOS/Unixes-এ: $HOME/.bazelrc
    • উইন্ডোজে: %USERPROFILE%\.bazelrc যদি বিদ্যমান থাকে, অথবা %HOME%/.bazelrc

    এই ফাইলটি বিদ্যমান না থাকলে এটি একটি ত্রুটি নয়।

  4. ব্যবহারকারী-নির্দিষ্ট RC ফাইল , যদি --bazelrc= file দিয়ে নির্দিষ্ট করা হয়

    এই পতাকা ঐচ্ছিক কিন্তু একাধিকবার নির্দিষ্ট করা যেতে পারে।

    /dev/null নির্দেশ করে যে পরবর্তী সমস্ত --bazelrc s উপেক্ষা করা হবে, যা ব্যবহারকারীর 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 সিনট্যাক্স এবং শব্দার্থবিদ্যা

সমস্ত UNIX "rc" ফাইলের মতো, .bazelrc ফাইলটি একটি লাইন-ভিত্তিক ব্যাকরণ সহ একটি পাঠ্য ফাইল। # (মন্তব্য) দিয়ে শুরু হওয়া খালি লাইন এবং লাইন উপেক্ষা করা হয়। প্রতিটি লাইনে শব্দের একটি ক্রম রয়েছে, যেগুলি বোর্ন শেলের মতো একই নিয়ম অনুসারে টোকেনাইজ করা হয়।

আমদানি

যে লাইনগুলি import বা try-import দিয়ে শুরু হয় সেগুলি বিশেষ: অন্যান্য "rc" ফাইল লোড করতে এগুলি ব্যবহার করুন৷ ওয়ার্কস্পেস রুটের সাথে সম্পর্কিত একটি পাথ নির্দিষ্ট করতে, import %workspace%/path/to/bazelrc

import এবং try-import মধ্যে পার্থক্য হল যে import 'ed ফাইলটি অনুপস্থিত থাকলে Bazel ব্যর্থ হয় (বা পড়া যাবে না), কিন্তু একটি try-import 'ed ফাইলের জন্য তা নয়।

আমদানি অগ্রাধিকার:

  • আমদানিকৃত ফাইলের বিকল্পগুলি আমদানি বিবৃতির আগে নির্দিষ্ট করা বিকল্পগুলির উপর অগ্রাধিকার নেয়৷
  • ইম্পোর্ট স্টেটমেন্টের পরে নির্দিষ্ট করা বিকল্পগুলি ইম্পোর্ট করা ফাইলের বিকল্পগুলির উপর অগ্রাধিকার পায়৷
  • পরে আমদানি করা ফাইলগুলির বিকল্পগুলি আগে আমদানি করা ফাইলগুলির চেয়ে অগ্রাধিকার নেয়৷

বিকল্প ডিফল্ট

একটি bazelrc এর বেশিরভাগ লাইন ডিফল্ট বিকল্প মানগুলিকে সংজ্ঞায়িত করে। প্রতিটি লাইনের প্রথম শব্দটি নির্দিষ্ট করে যখন এই ডিফল্টগুলি প্রয়োগ করা হয়:

  • startup : স্টার্টআপ অপশন, যা কমান্ডের আগে যায় এবং bazel help startup_options এ বর্ণনা করা হয়।
  • common : সমস্ত Bazel কমান্ডের ক্ষেত্রে প্রযোজ্য বিকল্প।
  • command : Bazel কমান্ড, যেমন build বা query যেখানে বিকল্পগুলি প্রযোজ্য। এই বিকল্পগুলি নির্দিষ্ট কমান্ড থেকে উত্তরাধিকারসূত্রে পাওয়া সমস্ত কমান্ডের ক্ষেত্রেও প্রযোজ্য। (উদাহরণস্বরূপ, build থেকে উত্তরাধিকার test করুন।)

এই লাইনগুলির প্রতিটি একাধিকবার ব্যবহার করা যেতে পারে এবং প্রথম শব্দটিকে অনুসরণ করে এমন আর্গুমেন্টগুলি একত্রিত করা হয় যেন তারা একটি একক লাইনে উপস্থিত হয়েছে৷ (CVS-এর ব্যবহারকারীরা, একটি "সুইস আর্মি নাইফ" কমান্ড-লাইন ইন্টারফেসের সাথে আরেকটি টুল, .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

বিকল্প অগ্রাধিকার:

  • কমান্ড লাইনের বিকল্পগুলি সর্বদা rc ফাইলগুলির তুলনায় অগ্রাধিকার পায়। উদাহরণস্বরূপ, যদি একটি rc ফাইল বলে build -c opt কিন্তু কমান্ড লাইন ফ্ল্যাগ -c dbg , কমান্ড লাইন পতাকা অগ্রাধিকার নেয়।
  • rc ফাইলের মধ্যে, অগ্রাধিকার নির্দিষ্টতা দ্বারা নিয়ন্ত্রিত হয়: একটি আরও নির্দিষ্ট কমান্ডের জন্য লাইনগুলি একটি কম নির্দিষ্ট কমান্ডের জন্য লাইনের উপর অগ্রাধিকার নেয়।

    নির্দিষ্টতা উত্তরাধিকার দ্বারা সংজ্ঞায়িত করা হয়। কিছু কমান্ড অন্যান্য কমান্ড থেকে বিকল্পগুলিকে উত্তরাধিকার সূত্রে প্রাপ্ত করে, যার ফলে উত্তরাধিকারী কমান্ডকে বেস কমান্ডের চেয়ে আরও নির্দিষ্ট করে। উদাহরণস্বরূপ test build কমান্ড থেকে উত্তরাধিকারসূত্রে পাওয়া যায়, তাই সমস্ত bazel build ফ্ল্যাগ bazel test জন্য বৈধ, এবং একই বিকল্পের জন্য একটি test লাইন না থাকলে সমস্ত build লাইন bazel test জন্যও প্রযোজ্য। যদি rc ফাইল বলে:

    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 থেকে উত্তরাধিকারসূত্রে পাওয়া যায় (এবং এর চেয়ে আরও নির্দিষ্ট) : 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 ব্যবহার পর্যন্ত প্রসারিত হয় না। .bazelrc-এ startup:config-name --some_startup_option সেট করা উপেক্ষা করা হবে।

উদাহরণ

এখানে একটি উদাহরণ ~/.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

Bazel এর আচরণ নিয়ন্ত্রণকারী অন্যান্য ফাইল

.bazelignore

আপনি কর্মক্ষেত্রের মধ্যে ডিরেক্টরিগুলি নির্দিষ্ট করতে পারেন যা আপনি Bazel উপেক্ষা করতে চান, যেমন সম্পর্কিত প্রকল্পগুলি যা অন্যান্য বিল্ড সিস্টেম ব্যবহার করে। ওয়ার্কস্পেসের মূলে .bazelignore নামক একটি ফাইল রাখুন এবং আপনি যে ডিরেক্টরিগুলিকে Bazel উপেক্ষা করতে চান তা যোগ করুন, প্রতি লাইনে একটি। এন্ট্রিগুলি ওয়ার্কস্পেস রুটের সাথে আপেক্ষিক।

গ্লোবাল bazelrc ফাইল

Bazel এই ক্রমে ঐচ্ছিক bazelrc ফাইল পড়ে: - etc/bazel.bazelrc এ অবস্থিত সিস্টেম rc-file। - ওয়ার্কস্পেস আরসি-ফাইল $workspace/tools/bazel.rc এ অবস্থিত। - হোম rc-ফাইল $HOME/.bazelrc এ স্থানীয়

এখানে তালিকাভুক্ত প্রতিটি bazelrc ফাইলের একটি সংশ্লিষ্ট পতাকা রয়েছে যা তাদের নিষ্ক্রিয় করতে ব্যবহার করা যেতে পারে (যেমন --nosystem_rc , --noworkspace_rc , --nohome_rc )। আপনি --ignore_all_rc_files স্টার্টআপ বিকল্পটি পাস করে Bazel-কে সমস্ত bazelrcs উপেক্ষা করতে পারেন।