рд╢рд╛рдпрдж рд╣рдо рдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рдкрд╕рдВрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЬрдм рд╣рд░ рджреВрд╕рд░рд╛ рдЕрдирдВрдд рдХрд╛рд▓ рдХреА рддрд░рд╣ рд╣реЛрддрд╛ рд╣реИред рдФрд░ рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реИ рдЕрдЧрд░ рдпрд╣ рдХрд╛рдо рдХреЗ рдШрдВрдЯреЗ, рдФрд░ рдЖрдк рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣ рдХреА рд╕рднреА рдХрдорд┐рдпреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рддреЗ рд╣реБрдП, рдПрдХ рдЧрд┐рд▓рд╛рд╕ рдХреЙрдлреА рдХреЗ рд╕рд╛рде рд╕рдордп рдЧреБрдЬрд╛рд░ рд╕рдХрддреЗ рд╣реИрдВред
рдХрднреА-рдХрднреА, CMake рдЕрдиреБрдХреВрд▓рди рдкреНрд░рджрд░реНрд╢рди рдХрд░рдХреЗ рдХреБрдЫ рд╕рдлрд▓рддрд╛ рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред рдпрд╣рд╛рдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рддрдХрдиреАрдХ рдПрдХ рд╕рд░рд▓ рд╡рд┐рдЪрд╛рд░ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ: рджреЛ рд╕реНрдерд┐рд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЬреЛ рдПрдХ-рджреВрд╕рд░реЗ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╕рд╛рде рдЗрдХрдЯреНрдард╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдереЛрдбрд╝рд╛ рд╕рд╛ рд╢рд░реАрд░ рд░рдЪрдирд╛ рд╡рд┐рдЬреНрдЮрд╛рди
рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕реНрдереИрддрд┐рдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдмрдирд╛рдиреЗ рдХреЗ рдмреБрдирд┐рдпрд╛рджреА рдЪрд░рдгреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
- рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ - рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓реЛрдВ рд╕реЗ рд╕рднреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рд╣рдЯрд╛рддрд╛ рд╣реИ, рд╣реЗрдбрд░ рдлрд╛рдЗрд▓реЗрдВ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЧрдгрдирд╛ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдореИрдХреНрд░реЛрдЬрд╝ рдХреЛ рдмрджрд▓рддрд╛ рд╣реИред
- рд╕рдВрдХрд▓рдХ - рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдХреЛрдбрд╛рдВрддрд░рдХ рдХреЛрдб рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИред
- рдХреЛрдбрд╛рдВрддрд░рдХ - рдорд╢реАрди рдХреЛрдб рдореЗрдВ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЛрдб рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рддрд╛ рд╣реИ; рдкрд░рд┐рдгрд╛рдо рдСрдмреНрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╣реЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред
- рдЕрднрд┐рд▓реЗрдЦрд╛рдЧрд╛рд░ - рдПрдХ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░реЗрдВред
рд░реЗрдЦрд╛рдВрдХрди, рдЗрди рдЪрд░рдгреЛрдВ рдХреЛ рдЖрд░реЗрдЦ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:
, . , . . , , .
, , CMake target_link_libraries. :
target_link_libraries(staticC PRIVATE staticB)
, тАФ staticC
staticB
. , , , staticC
, staticB
.
, CoherentDeps, :
, staticC
staticB
, .
, , , ( , ) INTERFACE
, -meta ( , ). , -, .
target_link_libraries
.
, :
: NonCoherentDeps.
:
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
, , .
рдореЗрдЯрд╛-рдкреИрдХреЗрдЬ рдореЗрдВ рднреА рдЖрдк рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдорд╛рдВрдб рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдирд┐рд░реНрднрд░рддрд╛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЧреБрдг рд╕рд╣реА рдкрде рд╣реИрдВред