On 23. Dec, 2009, at 14:36 , Alexander Neundorf wrote: > On Wednesday 23 December 2009, Marcel Loose wrote: >> Hi all, >> >> I suggested this in the quite long thread "third party library >> dependencies", but it may have been overlooked. Hence, I started a new >> thread. >> >> Upon (re)reading the Mandriva page >> http://wiki.mandriva.com/en/Overlinking, I was thinking: maybe the issue >> of overlinking can be solved more or less the same way as pkg-config >> does: i.e. by defining private dependencies. This could be an extra >> option to target_link_libraries. >> Something like: >> >> target_link_libraries(mylib public1 public2 PRIVATE private1 private2) > > Assuming that public1 and public2 are libraries also built with cmake, that > can be done already today: > > add_library(public1 ...) > target_link_libraries(public1 private1) > target_link_libraries(public1 LINK_INTERFACE_LIBRARIES "") > > add_library(public2 ...) > target_link_libraries(public2 private2) > target_link_libraries(public2 LINK_INTERFACE_LIBRARIES "") > > install(TARGETS public1 public2 ... EXPORT MyPublicLibs) > install(EXPORT ...) > > > Then later on, when loading these exported targets, you will get what you > want. If public1/2 are shared libs, their "link interface" will be empty. If > they are static, you will link against everything they have been "linked" > against, independent of the LINK_INTERFACE_LIBRARIES (which is used only for > shared libs). > > Alex >
So, the last step in doing add_library(public1 ...) add_library(public2 ...) target_link_libraries(public2 public1 private1) target_link_libraries(public2 LINK_INTERFACE_LIBRARIES public1) is equivalent to set_target_properties(public2 PROPERTIES LINK_INTERFACE_LIBRARIES "public1") Am I right? So, this should definitely go somewhere on the Wiki, that when one creates a project that does an install(EXPORT ...) and provides a XXX-config.cmake file, that one should carefully use target_link_libraries(... LINK_INTERFACE_LIBRARIES ...) to make things play nicely. This doesn't solve the problem for non-cmake built libraries which are discovered through FindXXX.cmake modules, though. Michael _______________________________________________ Powered by www.kitware.com Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Follow this link to subscribe/unsubscribe: http://www.cmake.org/mailman/listinfo/cmake
