On Fri, Mar 24, 2017 at 7:35 PM, <[email protected]> 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