Bazel-ը կառուցում է նախագիծը՝ գործարկելով անհրաժեշտ կոմպիլյատորները և թեստերը: Կառուցման համակարգը նախագծված է ի սկզբանե Google-ի նախագծերը օպտիմալ կերպով կառուցելու համար, ներառյալ շատ մեծ նախագծերն ու նախագծերը, որոնք պարունակում են կոդ ծրագրավորման բազմաթիվ լեզուներով, պահանջում են լայնածավալ փորձարկում և կառուցված են բազմաթիվ հարթակների համար: Այն աջակցում է Java, C++, Objective-C, Python, Rust, Go և շատ այլ լեզուներով կոդի ստեղծմանը և փորձարկմանը, ինչպես նաև Android-ի և iOS-ի համար բջջային հավելվածների ստեղծմանը: Աջակցվում է մեկ հավաքման ֆայլերի օգտագործումը տարբեր հարթակների և ճարտարապետության համար, օրինակ, հավաքման մեկ ֆայլ առանց փոփոխությունների կարող է օգտագործվել ինչպես սերվերային համակարգի, այնպես էլ շարժական սարքի համար:
Bazel-ի տարբերակիչ հատկանիշներից են հավաքման գործընթացի բարձր արագությունը, հուսալիությունը և կրկնելիությունը: Բարձր կառուցման արագության հասնելու համար Bazel-ը ակտիվորեն օգտագործում է քեշավորման և զուգահեռացման տեխնիկան կառուցման գործընթացի համար: BUILD ֆայլերը պետք է ամբողջությամբ սահմանեն բոլոր կախվածությունները, որոնց հիման վրա որոշումներ են կայացվում փոփոխություններ կատարելուց հետո բաղադրիչները վերակառուցելու մասին (միայն փոխված ֆայլերը վերակառուցվում են) և զուգահեռացնում են հավաքման գործընթացը: Գործիքավորումը նաև ապահովում է կրկնվող հավաքում, այսինքն. Մշակողի մեքենայի վրա նախագծի կառուցման արդյունքը լիովին նույնական կլինի երրորդ կողմի համակարգերի վրա կառուցվածին, ինչպիսիք են շարունակական ինտեգրման սերվերները:
Ի տարբերություն Make-ի և Ninja-ի, Bazel-ը օգտագործում է հավաքման կանոնների կառուցման ավելի բարձր մակարդակի մոտեցում, որտեղ կառուցվող ֆայլերի հետ հրամանների կապը սահմանելու փոխարեն օգտագործվում են ավելի վերացական պատրաստի բլոկներ, ինչպիսիք են «գործարկվող ֆայլի ստեղծումը C++», «գրադարանի կառուցում C++-ում» կամ «փորձարկում C++-ի համար», ինչպես նաև թիրախային և կառուցման հարթակների նույնականացում: BUILD տեքստային ֆայլում նախագծի բաղադրիչները նկարագրվում են որպես գրադարանների, գործարկվող ֆայլերի և թեստերի մի փունջ՝ առանց առանձին ֆայլերի մակարդակով մանրամասնելու և կոմպիլյատորի կանչի հրամանների: Լրացուցիչ գործառույթն իրականացվում է ընդարձակման միացման մեխանիզմի միջոցով:
Source: opennet.ru