On Fri, Mar 24, 2017 at 7:35 PM, <jerry....@web.de> wrote: > Hi, > > I have some CMake projects which depend on each other. They provide Config > scripts (all generated with the help of CMakePackageConfigHelpers) and the > CMake projects find there dependencies with find_package(). Even the > transitive dependencies are correctly modelled (exported to the Config > scripts with find_dependency). > > The setup in general is fine. The only drawback is that I have to build > and install them manually in the correct order. For example A depends on B > depends on C, I have to build+install first C, than B, then A ... > > The number of projects are getting more and more and it's getting harder > to build them. > > So my question: > a) Is there a CMake way to generate a dependency graph and build them in > the correct order, i.e., the same as CMake does within a project with the > targets but this time on project level? > b) What possiblities are provided by CMake to support this? > c) Are there tools you can recommend? >
Make sure that your projects can be used both as a sub-project and as a installed package. That means: if the installed package provides a target called C::C, create an alias target with that name, so that projects A and B can use that name in target_link_libraries in both cases. The next thing is to make sure that `find_package(C REQUIRED)` finds the installed package when it supposed to be used, but does nothing when C is used as a sub-project. This can be achieved by overriding the `find_package` command. The original command can be called by prefixing it with _. Your top-level project might look like this: set(subprojects A B C) macro(find_package name) if("${name}" IN_LIST subprojects) set("${name}_FOUND" TRUE) else() _find_package("${name}" ${ARGN}) endif() endmacro() add_subdirectory(A) add_subdirectory(B) add_subdirectory(C)
-- 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: http://public.kitware.com/mailman/listinfo/cmake-developers