[CMake] Get all required shared libs from a target

David Cole david.cole at kitware.com
Fri Aug 28 07:18:15 EDT 2009


See also the BundleUtilities module.

Work in CVS CMake recently has extended the "fixup_bundle" function so that
it works on Windows/Linux as well as on a Mac. And what you are looking for
is exactly what it does. If executed in an install script, fixup_bundle will
analyze a given executable and then copy/fixup any required non-system
shared libraries making it easy to depend on third party dlls without adding
a bunch of explicit copy steps yourself...

The prime example of its use is still Mac-only, though: grep for
CompleteBundle in the ParaView source tree for the canonical example.

HTH,
David


On Fri, Aug 28, 2009 at 4:44 AM, Michael Wild <themiwi at gmail.com> wrote:

>
> You could use CMAKE_RUNTIME_OUTPUT_DIRECTORY or the
> RUNTIME_OUTPUT_DIRECTORY target property to specify where CMake should put
> all the produced runtime stuff (on Windows, AFAIK this is *.exe and *.dll),
> so you don't have to copy them around manually.
> If the dll's are not built by you, you might want to have a look at the
> GetPrerequisites and InstallRequiredSystemLibraries modules.
>
> Michael
>
>
> On 28. Aug, 2009, at 10:12, 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
>>
>
> _______________________________________________
> 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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.cmake.org/pipermail/cmake/attachments/20090828/99c72bc1/attachment.htm>


More information about the CMake mailing list