B ++ рдХреЗ рд╕рд╛рде C ++ рдмрдирд╛рдПрдБ

рдкрд░рд┐рдЪрдп рдФрд░ рдкреНрд░реЗрд░рдгрд╛


рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рд╣реЗрдм рдкрд░ рдкреЛрд╕реНрдЯреНрд╕ рд╕рд╛рдордиреЗ рдЖрдП рд╣реИрдВ рдХрд┐ cmake рдФрд░ c ++ рджреЛрд╕реНрдд рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рджрд┐рдП рдЧрдП рд╣реИрдВ рдХрд┐ рд╣реЗрдбрд░-рдУрдирд▓реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдХреИрд╕реЗ рдЗрдХрдЯреНрдард╛ рдХрд┐рдпрд╛ рдЬрд╛рдП рдФрд░ рди рдХреЗрд╡рд▓, рдмрд▓реНрдХрд┐ рдХрдо рд╕реЗ рдХрдо рдХреБрдЫ рдирдП рдмрд┐рд▓реНрдб рд╕рд┐рд╕реНрдЯрдо - рдмрд╛рдЬреЗрд▓, рд╣рд┐рд░рди, рдЬреАрдПрди рдФрд░ рдЕрдиреНрдп рдХрд╛ рдХреЛрдИ рдЕрд╡рд▓реЛрдХрди рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдЖрдк, рдореЗрд░реА рддрд░рд╣, 2k20 рдореЗрдВ C ++ рдореЗрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рддреЛ рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдЖрдк b ++ рдХреЛ c ++ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд┐рд▓реНрдб рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рдиреЗрдВред

рд╣рдо рдЗрд╕ рд╕рд╡рд╛рд▓ рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВрдЧреЗ рдХрд┐ cmake рдФрд░ рдЕрдиреНрдп рдореМрдЬреВрджрд╛ рд╕рд┐рд╕реНрдЯрдо рдХреНрдпреЛрдВ рдЦрд░рд╛рдм рд╣реИрдВ, рдФрд░ рдЗрд╕ рдмрд╛рдд рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЦреБрдж bazel рдХреНрдпрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рддрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЖрдкрдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдХреНрдпрд╛ рд╣реИ, рдореИрдВ рдЗрд╕реЗ рдЖрдкрдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЫреЛрдбрд╝рддрд╛ рд╣реВрдВред

рдЖрдЗрдП рдкрд░рд┐рднрд╛рд╖рд╛ рдФрд░ рдкреНрд░реЗрд░рдгрд╛ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВред Bazel рдПрдХ рдмрд╣реБрднрд╛рд╖реА Google рдмрд┐рд▓реНрдб рд╕рд┐рд╕реНрдЯрдо рд╣реИ рдЬреЛ c ++ рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд╣рдореЗрдВ рджреВрд╕рд░реА рдирд┐рд░реНрдорд╛рдг рдкреНрд░рдгрд╛рд▓реА рдХреЛ рднреА рдХреНрдпреЛрдВ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдП? рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдХреНрдпреЛрдВрдХрд┐ рдХреБрдЫ рдмрдбрд╝реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрд╕рдХреЗ рдкрд╛рд╕ рдЬрд╛ рд░рд╣реА рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЯреЗрдВрд╕реЛрд░рдлреНрд▓реЛ, рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдФрд░ рдЧреЗрд╕реНрдЯреЗрд╕реНрдЯ, рдФрд░ рддрджрдиреБрд╕рд╛рд░, рдЙрдирдХреЗ рд╕рд╛рде рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрд╛рдЬреЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рджреВрд╕рд░реЗ, Google bazel рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрднреА рднреА spaceX, nvidia рдФрд░ рдЕрдиреНрдп рдХрдВрдкрдирд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ bazelcon рдкрд░ рдЙрдирдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд░рддрд╛ рд╣реИред рдЕрдВрдд рдореЗрдВ, bazel github рдкрд░ рдПрдХ рдмрд╣реБрдд рд▓реЛрдХрдкреНрд░рд┐рдп рдУрдкрди рд╕реЛрд░реНрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рджреЗрдЦрдиреЗ рд▓рд╛рдпрдХ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЖрдЬрд╝рдорд╛рдПрдВред

рдЙрджрд╛рд╣рд░рдг 1. рддреБрдЪреНрдЫ


рд╡рд╣рд╛рдБ main.cc рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдЗрд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

main.cc

#include <iostream>

int main() {
   std::cout << "Hello, habr" << std::endl;
   return 0;
}

рдпрд╣ рд╕рднреА рдХрд╛рд░реНрдпрдХреНрд╖реЗрддреНрд░ рдШреЛрд╖рдгрд╛ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред Bazel рдХрд╛рд░реНрдпрдХреНрд╖реЗрддреНрд░ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ, рдпрд╣ рд╡рд╣ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЖрдкрдХреА рд╕рднреА рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓реЗрдВ рд╕реНрдерд┐рдд рд╣реИрдВред рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖реЗрддреНрд░ рдХреЛ рдирд╛рдорд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЙрд╕ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╡рд░реНрдХрд╢реЙрдк рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рдЦрд╛рд▓реА рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЖрдорддреМрд░ рдкрд░ рдпрд╣ src рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╣реИред

Bazel рдореЗрдВ рдХреЛрдб рдХреЗ рдЖрдпреЛрдЬрди рдХреЗ рд▓рд┐рдП рдиреНрдпреВрдирддрдо рдЗрдХрд╛рдИ рдПрдХ рдкреИрдХреЗрдЬ рд╣реИред рдкреИрдХреЗрдЬ рдХреЛ рд╕реНрд░реЛрдд рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдФрд░ рдПрдХ рд╡рд┐рд╢реЗрд╖ BUILD рдлрд╝рд╛рдЗрд▓ рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдпреЗ рд╕реНрд░реЛрдд рдХреИрд╕реЗ рдЗрдХрдЯреНрдареЗ рд╣реЛрддреЗ рд╣реИрдВред

рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдореБрдЦреНрдп рдкреИрдХреЗрдЬ рдЬреЛрдбрд╝реЗрдВ:



BUILD рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рд╣рдореЗрдВ рдЕрдм рдпрд╣ рдмрддрд╛рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рд╣рдо рдЕрдкрдиреЗ рдореБрдЦреНрдп рд╕реЗ рдХреНрдпрд╛ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рд╣рдо рдПрдХ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдмрд╛рдЗрдирд░реА рд╕рдВрдХрд▓рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо cc_binary рдирд┐рдпрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдмрд╛рдЬреЗрд▓ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рд╕реА ++ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕реА ++ рд▓рдХреНрд╖реНрдпреЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдирд┐рдпрдореЛрдВ рдХрд╛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реЗрдЯ рд╣реИ, рд╣рдореЗрдВ рдмрд╛рдХреА рдХрд╛ рдкрддрд╛ рдмрд╛рдж рдореЗрдВ рд▓рдЧреЗрдЧрд╛ред

BUILD рдлрд╝рд╛рдЗрд▓ рдореЗрдВ cc_binary рдирд┐рдпрдо рдЬреЛрдбрд╝реЗрдВ, рдЗрд╕рдХрд╛ рдПрдХ рдирд╛рдо рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рд╣реЛрдЧреА рдФрд░ рд╕реНрд░реЛрддреЛрдВ рдХрд╛ рдПрдХ рд╕рд░рдгреА рдЬреЛ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рд╕рдм рд╕реНрдЯрд╛рд░рд▓рд╛рд░реНрдХ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИ, рдЬреЛ рдХрд┐ рдПрдХ рдЫрдВрдЯреЗ рд╣реБрдП рдЕрдЬрдЧрд░ рд╣реИред

cc_binary(
  name = "hello_world",
  srcs = "main.cc"
)

рдмреИрдЬреЗрд▓, рд╕реЗрдореАрдХреЗ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЖрджреЗрд╢реЛрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдирд┐рдпрдореЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ, рдирд┐рдпрдо рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдСрдкрд░реЗрд╢рди рдХреЗ рд╕рд╛рде рдХрдИ рдХрд▓рд╛рдХреГрддрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, bazel рдПрдХ рдХрдорд╛рдВрдб рдЧреНрд░рд╛рдл рдмрдирд╛рддрд╛ рд╣реИ, рдЬреЛ рддрдм рдХреИрд╢ рдФрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, main.cc рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓ рдПрдХ рд╕рдВрдХрд▓рди рдСрдкрд░реЗрд╢рди рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╡рд┐рд░реВрдкрдг рд╕рд╛рдХреНрд╖реНрдп hello_world рд╣реИ - рдПрдХ рджреНрд╡рд┐рдЖрдзрд╛рд░реА рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ред

рдЕрдм рд╣рдорд╛рд░реЗ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдХрд╛рд░реНрдпрдХреНрд╖реЗрддреНрд░ рдФрд░ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:

bazel build //main:hello_world

рдмрд┐рд▓реНрдб рд╕рд┐рд╕реНрдЯрдо рдмрд┐рд▓реНрдб рдХрдорд╛рдВрдб рдФрд░ рд╣рдорд╛рд░реЗ рд▓рдХреНрд╖реНрдп рдХреЗ рдкрде рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдЬрдбрд╝ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред

рдкрд░рд┐рдгрд╛рдореА рдмрд╛рдЗрдирд░реА bazel-bin / main / hello_world рдкрд░ рд╕реНрдерд┐рдд рд╣реЛрдЧреАред

рдЙрджрд╛рд╣рд░рдг 2. рдЕрдкрдиреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╕рд╛рде рдмрдирд╛рдПрдБ


рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдХрд┐рд╕реА рдХреЛ рднреА рдРрд╕реА рд╕рд░рд▓ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреИрд╕реЗ рдЬреЛрдбрд╝реЗрдВред рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЬреЛрдбрд╝реЗрдВ рдЬреЛ рдЕрд▓рдЧ рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рд╣рдорд╛рд░реЗ рдореБрдЦреНрдп рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реЛрдЧрд╛ред

рдЗрд╕реЗ рд╕реНрдХреНрд╡рд╛рдпрд░ рд╣реЛрдиреЗ рджреЗрдВ, рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЬреЛ рдПрдХ рд╢рд╛рдирджрд╛рд░ рд╕реНрдХреНрд╡реЗрд░рд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ред рдПрдХ рдирдпрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдПрдХ рдирдпрд╛ рдкреИрдХреЗрдЬ рдЬреЛрдбрд╝рдирд╛, рдЗрд╕реЗ рд╡рд░реНрдЧ рднреА рдХрд╣рддреЗ рд╣реИрдВред



square.h

#ifndef SQUQRE_SQUARE_H_
#define SQUQRE_SQUARE_H_

int Square(int x);

#endif // SQUQRE_SQUARE_H_

square.cc
#include "square/square.h"

int Square(int x) {
  return x * x;
}

рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдХрдиреЗрдХреНрд╢рди рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ, рдореИрдВ рдЗрд╕реЗ рдХрд╛рд░реНрдпрдХреНрд╖реЗрддреНрд░ рд╕реЗ рдкрде рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд░рддрд╛ рд╣реВрдВ, рднрд▓реЗ рд╣реА рдлрд╝рд╛рдЗрд▓ рдЙрд╕реА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╣реЛред рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреНрд░реЛрдорд┐рдпрдо рдХреЛрдб рд╕реНрдЯрд╛рдЗрд▓ рдЧрд╛рдЗрдб рдореЗрдВ рдЕрдкрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдХрд┐ google c ++ рд╕реНрдЯрд╛рдЗрд▓ рдЧрд╛рдЗрдб рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИред рдпрд╣ рд╡рд┐рдзрд┐ рдЖрдкрдХреЛ рддреБрд░рдВрдд рд╕рдордЭрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ рдХрд┐ рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓ рдХрд╣рд╛рдВ рд╕реЗ рдЬреБрдбрд╝реА рд╣реИред рдЪрд┐рдВрддрд╛ рди рдХрд░реЗрдВ, рдПрдХ рдлрд╝рд╛рдЗрд▓ рд╣реЛрдЧреА, рд╣реИрдбрд░ рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдЦреЛрдЬ рдХреЗ рд▓рд┐рдП рд░рд╛рд╕реНрддреЗ рдЬреЛрдбрд╝ рджреЗрдЧрд╛, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рдЗрд╕ рдирд┐рдпрдо рдХрд╛ рдкрд╛рд▓рди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╣реЗрдбрд░ рдлрд╛рдЗрд▓реЗрдВ рдмрд╛рдЬреЗрд▓ рдмрд┐рд▓реНрдб рдХреЗ рджреМрд░рд╛рди рди рдорд┐рд▓реЗред

рд╣рдорд╛рд░реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА BUILD рдлрд╛рдЗрд▓ рдореЗрдВ, рд╣рдо cc_library рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдирд┐рдпрдо рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ:

cc_library(
  name = "square",
  srcs = ["square.cc"],
  hdrs = ["square.h"],
  visibility = ["//visibility:public"]
)

рдпрд╣рд╛рдВ рд╣рдо рд╕реНрд░реЛрдд рдФрд░ рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЕрд▓рдЧ рд╕реЗ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░реВрдк рд╕реЗ рджреГрд╢реНрдпрддрд╛ рднреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВред рдЙрддреНрддрд░рд╛рд░реНрджреНрдз рдЖрд╡рд╢реНрдпрдХ рд╣реИ рддрд╛рдХрд┐ рд╣рдо рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдХрд╣реАрдВ рднреА рд╣рдорд╛рд░реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкрд░ рдирд┐рд░реНрднрд░ рд░рд╣ рд╕рдХреЗрдВред

Main.cc рдореЗрдВ рд╣рдо рдЕрдкрдиреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:

#include <iostream>
#include "square/square.h"

int main() {
  std::cout << "Hello, bazel!" << std::endl;
  std::cout << Square(2) << std::endl;
  return 0;
}

рдлрд┐рд░, рдореИрдВ рдЗрд╕ рддрдереНрдп рдкрд░ рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рд╣рдо рдХрд╛рд░реНрдпрдХреНрд╖реЗрддреНрд░ рд╕реЗ рдкрде рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреА рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓ рд╢рд╛рдорд┐рд▓ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдпрд╣рд╛рдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдмрдЬрд╝рд▓ рд╣реБрдб рдХреЗ рдиреАрдЪреЗ рд▓рд┐рдирдХреНрд╕ рдХрдВрдЯреЗрдирд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХрд╛ рддрдВрдЧ рд╕реНрддрд░ рдХрдо рд╕реЗ рдХрдо рд╣реЛ рд╕рдХреЗ рдФрд░, рддрджрдиреБрд╕рд╛рд░, рдпрд╣ рд╕реНрдХреНрд╡рд╛рдпрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдорд╛рдЙрдВрдЯ рдХрд░реЗрдЧрд╛ рддрд╛рдХрд┐ рд╡реЗ рдХрд╛рд░реНрдпрдХреНрд╖реЗрддреНрд░ рд╕реЗ рдкрде рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдерд┐рдд рд╣реЛрдВред

рдФрд░ рд╣рдо рд╡рд░реНрдЧ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкрд░ рдореБрдЦреНрдп рдХреЗ рд▓рд┐рдП рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдирд┐рдпрдо рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВред

cc_binary(
  name = "hello_world",
  srcs = ["main.cc"],
  deps = ["//square:square"]
)

рд╣рдорд╛рд░реЗ рдкреВрд░реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рдЗрдХрдЯреНрдард╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛, рдмрдЬрд╝реЗрд▓ рдЦреБрдж рд╕рдордЭ рдЬрд╛рдПрдЧрд╛ рдХрд┐ рдпрд╣ рдХрд┐рд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рдПрдХ рдЧреНрд░рд╛рдл рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВ, рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдХреИрд╢ рдХрд░реЗрдВ рдФрд░ рдХреЗрд╡рд▓ рд╡рд╣реА рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВ рдЬреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

bazel build //main:hello_world

рдЙрджрд╛рд╣рд░рдг 3. рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛


рдмрд┐рдирд╛ рдЯреЗрд╕реНрдЯ рдХреЗ рдХреИрд╕реЗ рдЬреАрдирд╛ рд╣реИ? рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ! Bazel рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА bazel рдХреЗ рд╕рд╛рде рдЕрд╕реЗрдВрдмрд▓реА рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдЖрдкрдХреЛ рдмрд╛рд╣рд░реА рдирд┐рд░реНрднрд░рддрд╛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдХрд╛рд░реНрдп рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository")

git_repository(
  name = "googletest",
  remote = "https://github.com/google/googletest",
  tag = "release-1.8.1"
)

рд╣рд┐рдкрд╕реНрдЯрд░реНрд╕ рдХреА рддрд░рд╣, рдЙрдиреНрд╣реЛрдВрдиреЗ git_repository рдирд┐рдпрдо рдХрдиреЗрдХреНрдЯ рдХрд┐рдпрд╛ рдФрд░ bazel рдХреЛ рдмрддрд╛рдпрд╛ рдХрд┐ рдХреМрди рд╕рд╛ рд╕рдВрд╕реНрдХрд░рдг рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ рд╣реИред

рдЕрдЧрд▓рд╛, рд╣рдо рдкрд░реАрдХреНрд╖рдг рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдкреИрдХреЗрдЬ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдореЗрдВ рд╣рдорд╛рд░реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:

square_unittest.cc

#include "gtest/gtest.h"
#include "square/square.h"

TEST(SquareTests, Basics) {
    EXPECT_EQ(Square(-1), 1);
    EXPECT_EQ(Square(1), 1);
    EXPECT_EQ(Square(2), 4);
}

рдЕрдм рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рдпрдо рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдмрд╛рд░реА рд╣реИред

cc_test(
  name = "unittests",
  srcs = ["square_unittest.cc"],
  deps = [
   "//square:square",
   "@googletest//:gtest_main"
  ]
)

рд╣рдордиреЗ рдЕрдкрдиреЗ рдкреБрд╕реНтАНрддрдХрд╛рд▓рдп рдФрд░ gtest_main рдкрд░ рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рдЬреЛрдбрд╝реАрдВ, рддрд╛рдХрд┐ gtest рдкреБрд╕реНтАНрддрдХрд╛рд▓рдп рд╣рдореЗрдВ рдПрдХ рд▓реЙрдиреНрдЪрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ред

рдЯреЗрд╕реНрдЯ рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдЪрд▓рд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ:

bazel test //test:unittests

Bazel рдЦреБрдж рд╣реА GTest рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдФрд░ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдЧрд╛, рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рднреА рдЪреАрдЬреЛрдВ рдХреЛ рд▓рд┐рдВрдХ рдХрд░реЗрдЧрд╛ рдФрд░ рдкрд░реАрдХреНрд╖рдг рд╕реНрд╡рдпрдВ рдЪрд▓рд╛рдПрдЧрд╛ред

рдореИрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ bazel рдХреЛ рдпрд╣ рднреА рдкрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдб рдХрд╡рд░реЗрдЬ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ:

bazel coverage //test:unittests

рдФрд░ рдЕрдЧрд░ рдЖрдкрдХреЛ рдкрд░реАрдХреНрд╖рдг рдбрд┐рдмрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдк рдЗрд╕ рддрд░рд╣ рдХреЗ рдкрд╛рддреНрд░реЛрдВ рдХреЗ рд╕рд╛рде рдбрд┐рдмрдЧ рдореЛрдб рдореЗрдВ рд╕рдм рдХреБрдЫ рд╕рдВрдХрд▓рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

bazel build //test:unittests --compilation_mode=dbg -s

рдЙрджрд╛рд╣рд░рдг 4. рдЕрдиреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдЬреЛ рди рдЬрд╛рдиреЗ рдХреИрд╕реЗ рдмрд╛рдЬрд╝ рдмрди рдЬрд╛рддреЗ рд╣реИрдВ


рдмреЗрд╢рдХ, рджреБрдирд┐рдпрд╛ рдЕрдХреЗрд▓реЗ bazel рдкрд░ рдирд╣реАрдВ рдмрдиреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдЕрдиреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рднреА рдЬреЛрдбрд╝рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдореЗрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ, рдореБрдЭреЗ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рддрд░реНрдХреЛрдВ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рдареАрдХ рд╣реИ, 2k20 рдореЗрдВ рдореБрдЭреЗ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЕрдкрдиреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдФрд░ рдореБрдЦреНрдп рдХрд╛рд░реНрдп рд╕реЗ рд╡рд┐рдЪрд▓рд┐рдд рд╣реЛред рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд┐рд╕реА рднреА рдЖрдзреЗ рдЙрдкрд╛рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЬреИрд╕реЗ рдЧреЗрдЯреНрд╕, рд╕рд╛рде рд╣реА рд╕рд╛рде рдореЗрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╡реГрджреНрдзрд┐ рдХреЛ рдЦреАрдВрдЪреЗрдВред

рд╡рд┐рдЬреНрдЮрд╛рдкрди рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ, рд╣рдо CLI11 рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВрдЧреЗ, рдЬреЛ stl рдорд╛рдирдХ C ++ 11 рд╕реЗ рдЕрдзрд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреА рд╣реИ рдФрд░ рдЕрдзрд┐рдХ рдпрд╛ рдХрдо рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИред

рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗрд╡рд▓ рд╣реЗрдбрд░ рд╣реИ, рдЬреЛ рдЗрд╕реЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИред

рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдмрд╛рд╣рд░реА рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ:

load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_file")

http_file(
  name = "CLI11",
  downloaded_file_path = "CLI11.hpp",
  urls = ["https://github.com/CLIUtils/CLI11/releases/download/v1.9.0/CLI11.hpp"],
  sha256 = "6f0a1d8846ed7fa4c2b66da3eb252aa03d27170258df...",
)

рд╣рдо рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкрд░ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП CLI11 рдкреИрдХреЗрдЬ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:

cc_library(
  name = "CLI11",
  hdrs = ["@CLI11//file"],
  strip_include_prefix = "/external/CLI11/file",
  include_prefix = "CLI11",
  linkstatic = True,
  visibility = ["//visibility:public"],
)

Bazel рдкрде / рдмрд╛рд╣рд░реА / CLI11 рджреНрд╡рд╛рд░рд╛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ рддрд╛рдХрд┐ рд╣рдо CLI11 / рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкрдереЛрдВ рдХреЛ рдереЛрдбрд╝рд╛ рдмрджрд▓ рджреЗрдВред

main.cc

#include <iostream>

#include "CLI11/CLI11.hpp"
#include "square/square.h"

int main() {
  std::cout << "Hello, bazel!" << std::endl;
  std::cout << Square(2) << std::endl;
  return 0;
}

рдореБрдЦреНрдп рдХреЗ рдЖрдзрд╛рд░ рдкрд░, "// third_party / CLI11: CLI11" рдЬреЛрдбрд╝реЗрдВ рдФрд░ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИред
рдореБрдЭреЗ рдЖрдкрдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрдЫ рдЕрдкрд░рд┐рдЪрд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдФрд░ рд╕реА ++ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЗрд╕ рд░реВрдк рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдореБрдЭреЗ рдкреНрд░рд╕рдиреНрдирддрд╛ рд╣реЛрддреА рд╣реИред

рд╣рд╛рдБ, рд╣реЗрдбрд░-рдУрдирд▓реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╕рд╛рде рдЖрдк рдХрд╣реЗрдВрдЧреЗ рдХрд┐ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдЧреИрд░-рд╣реЗрдбрд░-рдХреЗрд╡рд▓ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╕рд╛рде рдЬреЛ рдЕрднреА рддрдХ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЖрдк рдмрд╕ рдЗрд╕реЗ http_archive рдпрд╛ git_repository рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдПрдХ рдмрд╛рд╣рд░реА BUILD рдлрд╝рд╛рдЗрд▓ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдБ рдЖрдк рдЕрдкрдиреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдмрдирд╛рдиреЗ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВред Bazel рдХрд┐рд╕реА рднреА cmd рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдФрд░ cmake рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, cmake_external рдирд┐рдпрдо рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗред

рдЙрджрд╛рд╣рд░рдг 5. рд▓рд┐рдкрд┐рдпреЛрдВ рдФрд░ рд╕реНрд╡рдЪрд╛рд▓рди


рд╕реНрд╡рдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдмрд┐рдирд╛ 2k20 рдореЗрдВ рдирдВрдЧреЗ рд╕реА ++ рдореЗрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХрд┐рд╕рдХреЛ рд╣реИ? рдЖрдорддреМрд░ рдкрд░, рдЗрд╕ рддрд░рд╣ рдХреА рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рдХреЛ рдкрд░рдлреЗрдХреНрдЯ рдЯреЗрд╕реНрдЯ рдЪрд▓рд╛рдиреЗ рдпрд╛ рдЕрдкрдиреА рдХрд▓рд╛рдХреГрддрд┐рдпреЛрдВ рдХреЛ рдХрд╣реАрдВ рди рдХрд╣реАрдВ CI рдкрд░ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реЛрддреА рд╣реИред рдЦреИрд░, рдЖрдорддреМрд░ рдкрд░ рдЙрдиреНрд╣реЗрдВ рдЕрдЬрдЧрд░ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЗрд╕рдХреЗ рд▓рд┐рдП, рдмрдЬрд╝реЗрд▓ рднреА рдЙрдкрдпреБрдХреНрдд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд▓рдЧрднрдЧ рд╕рднреА рд▓реЛрдХрдкреНрд░рд┐рдп рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рд╕реЗ рдРрд╕реА рд╕реЙрд▓рдВрдХрд╛ рдПрдХрддреНрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рдХрд┐ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдЕрдХреНрд╕рд░ рдкрд╛рдИ рдЬрд╛рддреА рд╣реИрдВред

рдЖрдЗрдП рдЕрдЬрдЧрд░ рд▓рд┐рдкрд┐ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдЬреЛ рд╣рдорд╛рд░реЗ рдореБрдЦреНрдп рднрд╛рдЧ рдХреЛ рдЪрд▓рд╛рдПрдЧреАред

рдЗрддреНрд░-рдкрд░реАрдХреНрд╖рдг рдкреИрдХреЗрдЬ рдЬреЛрдбрд╝реЗрдВ:

py_binary(
  name = "perf_tests",
  srcs = ["perf_tests.py"],
  data = [
    "//main:hello_world",
  ],
)

рдбреЗрдЯрд╛ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ, hello_world рдмрд╛рдЗрдирд░реА рдирд┐рд░реНрднрд░рддрд╛ рдЬреЛрдбрд╝реЗрдВред

perf_tests.py

import subprocess
import time

start_time = time.time()
process = subprocess.run(['main/hello_world, 'param1', ],
                         stdout=subprocess.PIPE,
                         universal_newlines=True)
end_time = time.time()
print("--- %s seconds ---" % (end_time - start_time))

рдЕрдкрдиреЗ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдмрд╕ рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
bazel run //perf-tests:perf_tests

рдирд┐рд╖реНрдХрд░реНрд╖ рдФрд░ рдХреНрдпрд╛ рдЫреБрдЖ рдирд╣реАрдВ рд╣реИ


рд╣рдордиреЗ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд░реВрдк рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓реЛрдВ рдФрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдЬрд╝рд▓ рдФрд░ рдЗрд╕рдХреА рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рджреЗрдЦрд╛, рджреЛрдиреЛрдВ рддреГрддреАрдп-рдкрдХреНрд╖ рдФрд░ рд╣рдорд╛рд░реЗ рдЕрдкрдиреЗред рдореЗрд░реЗ рд╕реНрд╡рд╛рдж рдХреЗ рд▓рд┐рдП, рдпрд╣ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдФрд░ рдмрд╣реБрдд рдЬрд▓реНрджреА рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИред рдХреБрдЫ рддреБрдЪреНрдЫ рдмрд╛рдд рдХрд░рдиреЗ рдФрд░ CmakeCache рдХреЛ рд╕рд╛рдл рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ cmake рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЛ рджреЗрдЦрдиреЗ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИред

рдпрджрд┐ рдЖрдк рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдЕрднреА рднреА рдмрд╣реБрдд рдХреБрдЫ рдмрдЪрд╛ рд╣реБрдЖ рд╣реИ: рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдмрдлрд╝рд░реНрд╕, рд╕реИрдирд┐рдЯрд╛рдЗрдЬрд╝рд░, рдЯреВрд▓рдЪреИрди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╡рд┐рднрд┐рдиреНрди рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ / рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рд▓рд┐рдП рд╕рдВрдХрд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдФрд░ рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЖрдкрдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рдерд╛ред

All Articles