On 22. Dec, 2009, at 15:50 , David Cole wrote: > On Tue, Dec 22, 2009 at 9:37 AM, Troy D. Straszheim > <t...@resophonic.com>wrote: > >> David Cole <david.c...@kitware.com> writes: >> >>> On Tue, Dec 22, 2009 at 7:58 AM, David Wolfe <dwo...@fifthsally.com> >> wrote: >>> >>> On 12/22/2009 7:11 AM, David Wolfe wrote: >>> >>> Most of our external >>> dependencies aren't even built using CMake, so 'CMake-ifying' >>> everything >>> under one big über-build hardly seems worth it... >>> >>> >>> On 12/22/2009 6:50 AM, David Cole wrote: >>> >>> One way to overcome these things, but still build projects from >> source >>> code as needed is to use a new feature in CMake 2.8: the >>> ExternalProject >>> module... >>> >>> >>> Wow. That could be *really* useful---especially the fact that it >> allows >>> you to download sources from the web, CVS, svn, etc. It might be >> enough >>> to change my mind about maintaining a separate externals archive. :-) >>> >>> >>> >>> If it's not enough to change your mind...... let me know what you think >> it's >>> missing. >>> >> >> Here's a use-case: boost-cmake exports buildspace targets to >> $CMAKE_BINARY_DIR/lib/Exports.cmake. So you'd want to download, >> extract, run cmake on the unpacked archive, and only then include() the >> exported targets... Does ExternalProject work this way? >> > > It does work that way if you set it up that way. > > So you would have one ExternalProject_Add call to build and install > boost-cmake... and then a subsequent ExternalProject_Add call to build > something that depends on it. In this dependent project you would use > "DEPENDS boost-cmake-proj" to express this dependency. And pass whatever -D > or prefix information you need to the configure step of this dependent > project so that it knows where the boost-cmake build is. > > An external project must configure, build and install all the way before any > of the projects that depend on it even run their first build step. > > It's pretty flexible and customizable. If there's a build step that does not > do what you want it to by default, you can replace it with your own custom > step. And you can inject custom steps into the stream of steps that occur by > default, too. > > HTH, > David >
That's exactly my point: if the dependent project is the calling project (i.e. the one that calls ExternalProject_Add), you have to use error-prone ADD_LIBRARY(<name> <type> IMPORTED) calls with according invocations of SET_TARGET_PROPERTIES(<name> PROPERTIES IMPORTED_LOCATION <filepath>). In the case of Boost this is probably very difficult to get right, because from what I hear, the library names change almost randomly with operating system, compilation flags and what not. So what ExternalProject.cmake is missing, is a mechanism of "pulling" the targets of the external project into the calling project. 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