рд╕реНрдереИрддрд┐рдХ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд▓рд┐рдП CMake рдЕрдиреБрдХреВрд▓рди

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


рдХрднреА-рдХрднреА, CMake рдЕрдиреБрдХреВрд▓рди рдкреНрд░рджрд░реНрд╢рди рдХрд░рдХреЗ рдХреБрдЫ рд╕рдлрд▓рддрд╛ рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред рдпрд╣рд╛рдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рддрдХрдиреАрдХ рдПрдХ рд╕рд░рд▓ рд╡рд┐рдЪрд╛рд░ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ: рджреЛ рд╕реНрдерд┐рд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЬреЛ рдПрдХ-рджреВрд╕рд░реЗ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╕рд╛рде рдЗрдХрдЯреНрдард╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


рдереЛрдбрд╝рд╛ рд╕рд╛ рд╢рд░реАрд░ рд░рдЪрдирд╛ рд╡рд┐рдЬреНрдЮрд╛рди


рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕реНрдереИрддрд┐рдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдмрдирд╛рдиреЗ рдХреЗ рдмреБрдирд┐рдпрд╛рджреА рдЪрд░рдгреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:


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

рд░реЗрдЦрд╛рдВрдХрди, рдЗрди рдЪрд░рдгреЛрдВ рдХреЛ рдЖрд░реЗрдЦ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:



, . , . . , , . 



, , CMake target_link_libraries. :


target_link_libraries(staticC PRIVATE staticB)

, тАФ staticC staticB. , , , staticC, staticB.


, CoherentDeps, :



, staticC staticB, .



, , , ( , ) INTERFACE, -meta ( , ). , -, .


target_link_libraries .


, :



: NonCoherentDeps.


:


  • staticA
  • staticB
  • staticC

NonCoherentDeps.


staticB staticA, staticC staticB, NonCoherentDeps staticC. :



CMake- staticA - :


add_library(staticA-meta INTERFACE)
target_include_directories(staticA-meta  INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}")

, :


target_link_libraries(staticA PUBLIC staticA-meta)

staticB CMake


target_link_libraries(staticB PRIVATE staticA)

:


target_link_libraries(staticB PRIVATE staticA-meta)

staticA staticB, . staticB staticA .


:



тАФ :


add_executable(NonCoherentDeps main.cpp)
target_link_libraries(NonCoherentDeps PRIVATE staticC staticB staticA )


, .
, staticA, target_include_directories. NonCoherentDeps, :


target_include_directories(staticB PRIVATE "${path_to_headers_in_staticA}")

:


target_link_libraries(staticB PRIVATE staticA-meta)

, staticB staticA, staticC :


target_include_directories(staticC PRIVATE "${path_to_headers_in_staticB}" "${path_to_headers_in_staticA}")

. :


target_link_libraries(staticB-meta INTERFACE staticA-meta)

staticC :


target_link_libraries(staticC INTERFACE staticB-meta)

staticB, , .


рдореЗрдЯрд╛-рдкреИрдХреЗрдЬ рдореЗрдВ рднреА рдЖрдк рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдорд╛рдВрдб рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдирд┐рд░реНрднрд░рддрд╛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЧреБрдг рд╕рд╣реА рдкрде рд╣реИрдВред

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


All Articles