рдкреВрд░рд╛ CMake рдЧрд╛рдЗрдбред рднрд╛рдЧ рджреЛ: рдмрд┐рд▓реНрдб рд╕рд┐рд╕реНрдЯрдо


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


рдпрд╣ рд▓реЗрдЦ рднрд╛рд░реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ C / C ++ рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдореЗрдВ рдкреНрд░рдпреБрдХреНрдд CMake рдмрд┐рд▓реНрдб рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдЙрдкрдпреЛрдЧ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рджреГрдврд╝рддрд╛ рд╕реЗ рдЕрдиреБрд╢рдВрд╕рд╛ рдХреА рдЬрд╛рддреА рд╣реИ рдХрд┐ рдЖрдк рд╕реАрдПрдордХреЗ рднрд╛рд╖рд╛ рдХреЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рдЧрд▓рдд рд╕рдордЭрдиреЗ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдиреБрдЕрд▓ рдХрд╛ рдкрд╣рд▓рд╛ рднрд╛рдЧ рдкрдврд╝реЗрдВ, рдЬреЛ рдкреВрд░реЗ рд▓реЗрдЦ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред


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


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


рдХрд╛рд░реНрдп рд╕рд┐рджреНрдзрд╛рдВрдд


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


CMake рдмрд┐рд▓реНрдб рд╕рд┐рд╕реНрдЯрдо рдФрдкрдЪрд╛рд░рд┐рдХ CMake рднрд╛рд╖рд╛ рдореЗрдВ рдмрд┐рд▓реНрдб рдирд┐рдпрдореЛрдВ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде CMakeLists.txt рдлрд╛рдЗрд▓ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЖрдкрдХреЗ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд░ рд╕реНрд╡реАрдХреГрдд рдЙрд╕реА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдордзреНрдпрд╡рд░реНрддреА рдФрд░ рджреЗрд╢реА рдмрд┐рд▓реНрдб рдлрд╛рдЗрд▓реЗрдВ рдмрдирд╛рддрд╛ рд╣реИред


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


рд╕реАрдПрдордХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреА рдЬрд╛рдБрдЪ


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


 #     CMake: cmake_minimum_required(VERSION 3.0) 

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


рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдбрд┐рдЬрд╛рдЗрди


рдХрд┐рд╕реА рднреА CMakeLists.txt рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ CMakeLists.txt рдПрдХреАрдХреГрдд рд╡рд╛рддрд╛рд╡рд░рдг рдФрд░ рдЕрдиреНрдп рд╡рд┐рдХрд╛рд╕ рд╕рд╛рдзрдиреЛрдВ рдХреЗ рд╕рд╛рде рдмреЗрд╣рддрд░ рдбрд┐рдЬрд╛рдЗрди рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЯреАрдо рдХреЗ рд╕рд╛рде рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред


 #    "MyProject": project(MyProject VERSION 1.2.3.4 LANGUAGES C CXX) 

рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдпрджрд┐ LANGUAGES рдХреАрд╡рд░реНрдб рдЫреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рднрд╛рд╖рд╛ C CXX ред рдЖрдк рдХреАрд╡рд░реНрдб NONE рдХреЛ рднрд╛рд╖рд╛рдУрдВ рдХреА рд╕реВрдЪреА рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдЦрдХрд░ рдХрд┐рд╕реА рднреА рднрд╛рд╖рд╛ рдХреЗ рд╕рдВрдХреЗрдд рдХреЛ рдЕрдХреНрд╖рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдХреЗрд╡рд▓ рдПрдХ рдЦрд╛рд▓реА рд╕реВрдЪреА рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред


рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЪрд▓рд╛рдирд╛


include рдХрдорд╛рдВрдб рдЕрдкрдиреЗ рдХреЙрд▓ рдХреА рд▓рд╛рдЗрди рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдХреЛрдб рдХреЗ рд╕рд╛рде рдмрджрд▓ рджреЗрддреА рд╣реИ, C / C ++ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕ рдХреЗ рд╕рдорд╛рди рдХрд╛рд░реНрдп рдХрд░рддреА рд╣реИред рдпрд╣ рдЙрджрд╛рд╣рд░рдг рд╡рд░реНрдгрд┐рдд рдХрдорд╛рдВрдб рдХреЗ MyCMakeScript.cmake рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд╝рд╛рдЗрд▓ MyCMakeScript.cmake рдЪрд▓рд╛рддрд╛ рд╣реИ:


 message("'TEST_VARIABLE' is equal to [${TEST_VARIABLE}]") #   `MyCMakeScript.cmake`  : include(MyCMakeScript.cmake) message("'TEST_VARIABLE' is equal to [${TEST_VARIABLE}]") 

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдкрд╣рд▓рд╛ рд╕рдВрджреЗрд╢ рд╕реВрдЪрд┐рдд рдХрд░реЗрдЧрд╛ рдХрд┐ TEST_VARIABLE рдЪрд░ TEST_VARIABLE рдЕрднреА рддрдХ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрджрд┐ MyCMakeScript.cmake рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЗрд╕ рдЪрд░ MyCMakeScript.cmake рд╣реИ, рддреЛ рджреВрд╕рд░рд╛ рд╕рдВрджреЗрд╢ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд░реАрдХреНрд╖рдг рдЪрд░ рдХреЗ рдирдП рдореВрд▓реНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реВрдЪрд┐рдд рдХрд░реЗрдЧрд╛ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, include рдХрдорд╛рдВрдб рджреНрд╡рд╛рд░рд╛ рд╢рд╛рдорд┐рд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд╝рд╛рдЗрд▓ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рджрд╛рдпрд░рд╛ рдирд╣реАрдВ рдмрдирд╛рддреА рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ ред


рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рд╕рдВрдХрд▓рди


add_executable рдХрдорд╛рдВрдб рд╕реНрд░реЛрдд рд╕реВрдЪреА рд╕реЗ рджрд┐рдП рдЧрдП рдирд╛рдо рдХреЗ рд╕рд╛рде рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдЕрдВрддрд┐рдо рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рд▓рдХреНрд╖реНрдп рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, <ExecutableName>.exe рдпрд╛ рдмрд╕ <ExecutableName> )ред рдЗрд╕ рдЖрджреЗрд╢ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг:


 #    "MyExecutable"  #  "ObjectHandler.c", "TimeManager.c"  "MessageGenerator.c": add_executable(MyExecutable ObjectHandler.c TimeManager.c MessageGenerator.c) 

рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕рдВрдХрд▓рди


add_library рдЖрджреЗрд╢ рд╕реНрд░реЛрдд рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рджреГрд╢реНрдп рдФрд░ рдирд╛рдо рдХреЗ рд╕рд╛рде рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдЕрдВрддрд┐рдо рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдирд╛рдо рд▓рдХреНрд╖реНрдп рдордВрдЪ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, lib<LibraryName>.a рдпрд╛ <LibraryName>.lib )ред рдЗрд╕ рдЖрджреЗрд╢ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг:


 #    "MyLibrary"  #  "ObjectHandler.c", "TimeManager.c"  "MessageConsumer.c": add_library(MyLibrary STATIC ObjectHandler.c TimeManager.c MessageConsumer.c) 

  • рд╕реНрдЯреЗрдЯрд┐рдХ рдХреАрд╡рд░реНрдб рдХреЛ рд╕реНрдЯреЗрдЯрд┐рдХ рдХреАрд╡рд░реНрдб рджреНрд╡рд╛рд░рд╛ рджреВрд╕рд░реЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдпрд╣ рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓реЛрдВ рдФрд░ рдЕрдиреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рд╕реЗ рдЬреБрдбрд╝реА рдСрдмреНрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рд╕рдВрдЧреНрд░рд╣ рд╣реЛрддрд╛ рд╣реИ;
  • рдбрд╛рдпрдирд╛рдорд┐рдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рджреВрд╕рд░реЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ SHARED рдХреАрд╡рд░реНрдб рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рджреНрд╡рд╛рд░рд╛ рд▓реЛрдб рдХрд┐рдП рдЧрдП рдмрд╛рдЗрдирд░реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИрдВ;
  • рдореЙрдбреНрдпреВрд▓рд░ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рджреВрд╕рд░реЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ MODULE рдХреАрд╡рд░реНрдб рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рддрдХрдиреАрдХ рджреНрд╡рд╛рд░рд╛ рдирд┐рд╖реНрдкрд╛рджрди рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдмрд╛рдЗрдирд░реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рднрд░реА рд╣реБрдИ рд╣реИрдВ;
  • рдСрдмреНрдЬреЗрдХреНрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ OBJECT рдХреАрд╡рд░реНрдб рджреНрд╡рд╛рд░рд╛ рджреВрд╕рд░реЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдпрд╣ рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓реЛрдВ рдФрд░ рдЕрдиреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рд╕реЗ рдЬреБрдбрд╝реА рдСрдмреНрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реИред

рд▓рдХреНрд╖реНрдп рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдЬреЛрдбрд╝рдирд╛


рдРрд╕реЗ рдорд╛рдорд▓реЗ рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рд▓рдХреНрд╖реНрдп рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдПрдХрд╛рдзрд┐рдХ рдкрд░рд┐рд╡рд░реНрдзрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, target_sources рдХрдорд╛рдВрдб target_sources рдХреА target_sources , рдЬреЛ рдХрдИ рдмрд╛рд░ рд╕реНрд░реЛрддреЛрдВ рдХреЛ рд▓рдХреНрд╖реНрдп рдореЗрдВ рдЬреЛрдбрд╝ рд╕рдХрддреА рд╣реИред


target_sources рдХрдорд╛рдВрдб рдореЗрдВ рдкрд╣рд▓рд╛ рддрд░реНрдХ add_library рдпрд╛ add_executable рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╣рд▓реЗ рдмрддрд╛рдП рдЧрдП рд▓рдХреНрд╖реНрдп рдХрд╛ рдирд╛рдо рд╣реИ, рдФрд░ рдмрд╛рдж рдХреЗ рддрд░реНрдХреЛрдВ рдХреЛ рдЬреЛрдбрд╝реЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реИред


рдмрд╛рд░-рдмрд╛рд░ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП target_sources рдЙрд╕ рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд▓рдХреНрд╖реНрдп рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдЬрд┐рд╕ рдХреНрд░рдо рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдмреБрд▓рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдиреАрдЪреЗ рдХреЗ рджреЛ рдмреНрд▓реЙрдХ рдХреЛрдб рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рд╕рдорддреБрд▓реНрдп рд╣реИрдВ:


 #    "MyExecutable"   # "ObjectPrinter.c"  "SystemEvaluator.c": add_executable(MyExecutable ObjectPrinter.c SystemEvaluator.c) #    "MyExecutable"  "MessageConsumer.c": target_sources(MyExecutable MessageConsumer.c) #    "MyExecutable"  "ResultHandler.c": target_sources(MyExecutable ResultHandler.c) 

 #    "MyExecutable"   # "ObjectPrinter.c", "SystemEvaluator.c", "MessageConsumer.c"  "ResultHandler.c": add_executable(MyExecutable ObjectPrinter.c SystemEvaluator.c MessageConsumer.c ResultHandler.c) 

рдЬрдирд░реЗрдЯ рдХреА рдЧрдИ рдлрд╛рдЗрд▓реЗрдВ


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


  • рдЪрд░ RUNTIME_OUTPUT_DIRECTORY рдФрд░ RUNTIME_OUTPUT_NAME рдирд┐рд╖реНрдкрд╛рджрди рд▓рдХреНрд╖реНрдпреЛрдВ рдХрд╛ рд╕реНрдерд╛рди рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ;
  • LIBRARY_OUTPUT_DIRECTORY рдФрд░ LIBRARY_OUTPUT_NAME рдЪрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд╕реНрдерд╛рди рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ;
  • рдЪрд░ ARCHIVE_OUTPUT_DIRECTORY рдФрд░ ARCHIVE_OUTPUT_NAME рдЕрднрд┐рд▓реЗрдЦрд╛рдЧрд╛рд░ рдХрд╛ рд╕реНрдерд╛рди рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред

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


рдпрд╣ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ Cygwin рд╕рд╣рд┐рдд рд╕рднреА рд╡рд┐рдВрдбреЛрдЬ-рдЖрдзрд╛рд░рд┐рдд рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреЛ "DLL рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо" рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред


рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд▓реЗрдЖрдЙрдЯ


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


 #    "MyExecutable"  #  "JsonParser", "SocketFactory"  "BrowserInvoker": target_link_libraries(MyExecutable JsonParser SocketFactory BrowserInvoker) 

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


рд▓рдХреНрд╖реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ


рдЬреИрд╕рд╛ рдХрд┐ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╕реАрдПрдордХреЗ рдореЗрдВ рд▓рдХреНрд╖реНрдп рднреА рдореИрдиреБрдЕрд▓ рд╣реЗрд░рдлреЗрд░ рдХреЗ рдЕрдзреАрди рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдмрд╣реБрдд рд╕реАрдорд┐рдд рд╣реИрдВред


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


 #   "VALUE"   "C_STANDARD": get_target_property(VALUE MyTarget C_STANDARD) #      : message("'C_STANDARD' property is equal to [${VALUE}]") 

set_target_properties рдХрдорд╛рдВрдб рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд▓рдХреНрд╖реНрдп рдЧреБрдгреЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдорд╛рдиреЛрдВ рдкрд░ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдХрдорд╛рдВрдб рдЙрди рд▓рдХреНрд╖реНрдпреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╕рдВрдкрддреНрддрд┐ рдорд╛рди рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗ, рдФрд░ рдлрд┐рд░ рдХреАрд╡рд░реНрдб PROPERTIES , рдЗрд╕рдХреЗ рдмрд╛рдж рдкреНрд░рдкрддреНрд░ рдХреА рдПрдХ рд╕реВрдЪреА < > < > :


 #   'C_STANDARD'  "11", #   'C_STANDARD_REQUIRED'  "ON": set_target_properties(MyTarget PROPERTIES C_STANDARD 11 C_STANDARD_REQUIRED ON) 

рдКрдкрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдЙрджрд╛рд╣рд░рдг MyTarget рд▓рдХреНрд╖реНрдп рдЧреБрдгреЛрдВ рдХреЛ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╕рдВрдХрд▓рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рддреН: MyTarget рд▓рдХреНрд╖реНрдп рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддреЗ MyTarget CMake рдХреЛ C11 рдорд╛рдирдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдХрд▓рдХ рдХреА MyTarget рд╣реЛрдЧреАред рд╕рднреА рдЬреНрдЮрд╛рдд рд▓рдХреНрд╖реНрдп рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдирд╛рдордХрд░рдг рдЗрд╕ рдкреГрд╖реНрда рдкрд░ рд╕реВрдЪреАрдмрджреНрдз рд╣реИред


if(TARGET <TargetName>) рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╣рд▓реЗ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд▓рдХреНрд╖реНрдпреЛрдВ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ:


 #  "The target was defined!"   "MyTarget"  , #    "The target was not defined!": if(TARGET MyTarget) message("The target was defined!") else() message("The target was not defined!") endif() 

рдЙрдкрдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЬреЛрдбрд╝рдирд╛


add_subdirectory рдХрдорд╛рдВрдб CMake рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ add_subdirectory рдлрд╝рд╛рдЗрд▓ рдХреЛ рддреБрд░рдВрдд рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИред рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рдЙрджрд╛рд╣рд░рдг рд╡рд░реНрдгрд┐рдд рддрдВрддреНрд░ рдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ:


 #   "subLibrary"    , #       "subLibrary/build": add_subdirectory(subLibrary subLibrary/build) 

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, add_subdirectory рдХрдорд╛рдВрдб рдХреЗ рд▓рд┐рдП рдкрд╣рд▓рд╛ рддрд░реНрдХ рдЙрдк- add_subdirectory , рдФрд░ рджреВрд╕рд░рд╛ рддрд░реНрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ CMakeCache.txt (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, CMakeCache.txt рдФрд░ cmake_install.cmake ) рдХреА рдЙрддреНрдкрдиреНрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЗрдЪреНрдЫрд┐рдд рдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ CMake рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИред


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


рдкреИрдХреЗрдЬ рдЦреЛрдЬ


find_package рдХрдорд╛рдВрдб рдмрд╛рд╣рд░реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА рд╕реЗрдЯрд┐рдВрдЧ рдвреВрдВрдврддрд╛ рд╣реИ рдФрд░ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИред рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЗрд╕реЗ рдмрд╛рд╣рд░реА рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдЬреИрд╕реЗ рдмреВрд╕реНрдЯ рдФрд░ рдЬреАрдПрд╕рдПрд▓ рдХреЗ рдмрд╛рдж рдХреЗ рд▓рд┐рдВрдХрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдЙрджрд╛рд╣рд░рдг рд╡рд░реНрдгрд┐рдд рдХрдорд╛рдВрдб рдХреЛ GSL рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдФрд░ рдлрд┐рд░ рд▓рд┐рдВрдХ рдХреЗ рд▓рд┐рдП рдЦреЛрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реИ:


 #     "GSL": find_package(GSL 2.5 REQUIRED) #      "GSL": target_link_libraries(MyExecutable GSL::gsl) #      "GSL": target_include_directories(MyExecutable ${GSL_INCLUDE_DIRS}) 

рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, find_package рдХрдорд╛рдВрдб рдкреИрдХреЗрдЬ рдХреЗ рдирд╛рдо рдХреЛ find_package рдкрд╣рд▓реЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЖрд╡рд╢реНрдпрдХ рд╕рдВрд╕реНрдХрд░рдгред REQUIRED рд╡рд┐рдХрд▓реНрдк рди рдорд┐рд▓рдиреЗ рдкрд░ рдШрд╛рддрдХ рддреНрд░реБрдЯрд┐ рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рдирд╛ рдФрд░ рд╕реАрдПрдордХреЗ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рд╡рд┐рдкрд░реАрдд QUIET рд╡рд┐рдХрд▓реНрдк рд╣реИ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╕реАрдПрдордХреЗ рдХреЛ рдЕрдкрдирд╛ рдХрд╛рдо рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рдкреИрдХреЗрдЬ рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реЛред


рдЕрдЧрд▓рд╛, MyExecutable GSL рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ MyExecutable GSL::gsl рд╡реИрд░рд┐рдПрдмрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ MyExecutable рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рд╛ рд╣реБрдЖ target_link_libraries , рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╕рдВрдХрд▓рд┐рдд GSL рдХреЗ рд╕реНрдерд╛рди рдХреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░рддрд╛ рд╣реИред


рдЕрдВрдд рдореЗрдВ, target_include_directories рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕реНрдерд╛рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдВрдХрд▓рдХ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рддреЗ рд╣реБрдП target_include_directories рдХрдорд╛рдВрдб рдХреЛ target_include_directories ред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ GSL_INCLUDE_DIRS рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рд╣реЗрдбрд░реЛрдВ GSL_INCLUDE_DIRS рд╕реНрдерд╛рди рдХреЛ GSL_INCLUDE_DIRS рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдпрд╣ рдЖрдпрд╛рддрд┐рдд рдкреИрдХреЗрдЬ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ)ред


рдпрджрд┐ рдЖрдк QUIET рд╡рд┐рдХрд▓реНрдк рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЖрдк рд╢рд╛рдпрдж рдкреИрдХреЗрдЬ рдЦреЛрдЬ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдпрд╣ <PackageName>_FOUND рдЬрд╛рдБрдЪ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ find_package рдХрдорд╛рдВрдб рдХреЗ find_package рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реЛрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдк GSL рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЖрдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ GSL_FOUND рдЪрд░ рд╕рдЪ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред


рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, find_package рдХрдорд╛рдВрдб рдореЗрдВ рд▓реЙрдиреНрдЪ рдХреЗ рджреЛ рдлреНрд▓реЗрд╡рд░ рд╣реЛрддреЗ рд╣реИрдВ: рдореЙрдбреНрдпреВрд▓рд░ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рдиред рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдиреЗ рдПрдХ рдореЙрдбреНрдпреВрд▓рд░ рд░реВрдк рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рдХрдорд╛рдВрдб рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ CMake рдлреЙрд░реНрдо рдХреА рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд╝рд╛рдЗрд▓ рдЦреЛрдЬрддрд╛ рд╣реИ Find<PackageName>.cmake рдХреЛ CMAKE_MODULE_PATH рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдЦреЛрдЬреЗрдВ, рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рд▓реЙрдиреНрдЪ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдЖрдпрд╛рдд рдХрд░рддрд╛ рд╣реИ (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, CMake рдиреЗ рдорд╛рдирдХ FindGSL.cmake рдлрд╝рд╛рдЗрд▓ рд▓реЙрдиреНрдЪ рдХреА рд╣реИ)ред


рд╣реЗрдбрд░ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ


рдЖрдк рджреЛ рдЖрджреЗрд╢реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╢рд╛рдорд┐рд▓ рд╣реЗрдбрд░реЛрдВ рдХреЗ рд╕реНрдерд╛рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдВрдХрд▓рдХ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: include_directories рдФрд░ target_include_directories ред рдЖрдк рддрдп рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдЙрдирдХреЗ рдмреАрдЪ рдХреБрдЫ рдЕрдВрддрд░реЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ (рд╡рд┐рдЪрд╛рд░ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд╕реБрдЭрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ)ред


include_directories рдЖрджреЗрд╢ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рджрд╛рдпрд░реЗ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕ рдХрдорд╛рдВрдб рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рднреА рд╣реЗрдбрд░ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд░реНрддрдорд╛рди CMakeLists.txt рд╕рднреА рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд╕рд╛рде рд╣реА CMakeLists.txt рд▓рд┐рдП рднреА ( add_subdirectory рджреЗрдЦреЗрдВ)ред


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


 add_executable(RequestGenerator RequestGenerator.c) add_executable(ResponseGenerator ResponseGenerator.c) #     "RequestGenerator": target_include_directories(RequestGenerator headers/specific) #    "RequestGenerator"  "ResponseGenerator": include_directories(headers) 

рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдпрд╣ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдЖрдзреБрдирд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ link_libraries рдФрд░ link_libraries рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрд╡рд╛рдВрдЫрдиреАрдп рд╣реИред рдПрдХ рд╡рд┐рдХрд▓реНрдк target_include_directories рдФрд░ target_link_libraries рдЬреЛ рдХреЗрд╡рд▓ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд▓рдХреНрд╖реНрдпреЛрдВ рдкрд░ рдХрд╛рд░реНрдп рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдкреВрд░реЗ рд╡рд░реНрддрдорд╛рди рджрд╛рдпрд░реЗ рдкрд░ рдирд╣реАрдВред


рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реНрдерд╛рдкрдирд╛


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


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


 #   "TimePrinter"  "DataScanner"   "bin": install(TARGETS TimePrinter DataScanner DESTINATION bin) 

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


 #   "DataCache.txt"  "MessageLog.txt"   "~/": install(FILES DataCache.txt MessageLog.txt DESTINATION ~/) 

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


 #   "MessageCollection"  "CoreFiles"   "~/": install(DIRECTORY MessageCollection CoreFiles DESTINATION ~/) 

рдЕрдкрдиреА рд╕рднреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ CMake рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк sudo checkinstall (рдпрджрд┐ CMake рдореЗрдХрдлрд╛рдЗрд▓ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ) рдХреЗ рд╕рд╛рде рд╕рднреА рд╡рд░реНрдгрд┐рдд рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ CMake рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдПрдХреАрдХреГрдд рд╡рд┐рдХрд╛рд╕ рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рд╕рд╛рде рдпрд╣ рдХреНрд░рд┐рдпрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рджреГрд╢реНрдп рдЙрджрд╛рд╣рд░рдг


рдпрд╣ рдЧрд╛рдЗрдб CMake рдмрд┐рд▓реНрдб рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдП рдмрд┐рдирд╛ рдкреВрд░рд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдХреЗрд╡рд▓ рдирд┐рд░реНрдорд╛рдг рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд░реВрдк рдореЗрдВ CMake рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдПрдХ рд╕рд░рд▓ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЖрд░реЗрдЦ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:


 + MyProject - CMakeLists.txt - Defines.h - StartProgram.c + core - CMakeLists.txt - Core.h - ProcessInvoker.c - SystemManager.c 

рдореБрдЦреНрдп рдЕрд╕реЗрдВрдмрд▓реА рдлрд╝рд╛рдЗрд▓ CMakeLists.txt рдкреВрд░реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд╕рдВрдХрд▓рди рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреА рд╣реИ: рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, add_executable рдХрдорд╛рдВрдб рдХреЛ add_executable рд╣реИ рдЬреЛ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдлрд┐рд░ add_subdirectory рдХрдорд╛рдВрдб рдХреЛ add_subdirectory , рдЬреЛ add_subdirectory рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЙрддреНрддреЗрдЬрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЕрдВрдд рдореЗрдВ, рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рд╕рдВрдХрд▓рд┐рдд рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ рдЬреБрдбрд╝реА рд╣реЛрддреА рд╣реИ:


 #    CMake: cmake_minimum_required(VERSION 3.0) #   : project(MyProgram VERSION 1.0.0 LANGUAGES C) #      "MyProgram": add_executable(MyProgram StartProgram.c) #    "core/CMakeFiles.txt": add_subdirectory(core) #    "MyProgram"  #    "MyProgramCore": target_link_libraries(MyProgram MyProgramCore) #    "MyProgram"   "bin": install(TARGETS MyProgram DESTINATION bin) 

core/CMakeLists.txt рдлрд╝рд╛рдЗрд▓ рдХреЛ рдореБрдЦреНрдп рдЕрд╕реЗрдВрдмрд▓реА рдлрд╝рд╛рдЗрд▓ рджреНрд╡рд╛рд░рд╛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП MyProgramCore рд╕реНрдерд┐рд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рд╕рдВрдХрд▓рди рдХрд░рддрд╛ рд╣реИ:


 #    CMake: cmake_minimum_required(VERSION 3.0) #      "MyProgramCore": add_library(MyProgramCore STATIC ProcessInvoker.c SystemManager.c) 

cmake . && make && sudo checkinstall рдХрдорд╛рдВрдб рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдмрд╛рдж cmake . && make && sudo checkinstall cmake . && make && sudo checkinstall CMake рдмрд┐рд▓реНрдб рд╕рд┐рд╕реНрдЯрдо рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреВрд░рд╛ рд╣реЛрддрд╛ рд╣реИред рдкрд╣рд▓рд╛ рдХрдорд╛рдВрдб рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдЯ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ CMakeLists.txt рдлрд╛рдЗрд▓ рдХреЛ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ, рджреВрд╕рд░рд╛ рдХрдорд╛рдВрдб рдЕрдВрдд рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдмрд╛рдЗрдирд░реА рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рддреАрд╕рд░рд╛ рдХрдорд╛рдВрдб рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд MyProgram рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИред


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


рдЕрдм рдЖрдк рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд▓рд┐рдЦрдиреЗ рдФрд░ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреА рд╕реАрдПрдордХреЗ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рдордЭрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИрдВ, рдФрд░ рдЖрдк рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдЕрдиреНрдп рддрдВрддреНрд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред


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

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


All Articles