<div class="gmail_quote">On Tue, Dec 22, 2009 at 10:12 AM, Michael Wild <span dir="ltr">&lt;<a href="mailto:themiwi@gmail.com">themiwi@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div><div></div><div class="h5"><br>
On 22. Dec, 2009, at 15:50 , David Cole wrote:<br>
<br>
&gt; On Tue, Dec 22, 2009 at 9:37 AM, Troy D. Straszheim &lt;<a href="mailto:troy@resophonic.com">troy@resophonic.com</a>&gt;wrote:<br>
&gt;<br>
&gt;&gt; David Cole &lt;<a href="mailto:david.cole@kitware.com">david.cole@kitware.com</a>&gt; writes:<br>
&gt;&gt;<br>
&gt;&gt;&gt; On Tue, Dec 22, 2009 at 7:58 AM, David Wolfe &lt;<a href="mailto:dwolfe@fifthsally.com">dwolfe@fifthsally.com</a>&gt;<br>
&gt;&gt; wrote:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;    On 12/22/2009 7:11 AM, David Wolfe wrote:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;                                                   Most of our external<br>
&gt;&gt;&gt;        dependencies aren&#39;t even built using CMake, so &#39;CMake-ifying&#39;<br>
&gt;&gt;&gt;        everything<br>
&gt;&gt;&gt;        under one big über-build hardly seems worth it...<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;    On 12/22/2009 6:50 AM, David Cole wrote:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;        One way to overcome these things, but still build projects from<br>
&gt;&gt; source<br>
&gt;&gt;&gt;        code as needed is to use a new feature in CMake 2.8: the<br>
&gt;&gt;&gt;        ExternalProject<br>
&gt;&gt;&gt;        module...<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;    Wow. That could be *really* useful---especially the fact that it<br>
&gt;&gt; allows<br>
&gt;&gt;&gt;    you to download sources from the web, CVS, svn, etc.  It might be<br>
&gt;&gt; enough<br>
&gt;&gt;&gt;    to change my mind about maintaining a separate externals archive. :-)<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; If it&#39;s not enough to change your mind...... let me know what you think<br>
&gt;&gt; it&#39;s<br>
&gt;&gt;&gt; missing.<br>
&gt;&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; Here&#39;s a use-case: boost-cmake exports buildspace targets to<br>
&gt;&gt; $CMAKE_BINARY_DIR/lib/Exports.cmake.  So you&#39;d want to download,<br>
&gt;&gt; extract, run cmake on the unpacked archive, and only then include() the<br>
&gt;&gt; exported targets...  Does ExternalProject work this way?<br>
&gt;&gt;<br>
&gt;<br>
&gt; It does work that way if you set it up that way.<br>
&gt;<br>
&gt; So you would have one ExternalProject_Add call to build and install<br>
&gt; boost-cmake... and then a subsequent ExternalProject_Add call to build<br>
&gt; something that depends on it. In this dependent project you would use<br>
&gt; &quot;DEPENDS boost-cmake-proj&quot; to express this dependency. And pass whatever -D<br>
&gt; or prefix information you need to the configure step of this dependent<br>
&gt; project so that it knows where the boost-cmake build is.<br>
&gt;<br>
&gt; An external project must configure, build and install all the way before any<br>
&gt; of the projects that depend on it even run their first build step.<br>
&gt;<br>
&gt; It&#39;s pretty flexible and customizable. If there&#39;s a build step that does not<br>
&gt; do what you want it to by default, you can replace it with your own custom<br>
&gt; step. And you can inject custom steps into the stream of steps that occur by<br>
&gt; default, too.<br>
&gt;<br>
&gt; HTH,<br>
&gt; David<br>
&gt;<br>
<br>
</div></div>That&#39;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(&lt;name&gt; &lt;type&gt; IMPORTED) calls with according invocations of SET_TARGET_PROPERTIES(&lt;name&gt; PROPERTIES IMPORTED_LOCATION &lt;filepath&gt;). 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 &quot;pulling&quot; the targets of the external project into the calling project.<br>
<br></blockquote><div><br></div><div>So first build boost and everything with a simple &quot;build my prerequisites&quot; project that builds/installs all your prereqs in a nice, reasonable fashion.</div><div><br></div><div>
Then your project can just find/include/import everything as your accustomed to without any fuss.</div></div><br><div>There will never be an easy way to pull external projects directly into a calling project because the external things are not even guaranteed to be on disk yet at configure time of said calling project.</div>
<div><br></div><div><br></div>