ENH: Mention cycles in target_link_libraries docs

This documents CMake's support for cycles in the dependency graph of
STATIC libraries.
This commit is contained in:
Brad King 2009-06-24 13:24:50 -04:00
parent f74b876a58
commit 4266d54adb
1 changed files with 22 additions and 0 deletions

View File

@ -107,6 +107,28 @@ public:
"the LINK_INTERFACE_LIBRARIES property. "
"Libraries specified as \"general\" (or without any keyword) are "
"treated as if specified for both \"debug\" and \"optimized\"."
"\n"
"The library dependency graph is normally acyclic (a DAG), but in the "
"case of mutually-dependent STATIC libraries CMake allows the graph "
"to contain cycles (strongly connected components). "
"When another target links to one of the libraries CMake repeats "
"the entire connected component. "
"For example, the code\n"
" add_library(A STATIC a.c)\n"
" add_library(B STATIC b.c)\n"
" target_link_libraries(A B)\n"
" target_link_libraries(B A)\n"
" add_executable(main main.c)\n"
" target_link_libraries(main A)\n"
"links 'main' to 'A B A B'. "
"("
"While one repetition is usually sufficient, pathological object "
"file and symbol arrangements can require more. "
"One may handle such cases by manually repeating the component in "
"the last target_link_libraries call. "
"However, if two archives are really so interdependent they should "
"probably be combined into a single archive."
")"
;
}