On 03/16/2011 09:37 AM, Jörg Schlichter wrote:
> Hi!
> 
> I started to use cmake (and I like it), but I am now confronted with a
> problem I cannot to solve:
> 
> We have a layout of our software tree looking more or less like this:
> 
> |
> |--public_headers
> |--lib
> |
> |--src
>    |--project1
>    |--project2
>    |--...
> 
> project1, project2 etc. are some shared libraries (using Qt). During the
> build process, these libraries should be installed to "lib", the headers
> to "public_headers". The "public_headers" directory is searched by the
> other projects during compilation for headers they need.
> We did this so far with qmake, and it worked quiet well. (By the way,
> changing this directory layout is not an option).
> 
> I tried to do this now with cmake, so I created a CMakeLists.txt in
> directory src, which looks about like this:
> 
> ...
> SUBDIRS( project1, project2, ...)

Don't use that command, it's deprecated. Use add_subdirectory() instead.

> 
> In the project directories I have "real" CMakeLists.txt files describing
> all the stuff needed for compilation and installation of a project.
> If I do there a "cmake; make all install" all is compiled and installed
> as it should be.
> 
> The problem is, it does not work if I do "cmake; make all install" in
> the directory src. In this case "make all" is executed for all projects,
> and afterwards "make install" is executed for all projects. However, if
> project2 expects a header of project1 to be installed in
> "public_headers", compilation of project2 will fail, because the
> installation step of project1 was not yet executed.
> 
> Is there anything I can do to solve this problem?
> 
> Thanks
> Joerg

Sounds like a case for "super-build". The idea is the following: in
src/CMakeLists.txt you do a series of checks for required third-party
software, user-options etc. and, most importantly, include the
ExternalProject module. And then for each of the projectX directories,
you make a call to ExternalProject_Add(), passing it the detected
parameters and user-options and specifying the interdependencies. This
way, every project gets built as a separate CMake project, in an order
that satisfies the dependencies.

HTH

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

Reply via email to