It would be nice to extend the current properties set of LINK_LIBRARIES and INTERFACE_LINK_LIBRARIES with a property to obtain actually all transitive linked libraries of a specific target. Currently you will have to traverse yourself over all targets to get in CMake a full overview of all linked libraries. This information should already be present internally to write out accordingly all the generator files accordingly. I do understand the fact that this information is only fully available during generation time. Would you be open for such extension point or is there are already one maybe?
For example: add_library(Library1 library1.cpp) target_link_libraries(Library1 PRIVATE Library2 PUBLIC Library3) add_library(Library2 SHARED library2.cpp) add_library(Library3 SHARED library3.cpp) add_library(Library4 SHARED library4.cpp) target_link_libraries(Library4 PRIVATE Library1 PUBLIC Library2) get_target_property(ALL_DEPENDENCIES1 Library1 LINK_LIBRARIES) get_target_property(ALL_DEPENDENCIES2 Library2 LINK_LIBRARIES) get_target_property(ALL_DEPENDENCIES3 Library3 LINK_LIBRARIES) get_target_property(ALL_DEPENDENCIES4 Library4 LINK_LIBRARIES) get_target_property(INTERFACE_DEPENDENCIES1 Library1 INTERFACE_LINK_LIBRARIES) get_target_property(INTERFACE_DEPENDENCIES2 Library2 INTERFACE_LINK_LIBRARIES) get_target_property(INTERFACE_DEPENDENCIES3 Library3 INTERFACE_LINK_LIBRARIES) get_target_property(INTERFACE_DEPENDENCIES4 Library4 INTERFACE_LINK_LIBRARIES) message("All dependencies of Library1 are: ${ALL_DEPENDENCIES1}") message("All dependencies of Library2 are: ${ALL_DEPENDENCIES2}") message("All dependencies of Library3 are: ${ALL_DEPENDENCIES3}") message("All dependencies of Library4 are: ${ALL_DEPENDENCIES4}") message("Interface dependencies of Library1 are: ${INTERFACE_DEPENDENCIES1}") message("Interface dependencies of Library2 are: ${INTERFACE_DEPENDENCIES2}") message("Interface dependencies of Library3 are: ${INTERFACE_DEPENDENCIES3}") message("Interface dependencies of Library4 are: ${INTERFACE_DEPENDENCIES4}") That would result in: All dependencies of Library1 are: Library2;Library3 All dependencies of Library2 are: ALL_DEPENDENCIES2-NOTFOUND All dependencies of Library3 are: ALL_DEPENDENCIES3-NOTFOUND All dependencies of Library4 are: Library1;Library2 Interface dependencies of Library1 are: $<LINK_ONLY:Library2>;Library3 Interface dependencies of Library2 are: INTERFACE_DEPENDENCIES2-NOTFOUND Interface dependencies of Library3 are: INTERFACE_DEPENDENCIES3-NOTFOUND Interface dependencies of Library4 are: Library2 It would be nice to request with a property for example from target Library4 all its linked libraries (i.e. the actual linker line), so in the example case you would get then Library1, Library2, Library3.
-- Powered by www.kitware.com Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Kitware offers various services to support the CMake community. For more information on each offering, please visit: CMake Support: http://cmake.org/cmake/help/support.html CMake Consulting: http://cmake.org/cmake/help/consulting.html CMake Training Courses: http://cmake.org/cmake/help/training.html Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Follow this link to subscribe/unsubscribe: http://public.kitware.com/mailman/listinfo/cmake-developers