Difficult 'make install' problem

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view

Difficult 'make install' problem

Marcel Loose
Hi all,

I am facing a difficult 'make install' problem. I'll try to explain my
project setup.

The main project consists of parts and subsystems. Parts contain source
code; subsystems do not contain source code, but define a certain subset
of all available parts.

Here is a simplified version of my source code tree.

    subsys_1  (depends on part_1b, part_2a)
    subsys_2  (depends on part_1a, part_1c, part_2b)
    part_1b   (depends on part_1a)
    part_1c   (depends on part_1a)
    part_2a   (depends on part_1c)
    part_2b   (depends on part_1b)

Each leaf-directory contains a CMake project. The subsystems tree does
not contain any source code; it merely contains CMakeLists.txt files
that record the subsystem's dependencies. Only the part_* directories
contain source code files.

For each project, a custom target is defined with the same name as that
of the project. That way, you can easily define project dependencies
(which may reach a bit further than just library dependencies).

With this setup, it is straightforward to build, say, subsys_1. This
will trigger a build of the (sub)projects part_1a, part_1b, part_1c, and

There's one caveat, though: you can only build a subsystem from the
top-level build directory! When typing 'make' in the subsystems/subsys_1
directory, nothing happens. This is different from the behaviour you see
when typing 'make' in, e.g., the directory part_1/part_1c.

This isn't a big deal when simply building the target subsys_1. However,
it is a problem if you want to install subsys_1, where installing means,
installing all the "products" (i.e. libraries, binaries, etc.) that
subsys_1 consists of.

What I would like is that, if I type 'make install' in the directory
subsystems/subsys_1, the result would be the same as if I had
subsequently typed 'make install' in the directories part_1/part_1a,
part_1/part_1b, part_1/part_1c, and part_2/part_2a.

Does anyone know how I could achieve this in CMake?

Best regards,
Marcel Loose.

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: