[CMake] Get all required shared libs from a target
Michael Jackson
mike.jackson at bluequartz.net
Fri Aug 28 08:38:34 EDT 2009
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:themiwi at gmail.com]
> Gesendet: Freitag, 28. August 2009 09:30
> An: Müller Michael
> Cc: cmake at cmake.org
> 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
More information about the CMake
mailing list