[CMake] How to have a target depend on an External Project

David Cole david.cole at kitware.com
Wed Jan 12 15:53:38 EST 2011


So add_dependencies should work for you.

Let us know if it's not working like you think it should...


On Wed, Jan 12, 2011 at 3:48 PM, kent williams <nkwmailinglists at gmail.com>wrote:

> Ironically the reason I want to make a target depend on an external
> project is that our top level project is already built as an
> ExternalProject for all the reasons that have been mentioned.
>
> I need a custom target to depend on THAT external project, just in the
> sense that I want it to be built only after my MAIN project is built.
> There's no chicken V egg problems -- my custom target is independent
> from that target at configure time. It just needs to happen after that
> ExternalProject is built successfully.
>
>
> On Wed, Jan 12, 2011 at 1:12 PM, David Cole <david.cole at kitware.com>
> wrote:
> > add_dependencies does work to make sure that ExternalProject targets
> build
> > before internal targets, if you need that.
> > But, like Marcus said, you probably need the ExternalProject to be
> > configured and built before your own calls to find_package... so if you
> have
> > that chicken and egg problem, you should also build your project as an
> > ExternalProject.
> > Almost all of the projects I know of that are using ExternalProject are
> > producing a so-called "SuperBuild" of themselves, wherein all the targets
> of
> > the SuperBuild are ExternalProject_Add calls, and the last one is the
> > "project of interest."
> >
> > HTH,
> > David
> >
> > On Wed, Jan 12, 2011 at 2:09 PM, Allen D Byrne <byrn at hdfgroup.org>
> wrote:
> >>
> >> While Marcus states what is likely the preferred way, I just added an
> >> ADD_DEPENDENCIES(internal_target external_target) statement that seems
> to
> >> always work?
> >>
> >> Allen
> >>
> >> > Date: Wed, 12 Jan 2011 13:23:52 -0500
> >>
> >> > From: "Marcus D. Hanwell" <marcus.hanwell at kitware.com>
> >>
> >> > Subject: Re: [CMake] How to have a target depend on an External
> >>
> >> >         Project
> >>
> >> > To: kent williams <nkwmailinglists at gmail.com>
> >>
> >> > Cc: CMake ML <cmake at cmake.org>
> >>
> >> > Message-ID:
> >>
> >> >         <AANLkTinDoc6guEnK7rxQ=0yy+sXacOium52iX8ZiHmcz at mail.gmail.com<0yy%2BsXacOium52iX8ZiHmcz at mail.gmail.com>
> >
> >>
> >> > Content-Type: text/plain; charset=ISO-8859-1
> >>
> >> >
> >>
> >> > On Wed, Jan 12, 2011 at 12:53 PM, kent williams
> >>
> >> > <nkwmailinglists at gmail.com> wrote:
> >>
> >> > > For better or worse (mostly better) we are now heavy users of
> >>
> >> > > ExternalProject. ?That module works really well to pull in external
> >>
> >> > > dependencies and get them built.
> >>
> >> > >
> >>
> >> > > ExternalProject_add has a DEPENDS keyword that lets you specify
> >>
> >> > > dependencies on other External Projects. ?But an ExternalProject
> isn't
> >>
> >> > > an actual CMake target, so I can't figure out how to make a regular
> >>
> >> > > CMake target depend on an External Project.
> >>
> >> > >
> >>
> >> > > Suggestions?
> >>
> >> >
> >>
> >> > Don't mix external projects and real targets. An external project
> >>
> >> > dependency is different to a target dependency. When expressing
> >>
> >> > external project dependencies you are stating that this external
> >>
> >> > project needs these others to be built before it is even configured.
> >>
> >> >
> >>
> >> > With regular targets there is an assumption that the dependency is
> >>
> >> > part of the current build, and so CMake knows everything about it, or
> >>
> >> > it was already built. If you have Qt in an external project, and a Qt
> >>
> >> > based application depending on it, the find_package(Qt4) will fail
> >>
> >> > during initial configure, as there is no Qt built/installed.
> >>
> >> >
> >>
> >> > Instead you would normally have your own project as an external
> >>
> >> > project that depends on the others it requires to build. That way,
> >>
> >> > when your external project is configured the others will have been
> >>
> >> > built and therefore could be found.
> >>
> >> >
> >>
> >> > I hope that makes the mechanism a little clearer. You could take a
> >>
> >> > look at the Titan project as one example where we have many external
> >>
> >> > projects that we build, and the Libraries/Applications external
> >>
> >> > projects that depend upon them and use them.
> >>
> >> >
> >>
> >> > Marcus
> >>
> >> >
> >>
> >> _______________________________________________
> >> 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
> >
> _______________________________________________
> 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/20110112/5b2f4a59/attachment-0001.htm>


More information about the CMake mailing list