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 <b...@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.hanw...@kitware.com>
>
> > Subject: Re: [CMake] How to have a target depend on an External
>
> >         Project
>
> > To: kent williams <nkwmailingli...@gmail.com>
>
> > Cc: CMake ML <cmake@cmake.org>
>
> > Message-ID:
>
> >         
> > <aanlktindoc6guenk7rxq=0yy+sxacoium52ix8zih...@mail.gmail.com<0yy%2bsxacoium52ix8zih...@mail.gmail.com>
> >
>
> > Content-Type: text/plain; charset=ISO-8859-1
>
> >
>
> > On Wed, Jan 12, 2011 at 12:53 PM, kent williams
>
> > <nkwmailingli...@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

Reply via email to