[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