[CMake] third party library dependencies
Marcel Loose
loose at astron.nl
Fri Dec 18 05:11:25 EST 2009
Hi Adolfo,
I cannot reproduce the problem you mention. I made the following
CMakeLists.txt file:
cmake_minimum_required(VERSION 2.6)
project(MyBoost)
find_package(Boost REQUIRED COMPONENTS date_time)
message(STATUS "Boost_FOUND=${Boost_FOUND}")
message(STATUS "Boost_LIBRARIES=${Boost_LIBRARIES}")
find_package(Boost REQUIRED COMPONENTS regex)
message(STATUS "Boost_FOUND=${Boost_FOUND}")
message(STATUS "Boost_LIBRARIES=${Boost_LIBRARIES}")
Running cmake (2.6.2) produces:
-- The C compiler identification is GNU
-- The CXX compiler identification is GNU
-- Check for working C compiler: /usr/bin/gcc
-- Check for working C compiler: /usr/bin/gcc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Boost version: 1.36.0
-- Found the following Boost libraries:
-- date_time
-- Boost_FOUND=TRUE
-- Boost_LIBRARIES=/usr/lib64/libboost_date_time-mt.so
-- Boost version: 1.36.0
-- Found the following Boost libraries:
-- regex
-- Boost_FOUND=TRUE
--
Boost_LIBRARIES=/usr/lib64/libboost_date_time-mt.so;/usr/lib64/libboost_regex-mt.so
-- Configuring done
-- Generating done
So, in my case boost_regex is nicely added to boost_date_time.
Best regards,
Marcel Loose.
On Fri, 2009-12-18 at 10:48 +0100, Adolfo Rodríguez Tsouroukdissian
wrote:
>
>
> On Fri, Dec 18, 2009 at 10:19 AM, Marcel Loose <loose at astron.nl>
> wrote:
> Hi Roman,
>
> Not in a portable way. I'm not too familiar with Windows, but
> on Linux
> you can do this when libA is a shared library that has its
> dependency on
> libB linked in (e.g. ldd libA.so will tell you this). When
> linking in
> static libraries you're out of luck.
>
> I would write a FindA.cmake file for this and let that macro
> set the
> variable A_LIBRARIES to contain both libA and libB. You can
> then use:
>
> find_package(A)
> target_link_libraries(${A_LIBRARIES})
>
> I've had to deal with this issue and Marcel's proposal is what I do.
> There is one slight gotcha that I haven't resolved cleanly yet.
> Suppose that A_LIBRARIES depends on certain Boost components, so
> inside FindA.cmake I perform a
>
> find_package(Boost REQUIRED COMPONENTS xxx yyy)
>
> and append Boost_LIBRARIES to A_LIBRARIES. Note: I use find_package
> instead of hardcoding the library names so that libraries appear as
> fully qualified paths, and nonstandard installation paths can be used.
> Everything OK for now.
>
> Now, in my project, which depends on A and some other Boost component
> I do
>
> find_package(A)
> find_package(Boost REQUIRED COMPONENTS zzz)
>
> What happens is that since Boost was already found in A, the zzz
> component is not included in Boost_LIBRARIES. Has anybody found a
> successful way of dealing with this?
>
> TIA,
>
> Adolfo
>
>
>
>
> Hope this helps,
> Marcel Loose.
>
>
>
> On Thu, 2009-12-17 at 12:18 -0500, Roman Shtylman wrote:
> > Is there an easy way to setup link dependencies between
> libraries not
> > build using cmake?
> >
> > Lets say I have a system library A which depends on system
> library B.
> > I then make an executable that uses code from A. I need to
> link
> > against A and B, but as a user of just library A, I don't
> want to
> > worry about that. Does cmake have a facility to define such
> a
> > hierarchy/dependency chain so that I can just do
> >
> > target_link_libraries(<target> A)
> >
> > and have it figure out that it needs to link against B as
> well?
> >
> > Note that neither A nor B are built using cmake, they
> already exist.
> >
> > ~Roman
> > _______________________________________________
> > 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
>
>
>
>
> --
> Adolfo Rodríguez Tsouroukdissian, Ph. D.
>
> Robotics engineer
> PAL ROBOTICS S.L
> http://www.pal-robotics.com
> Tel. +34.93.414.53.47
> Fax.+34.93.209.11.09
> AVISO DE CONFIDENCIALIDAD: Este mensaje y sus documentos adjuntos,
> pueden contener información privilegiada y/o confidencial que está
> dirigida exclusivamente a su destinatario. Si usted recibe este
> mensaje y no es el destinatario indicado, o el empleado encargado de
> su entrega a dicha persona, por favor, notifíquelo inmediatamente y
> remita el mensaje original a la dirección de correo electrónico
> indicada. Cualquier copia, uso o distribución no autorizados de esta
> comunicación queda estrictamente prohibida.
>
> CONFIDENTIALITY NOTICE: This e-mail and the accompanying document(s)
> may contain confidential information which is privileged and intended
> only for the individual or entity to whom they are addressed. If you
> are not the intended recipient, you are hereby notified that any
> disclosure, copying, distribution or use of this e-mail and/or
> accompanying document(s) is strictly prohibited. If you have received
> this e-mail in error, please immediately notify the sender at the
> above e-mail address.
More information about the CMake
mailing list