Update and build child projects if a parent (dependency) is updated

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

Update and build child projects if a parent (dependency) is updated

Saad Khattak
Hi,

I have a lot of projects with many dependencies. Support ProjE depends on ProjD which in turn depends on ProjB and ProjC where ProjB depends on ProjA.

If ProjA, is updated, I would like some way to trigger the generate/build (or just build, assuming the projects are already generated) ProjB, ProjD and ProjE (not ProjC as it did not depend on ProjA).

I realize this is not possible without ProjA somehow knowing about its dependent projects. And so I don't mind if it's a new master project or super build. What I would like however is for CMake to generate this master project for me (as it already knows the dependency hierarchy). Then, it'll just be a matter of building this 'superbuild' which in turn detects that ProjA has been updated, and updates/builds all its dependents.

I can do this manually by ExternalProject_Add, but that is just error prone and not at all automated. If the projects go into the double or triple digit range, you can see why manually preparing the superbuild project is not a good solution.

Thanks,
Saad

--

Powered by www.kitware.com

Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ

Kitware offers various services to support the CMake community. For more information on each offering, please visit:

CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html

Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html

Follow this link to subscribe/unsubscribe:
https://cmake.org/mailman/listinfo/cmake
Reply | Threaded
Open this post in threaded view
|

Re: Update and build child projects if a parent (dependency) is updated

Craig Scott-3

On Thu, 8 Feb 2018 at 4:52 am, Saad Khattak <[hidden email]> wrote:
Hi,

I have a lot of projects with many dependencies. Support ProjE depends on ProjD which in turn depends on ProjB and ProjC where ProjB depends on ProjA.

If ProjA, is updated, I would like some way to trigger the generate/build (or just build, assuming the projects are already generated) ProjB, ProjD and ProjE (not ProjC as it did not depend on ProjA).

I realize this is not possible without ProjA somehow knowing about its dependent projects. And so I don't mind if it's a new master project or super build. What I would like however is for CMake to generate this master project for me (as it already knows the dependency hierarchy). Then, it'll just be a matter of building this 'superbuild' which in turn detects that ProjA has been updated, and updates/builds all its dependents.

I can do this manually by ExternalProject_Add, but that is just error prone and not at all automated. If the projects go into the double or triple digit range, you can see why manually preparing the superbuild project is not a good solution.

An alternative to the superbuild approach is the new FetchContent module that has been added in the upcoming 3.11 release. You can see the docs for it here:


It may be more convenient for the situation you describe. There’s even a somewhat similar example in those docs for inter project dependencies along the lines of your case. 



--
Craig Scott
Melbourne, Australia
https://crascit.com

--

Powered by www.kitware.com

Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ

Kitware offers various services to support the CMake community. For more information on each offering, please visit:

CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html

Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html

Follow this link to subscribe/unsubscribe:
https://cmake.org/mailman/listinfo/cmake