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
