If you pull the boost 1.39.0 sources there is an experimental CMake based build system. In those cmake files the developers have somehow figured out how to do what you want. For a given library, you can get all the dependencies.

So in your case you would say that lib B depends on Lib A. Then when you did your C target the cmake code figures out that C, which depends on B, will also have a dependency on A. If you can wade through the CMake files it might be worth a look.

If you want to manually do this yourself the really ugly but effective way would be to create all the necessary cmake variables in the top CMakeLists.txt. If the variables are declared in that cmake file then they will be available to any other included CMake file. This isn't the best and does not really scale well but for small projects it does work.

Just some thoughts.
--
Mike Jackson <www.bluequartz.net>

On Aug 28, 2009, at 4:12 AM, Müller Michael wrote:

Hi Michael,

Thanks for your repsonse but I need the required DLLs to copy them in a post-build step. So I need the information which libaries are required for executing something. E.g., in your example

add_library(a ${A_SRCS})
add_library(b ${B_SRCS})
target_link_libraries(b a)
add_executable(c ${C_SRCS})
target_link_libraries(c b)

I`d like to have something like
GET_TARGET_PROPERTY(LIBS c IMPORTED_LINK_DEPENDENT_LIBRARIES) and then LIBS would contain "C:\project\a.dll;C:\project\b.dll". I also tried it with IMPORTED_LINK_DEPENDENT_LIBRARIES but that gives me an empty variable.

Hopefully, this made my problem clearer.

Michael

-----Ursprüngliche Nachricht-----
Von: Michael Wild [mailto:[email protected]]
Gesendet: Freitag, 28. August 2009 09:30
An: Müller Michael
Cc: [email protected]
Betreff: Re: [CMake] Get all required shared libs from a target


On 28. Aug, 2009, at 8:29, Müller Michael wrote:

Hi guys,

is it possible to "investigate" a target for all required shared
libs (transitively). That means i dont which libraries where set
with TARGET_LINK_LIBRARIES and somewhere in my CMakeLists.txt i want
to find it out again.

Thank you
Michael


Hi

You don't need this (for the case you described). CMake remembers for
you:


add_library(a ${A_SRCS})
add_library(b ${B_SRCS})
target_link_libraries(b a)
add_executable(c ${C_SRCS})
target_link_libraries(c b)


As you see in the last line, c is mentioned to link against b. CMake,
however, remembers that b also links against a, and consequently also
adds a to the list of libraries to link against.


HTH

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

_______________________________________________
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

Reply via email to