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