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

kent williams nkwmailinglists at gmail.com
Wed Jan 12 15:48:59 EST 2011


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>
>>
>> > 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
>


More information about the CMake mailing list