рдкреВрд░рд╛ CMake рдЧрд╛рдЗрдбред рднрд╛рдЧ рдПрдХ: рд╕рд┐рдВрдЯреЗрдХреНрд╕


рдкрд░рд┐рдЪрдп


CMake , C / C ++ рдореЗрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкреИрдХреЗрдЬреЛрдВ рдХреЗ рдкрд░реАрдХреНрд╖рдг, рд╕рдВрдХрд▓рди рдФрд░ рдирд┐рд░реНрдорд╛рдг рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХреА рдЧрдИ рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХрд╛ рдПрдХ рдЦреБрд▓рд╛ рдФрд░ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рд╕реЗрдЯ рд╣реИред рдПрдХ рдмрд╛рд░ рдПрдХ рдЫреЛрдЯреА рд╕реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦрдХрд░ рдЬрд┐рд╕реЗ рд╣рд░ рдХреЛрдИ рд╕рдордЭрддрд╛ рд╣реИ, рдЖрдк рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдЙрд╕реА рдирд┐рд░реНрдорд╛рдг рдХреЛ рдХрд┐рд╕реА рднреА рдордВрдЪ рдкрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВрдЧреЗ рдЬрд╣рд╛рдВ рд╕реАрдПрдордХреЗ рдЙрдкрд▓рдмреНрдз рд╣реИред


CMake рднрд╛рд╖рд╛ , рдПрдХ рдореВрд▓ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдлрд╝рд╛рдЗрд▓ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореЗрдХрдлрд╛рдЗрд▓ рдпрд╛ рдирд┐рдВрдЬрд╛) рдореЗрдВ рдЕрдиреБрд╡рд╛рджрд┐рдд рдХреА рдЬрд╛ рд░рд╣реА рд╣реИ, рд╕рднреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкреНрд░рдмрдВрдзрди рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреА рд╣реИред рдЖрдкрдХреЗ рдирд┐рдкрдЯрд╛рди рдореЗрдВ, рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкрдХреНрд╖ рдкрд░, рдХреЗрд╡рд▓ рдРрд╕реА рдЯреАрдо рд╣реИрдВ рдЬреЛ рдХрд╛рдлреА рдЬрдЯрд┐рд▓ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдореЗрдВ рдмрдирд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИрдВред рд╣рдо рдЙрдирдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗред


рд╕реАрдПрдордХреЗ рд▓реЙрдиреНрдЪ


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


рдЖрджреЗрд╢реЛрдВ


CMake рдореЗрдВ рдХрдорд╛рдВрдб рдХрдИ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рдорд╛рди рд╣реИрдВред рдХрдорд╛рдВрдб рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЙрд╕рдХрд╛ рдирд╛рдо рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдХреЛрд╖реНрдардХреЛрдВ рдореЗрдВ рд╕рдВрд▓рдЧреНрди рддрд░реНрдХ рдкрд╛рд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рджреНрд╡рд╛рд░рд╛ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдХрдВрд╕реЛрд▓ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд▓рд┐рдП message рдХрдорд╛рдВрдб рдореЗрдВ рдЫрд╣ рддрд░реНрдХ рджрд┐рдП рдЧрдП рд╣реИрдВ:


 #    "CMake is the most powerful buildsystem!" message("CMake " "is " "the " "most " "powerful " "buildsystem!") 

рдмрд╣рд╕


рджреЛрд╣рд░реЗ рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрдиреЛрдВ рдореЗрдВ рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рддрд░реНрдХ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдЕрдВрджрд░ рдХреЗ рдЪрд░ рд╕реЗ рдмрдЪрдиреЗ рдФрд░ рдмрджрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред рдЕрдирдзрд┐рдХреГрдд рддрд░реНрдХ рдРрд╕реА рдЪреАрдЬреЛрдВ рдХреЗ рдЙрддреНрдкрд╛рджрди рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдореЗрдВ рд╡рд░реНрдг ()#"\ рдФрд░ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг:


 #  "Hello, my lovely CMake",    "!": message("Hello, my lovely CMake\t!") #  "Hello,_my_lovely_CMake!"  : message(Hello,_my_lovely_CMake!) 

рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рддрд░реНрдХ Walk;around;the;forest рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реВрдЪреА рдореЗрдВ рд╣реЛрдЧрд╛ Walk;around;the;forest Walk around the forest , рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдИ рднреА рдЕрдкрд░рд┐рдЪрд┐рдд рддрд░реНрдХ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдореВрд▓реНрдпреЛрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рдлреИрд▓ рдЬрд╛рддрд╛ рд╣реИ (рдмрд╢рд░реНрддреЗ рдХрд┐ рдореВрд▓ рддрд░реНрдХ рдХреЗ рдореВрд▓реНрдп рдЕрд░реНрдзрд╡рд┐рд░рд╛рдо рд╕реЗ рдЕрд▓рдЧ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ), рд▓реЗрдХрд┐рди рдПрдХ рдбрдмрд▓ рдХреЗ рд╕рд╛рде рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрдиреЛрдВ рдореЗрдВ рдРрд╕рд╛ рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ (рдЕрд░реНрдзрд╡рд┐рд░рд╛рдо рд╡рд░реНрдг рдХреЗрд╡рд▓ рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ)ред рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдЗрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред


рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ


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


рдЪрд░


рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдХреЛ set рдХрдорд╛рдВрдб рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ unset рдХреЙрд▓ рдХрд░рдХреЗ рд╣рдЯрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЖрдк ${VARIABLE} рдирд┐рд░реНрдорд╛рдг рдХрд░рдХреЗ рдПрдХ рдЪрд░ рдХрд╛ рдореВрд▓реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдЪрд░ рдХреЛ рдЕрднреА рддрдХ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдХрд╣реАрдВ рдЗрд╕рдХрд╛ рдореВрд▓реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рддреЛ рдпрд╣ рдЪрд░ рдПрдХ рдЦрд╛рд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ред рдПрдХ рдЙрджрд╛рд╣рд░рдг:


 #   VARIABLE   "Mr. Thomas": set(VARIABLE "Mr. Thomas") #  "His name is: Mr. Thomas": message("His name is: " ${VARIABLE}) #  "'BINGO' is equal to: []",   "BINGO"  : message("'BINGO' is equal to: [${BINGO}]") #   VARIABLE: unset(VARIABLE) 

рд╡рд┐рдХрд▓реНрдк


CMake рд╕реЗрдЯрд┐рдВрдЧ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рдВрд╢реЛрдзрдиреЛрдВ рдХреЗ рдЕрдзреАрди рд╣реИрдВред рд╡рд┐рдХрд▓реНрдк рдЪрд░ рдХреЗ рд╕рдорд╛рди рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ option рдХрдорд╛рдВрдб рджреНрд╡рд╛рд░рд╛ рд╕реЗрдЯ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдХреЗрд╡рд▓ рддреАрди рддрд░реНрдХ рд╣реЛрддреЗ рд╣реИрдВ: рдЪрд░ рдХрд╛ рдирд╛рдо, рдЪрд░ рдХрд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╡рд┐рд╡рд░рдг рдФрд░ рдЪрд░ рдХрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди ( ON рдпрд╛ OFF ):


 #   `USE_ANOTHER_LIBRARY`   # "Do you want to use an another library?"   "OFF": option(USE_ANOTHER_LIBRARY "Do you want to use an another library?" OFF) 

рддрд╛рд░реНрдХрд┐рдХ рднрд╛рд╡


рд╕рд╢рд░реНрдд рдСрдкрд░реЗрдЯрд░реЛрдВ рдФрд░ рдЪрдХреНрд░реАрдп рдирд┐рд░реНрдорд╛рдгреЛрдВ рдХреЗ рдЕрдзреНрдпрдпрди рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдмрдврд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рддрд╛рд░реНрдХрд┐рдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЗ рдХрд╛рдо рдХреЛ рд╕рдордЭрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рддрд╛рд░реНрдХрд┐рдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХрд░рддреЗ рд╕рдордп рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рджреЛ рдореЗрдВ рд╕реЗ рдПрдХ рдорд╛рди рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ: рд╕рд╣реА рдпрд╛ рдЧрд▓рддред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 52 <58 рдХреЗ рдмрд╛рдж рд╕реЗ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ 52 LESS 58 рд╕рд╣реА рд╣реЛрдЧреАред рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ 88 EQUAL 88 рд╕рддреНрдп рд╣реЛрдЧреА, 63 GREATER 104 рдЧрд▓рдд рд╣реЛрдЧреАред рдЖрдк рди рдХреЗрд╡рд▓ рд╕рдВрдЦреНрдпрд╛ рдХреА рддреБрд▓рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рддрд╛рд░, рд╕рдВрд╕реНрдХрд░рдг, рдлрд╛рдЗрд▓реЗрдВ, рд╕реВрдЪреА рд╕рджрд╕реНрдпрддрд╛ рдФрд░ рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рддрд╛рд░реНрдХрд┐рдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреА рдПрдХ рдкреВрд░реА рд╕реВрдЪреА рдпрд╣рд╛рдВ рдкрд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИ ред


рд╕рд╢рд░реНрдд рдмрдпрд╛рди


CMake рдореЗрдВ рд╕рд╢рд░реНрдд рд╕рдВрдЪрд╛рд▓рдХ рдЕрдиреНрдп рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдХреА рддрд░рд╣ рд╣реА рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдХреЗрд╡рд▓ рдкрд╣рд▓рд╛ рд╕рд╢рд░реНрдд рдСрдкрд░реЗрдЯрд░ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рдЬреЛ рдпрд╣ рдЬрд╛рдВрдЪрддрд╛ рд╣реИ рдХрд┐ 5> 1. рджреВрд╕рд░реА рдФрд░ рддреАрд╕рд░реА рд╕реНрдерд┐рддрд┐ рдЭреВрдареА рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ 5 рдПрдХ рд╕реЗ рдХрдо рдпрд╛ рдЙрд╕рдХреЗ рдмрд░рд╛рдмрд░ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред else рдХрдорд╛рдВрдб рдХрдорд╛рдВрдб рдмреНрд▓реЙрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИрдВ, рдФрд░ endif рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдФрд░ рдкрд┐рдЫрд▓реЗ рдЪреЗрдХ рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИред


 #  "Of course, 5 > 1!": if(5 GREATER 1) message("Of course, 5 > 1!") elseif(5 LESS 1) message("Oh no, 5 < 1!") else() message("Oh my god, 5 == 1!") endif() 

рдЪрдХреНрд░


CMake рдореЗрдВ рд▓реВрдкреНрд╕ рдЕрдиреНрдп рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рд▓реВрдк рдХреЗ рд╕рдорд╛рди рд╣реИрдВред рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, VARIABLE рдЪрд░ рдХреЛ Airport рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рддрдм рдЪрд╛рд░ рдиреЗрд╕реНрдЯреЗрдб рдХрдорд╛рдВрдб рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдЬрдм рддрдХ рдХрд┐ VARIABLE рдЪрд░ Airport рдмрд░рд╛рдмрд░ рдирд╣реАрдВ рд╣реЛрддрд╛ред рдЕрдВрддрд┐рдо рдЪреМрдерд╛ set(VARIABLE "Police station") рдХрдорд╛рдВрдб set(VARIABLE "Police station") рдореЗрдВ рдЪреЗрдХ рдХрд┐рдП рдЧрдП рдЪрд░ рдХрд╛ рдорд╛рди рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рджреВрд╕рд░реА рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкрд░ рдкрд╣реБрдВрдЪрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд▓реВрдк рддреБрд░рдВрдд рдмрдВрдж рд╣реЛ рдЬрд╛рдПрдЧрд╛ред endwhile рдЖрджреЗрд╢ рд▓реВрдк рдореЗрдВ рдиреЗрд╕реНрдЯреЗрдб рдХрдорд╛рдВрдб рдХреА рд╕реВрдЪреА рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИред


 #      "VARIABLE is still 'Airport'": set(VARIABLE Airport) while(${VARIABLE} STREQUAL Airport) message("VARIABLE is still '${VARIABLE}'") message("VARIABLE is still '${VARIABLE}'") message("VARIABLE is still '${VARIABLE}'") set(VARIABLE "Police station") endwhile() 

рдпрд╣ рдЙрджрд╛рд╣рд░рдг foreach рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: рдЗрд╕ рд▓реВрдк рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкрд░, VARIABLE рд╡реИрд░рд┐рдПрдмрд▓ рдХреЛ рд╕реВрдЪреА рд╕реЗ рдирд┐рдореНрди рдорд╛рди рдЕрд╕рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ Give me the sugar please! рдФрд░ рдлрд┐рд░ message(${VARIABLE}) рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ VARIABLE рд╡реИрд░рд┐рдПрдмрд▓ рдХреЗ рд╡рд░реНрддрдорд╛рди рдореВрд▓реНрдп рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЬрдм рд╕реВрдЪреА рдореЗрдВ рдХреЛрдИ рдореВрд▓реНрдп рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рд▓реВрдк рдЗрд╕рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдорд╛рдкреНрдд рдХрд░ рджреЗрддрд╛ рд╣реИред endforeach рдХрдорд╛рдВрдб рд▓реВрдк рдореЗрдВ рдиреЗрд╕реНрдЯреЗрдб рдХрдорд╛рдВрдб рдХреА рд╕реВрдЪреА рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИред


 #  "Give me the sugar please!"   : foreach(VARIABLE Give me the sugar please!) message(${VARIABLE}) endforeach() 

foreach рд▓рд┐рдЦрдиреЗ рдХреЗ 3 рдФрд░ рд░реВрдк рд╣реИрдВред рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдкрд╣рд▓рд╛ рдЪрдХреНрд░ рд╕реВрдЪреА рдХреЗ рд╕реНрдерд╛рди рдкрд░ 0 рд╕реЗ 10 рддрдХ рдкреВрд░реНрдгрд╛рдВрдХ рдмрдирд╛рддрд╛ рд╣реИ, рджреВрд╕рд░рд╛ рдЪрдХреНрд░ 3 рд╕реЗ 15 рддрдХ рдХреА рд╕реАрдорд╛ рдореЗрдВ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рддреАрд╕рд░рд╛ рдЪрдХреНрд░ 50 рд╕реЗ 90 рддрдХ рдХреЗ рдЦрдВрдб рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди 10 рдХреЗ рдПрдХ рдЪрд░рдг рдХреЗ рд╕рд╛рдеред


 #  "0 1 2 3 4 5 6 7 8 9 10"   : foreach(VARIABLE RANGE 10) message(${VARIABLE}) endforeach() #  "3 4 5 6 7 8 9 10 11 12 13 14 15"   : foreach(VARIABLE RANGE 3 15) message(${VARIABLE}) endforeach() #  "50 60 70 80 90"   : foreach(VARIABLE RANGE 50 90 10) message(${VARIABLE}) endforeach() 

рдХрд╛рд░реНрдп рдФрд░ рдореИрдХреНрд░реЛрдЬрд╝


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


 #   "print_numbers": function(print_numbers NUM1 NUM2 NUM3) message(${NUM1} " " ${NUM2} " " ${NUM3}) endfunction() #   "print_words": macro(print_words WORD1 WORD2 WORD3) message(${WORD1} " " ${WORD2} " " ${WORD3}) endmacro() #   "print_numbers",   "12 89 225": print_numbers(12 89 225) #   "print_words",   "Hey Hello Goodbye": print_words(Hey Hello Goodbye) 

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


рдореИрдХреНрд░реЛрдЬрд╝ рдЗрд╕ рдЕрдкрд╡рд╛рдж рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рдорд╛рди рд╣реИрдВ рдХрд┐ рдЙрдирдХреЗ рдкрд╛рд╕ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рджрд╛рдпрд░рд╛ рдирд╣реАрдВ рд╣реИ: рдореИрдХреНрд░реЛрдЬрд╝ рдХреЗ рдЕрдВрджрд░ рдХреЗ рд╕рднреА рдЪрд░ рд╡реИрд╢реНрд╡рд┐рдХ рдорд╛рдиреЗ рдЬрд╛рддреЗ рд╣реИрдВред рдЖрдк рдореИрдХреНрд░реЛрдЬрд╝ рдФрд░ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред


рдЬреИрд╕рд╛ рдХрд┐ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ, рд╕реАрдПрдордХреЗ рдореЗрдВ рдореИрдХреНрд░реЛрдЬрд╝ рд╕реА рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ рдореЗрдВ рдореИрдХреНрд░реЛрдЬрд╝ рдХреЗ рд╕рдорд╛рди рд╣реИрдВ: рдпрджрд┐ рдЖрдк рдореИрдХреНрд░реЛ рдмреЙрдбреА рдореЗрдВ return рдХрдорд╛рдВрдб рдбрд╛рд▓рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдХреЙрд▓рд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди (рдпрд╛ рдкреВрд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ) рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓ рдЬрд╛рдПрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ:


 #  ,   : macro(demonstrate_macro) return() endmacro() #  ,   : function(demonstrate_func) demonstrate_macro() message("The function was invoked!") endfunction() #  "Something happened with the function!" demonstrate_func() message("Something happened with the function!") 

рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, demonstrate_func рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкрд╛рд╕ рд╕рдВрджреЗрд╢ рдкреНрд░рд┐рдВрдЯ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рд╣реЛрдЧрд╛ The function was invoked! , рдкрд╣рд▓реЗ рдХреА рддрд░рд╣, рдореИрдХреНрд░реЛ demonstrate_macro рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд╕реНрдерд╛рди рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд demonstrate_macro рдЬрд╛рдПрдЧрд╛ рдФрд░ рдирд┐рдХрд╛рд╕ рдЖрджреЗрд╢ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред


рдкрд╛рд░реНрд╕рд┐рдВрдЧ рддрд░реНрдХ


рдЬреИрд╕рд╛ рдХрд┐ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ, рд╢рдХреНрддрд┐рд╢рд╛рд▓реА cmake_parse_arguments рддрдВрддреНрд░ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдпрд╛ рдореИрдХреНрд░реЛ рдХреЛ рджрд┐рдП рдЧрдП рдкрд╛рд░реНрд╕ рддрд░реНрдХреЛрдВ рдХреЛ рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред


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


рддрд░реНрдХ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рддрдВрддреНрд░ рдХрд╛ рдХрд╛рдо рдкреНрд░рд╛рдкреНрдд рддрд░реНрдХреЛрдВ рдХреЛ рдЪрд░ рдорд╛рдиреЛрдВ рдореЗрдВ рдмрджрд▓рдирд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдХрд▓реНрдк рдФрд░ рдХреАрд╡рд░реНрдб рдХреЗ рд▓рд┐рдП рдорд╛рдирд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдХрдорд╛рдВрдб рдлреЙрд░реНрдо рдХреЗ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЪрд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ <Prefix>_<OptionOrKeyword> , рдЬреЛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдорд╛рди рдХреЛ <Prefix>_<OptionOrKeyword> рдХрд░рддрд╛ рд╣реИред рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд▓рд┐рдП, рдпреЗ рдмреВрд▓рд┐рдпрди рдорд╛рди рд╣реИрдВ (рд╕рддреНрдп - рд╡рд┐рдХрд▓реНрдк рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ; рдЕрдиреНрдпрдерд╛, рдЧрд▓рдд), рдФрд░ рдХреАрд╡рд░реНрдб рдХреЗ рд▓рд┐рдП, рдЙрдирдХреЗ рдмрд╛рдж рд╕реНрдерд┐рдд рд╕рднреА рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдореВрд▓реНрдпред


cmake_parse_arguments рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ cmake_parse_arguments рд▓рд┐рдП рдПрдХ рдХреЙрд▓ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдХреБрдЫ рдЪрд░ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрд╛рдж, рдлрд╝рдВрдХреНрд╢рди рдХреЛ рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ LOW NUMBER 30 COLORS red green blue , рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдЗрд╕реЗ рд╕реНрдХреНрд░реАрди рдкрд░ рдореБрджреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:


 function(custom_function) #       : cmake_parse_arguments(CUSTOM_FUNCTION "LOW;HIGH" "NUMBER" "COLORS" ${ARGV}) #  "'LOW' = [TRUE]": message("'LOW' = [${CUSTOM_FUNCTION_LOW}]") # "'HIGH' = [FALSE]": message("'HIGH' = [${CUSTOM_FUNCTION_HIGH}]") #  "'NUMBER' = [30]": message("'NUMBER' = [${CUSTOM_FUNCTION_NUMBER}]") #  "'COLORS' = [red;green;blue]": message("'COLORS' = [${CUSTOM_FUNCTION_COLORS}]") endfunction() #   "custom_function"   : custom_function(LOW NUMBER 30 COLORS red green blue) 

рд╕реНрдХреЛрдк


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


рдЬреИрд╕рд╛ рдХрд┐ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЪрд░ рдХреЛ set(VARIABLE ... PARENT_SCOPE) рдХрдорд╛рдВрдб set(VARIABLE ... PARENT_SCOPE) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ "рдореВрд▓" рджрд╛рдпрд░реЗ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдЗрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ:


 # ,   "VARIABLE"   # "In the parent scope..."    : function(demonstrate_variable) set(VARIABLE "In the parent scope..." PARENT_SCOPE) endfunction() #   "VARIABLE"    : demonstrate_variable() #      "VARIABLE" : message("'VARIABLE' is equal to: ${VARIABLE}") 

рдпрджрд┐ PARENT_SCOPE VARIABLE рд╡реИрд░рд┐рдПрдмрд▓ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ PARENT_SCOPE рд╣реИ, рддреЛ рд╡реИрд░рд┐рдПрдмрд▓ рдХреЗрд╡рд▓ PARENT_SCOPE рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рд╕реБрд▓рдн рд╣реЛрдЧрд╛, рдФрд░ рд╡реИрд╢реНрд╡рд┐рдХ рд╕реНрдХреЛрдк рдореЗрдВ рдпрд╣ рдПрдХ рдЦрд╛рд▓реА рдорд╛рди рд▓реЗрдЧрд╛ред


рдирд┐рд╖реНрдХрд░реНрд╖


рдпрд╣ CMake рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред рдЕрдЧрд▓рд╛ рд▓реЗрдЦ рд▓рдЧрднрдЧ рдПрдХ рджреЛ рджрд┐рдиреЛрдВ рдореЗрдВ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рд╕реАрдПрдордХреЗ рдмрд┐рд▓реНрдб рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдкреЗрд╢ рдХрд░реЗрдЧрд╛ред рдЬрд▓реНрдж рдорд┐рд▓рддреЗ рд╣реИрдВ!

Source: https://habr.com/ru/post/hi431428/


All Articles