So add_dependencies should work for you.<div><br></div><div>Let us know if it&#39;s not working like you think it should...</div><div><br><br><div class="gmail_quote">On Wed, Jan 12, 2011 at 3:48 PM, kent williams <span dir="ltr">&lt;<a href="mailto:nkwmailinglists@gmail.com">nkwmailinglists@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;">Ironically the reason I want to make a target depend on an external<br>
project is that our top level project is already built as an<br>
ExternalProject for all the reasons that have been mentioned.<br>
<br>
I need a custom target to depend on THAT external project, just in the<br>
sense that I want it to be built only after my MAIN project is built.<br>
There&#39;s no chicken V egg problems -- my custom target is independent<br>
from that target at configure time. It just needs to happen after that<br>
ExternalProject is built successfully.<br>
<div><div></div><div class="h5"><br>
<br>
On Wed, Jan 12, 2011 at 1:12 PM, David Cole &lt;<a href="mailto:david.cole@kitware.com">david.cole@kitware.com</a>&gt; wrote:<br>
&gt; add_dependencies does work to make sure that ExternalProject targets build<br>
&gt; before internal targets, if you need that.<br>
&gt; But, like Marcus said, you probably need the ExternalProject to be<br>
&gt; configured and built before your own calls to find_package... so if you have<br>
&gt; that chicken and egg problem, you should also build your project as an<br>
&gt; ExternalProject.<br>
&gt; Almost all of the projects I know of that are using ExternalProject are<br>
&gt; producing a so-called &quot;SuperBuild&quot; of themselves, wherein all the targets of<br>
&gt; the SuperBuild are ExternalProject_Add calls, and the last one is the<br>
&gt; &quot;project of interest.&quot;<br>
&gt;<br>
&gt; HTH,<br>
&gt; David<br>
&gt;<br>
&gt; On Wed, Jan 12, 2011 at 2:09 PM, Allen D Byrne &lt;<a href="mailto:byrn@hdfgroup.org">byrn@hdfgroup.org</a>&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; While Marcus states what is likely the preferred way, I just added an<br>
&gt;&gt; ADD_DEPENDENCIES(internal_target external_target) statement that seems to<br>
&gt;&gt; always work?<br>
&gt;&gt;<br>
&gt;&gt; Allen<br>
&gt;&gt;<br>
&gt;&gt; &gt; Date: Wed, 12 Jan 2011 13:23:52 -0500<br>
&gt;&gt;<br>
&gt;&gt; &gt; From: &quot;Marcus D. Hanwell&quot; &lt;<a href="mailto:marcus.hanwell@kitware.com">marcus.hanwell@kitware.com</a>&gt;<br>
&gt;&gt;<br>
&gt;&gt; &gt; Subject: Re: [CMake] How to have a target depend on an External<br>
&gt;&gt;<br>
&gt;&gt; &gt;         Project<br>
&gt;&gt;<br>
&gt;&gt; &gt; To: kent williams &lt;<a href="mailto:nkwmailinglists@gmail.com">nkwmailinglists@gmail.com</a>&gt;<br>
&gt;&gt;<br>
&gt;&gt; &gt; Cc: CMake ML &lt;<a href="mailto:cmake@cmake.org">cmake@cmake.org</a>&gt;<br>
&gt;&gt;<br>
&gt;&gt; &gt; Message-ID:<br>
&gt;&gt;<br>
&gt;&gt; &gt;         &lt;AANLkTinDoc6guEnK7rxQ=<a href="mailto:0yy%2BsXacOium52iX8ZiHmcz@mail.gmail.com">0yy+sXacOium52iX8ZiHmcz@mail.gmail.com</a>&gt;<br>
&gt;&gt;<br>
&gt;&gt; &gt; Content-Type: text/plain; charset=ISO-8859-1<br>
&gt;&gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt;<br>
&gt;&gt; &gt; On Wed, Jan 12, 2011 at 12:53 PM, kent williams<br>
&gt;&gt;<br>
&gt;&gt; &gt; &lt;<a href="mailto:nkwmailinglists@gmail.com">nkwmailinglists@gmail.com</a>&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; &gt; &gt; For better or worse (mostly better) we are now heavy users of<br>
&gt;&gt;<br>
&gt;&gt; &gt; &gt; ExternalProject. ?That module works really well to pull in external<br>
&gt;&gt;<br>
&gt;&gt; &gt; &gt; dependencies and get them built.<br>
&gt;&gt;<br>
&gt;&gt; &gt; &gt;<br>
&gt;&gt;<br>
&gt;&gt; &gt; &gt; ExternalProject_add has a DEPENDS keyword that lets you specify<br>
&gt;&gt;<br>
&gt;&gt; &gt; &gt; dependencies on other External Projects. ?But an ExternalProject isn&#39;t<br>
&gt;&gt;<br>
&gt;&gt; &gt; &gt; an actual CMake target, so I can&#39;t figure out how to make a regular<br>
&gt;&gt;<br>
&gt;&gt; &gt; &gt; CMake target depend on an External Project.<br>
&gt;&gt;<br>
&gt;&gt; &gt; &gt;<br>
&gt;&gt;<br>
&gt;&gt; &gt; &gt; Suggestions?<br>
&gt;&gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt;<br>
&gt;&gt; &gt; Don&#39;t mix external projects and real targets. An external project<br>
&gt;&gt;<br>
&gt;&gt; &gt; dependency is different to a target dependency. When expressing<br>
&gt;&gt;<br>
&gt;&gt; &gt; external project dependencies you are stating that this external<br>
&gt;&gt;<br>
&gt;&gt; &gt; project needs these others to be built before it is even configured.<br>
&gt;&gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt;<br>
&gt;&gt; &gt; With regular targets there is an assumption that the dependency is<br>
&gt;&gt;<br>
&gt;&gt; &gt; part of the current build, and so CMake knows everything about it, or<br>
&gt;&gt;<br>
&gt;&gt; &gt; it was already built. If you have Qt in an external project, and a Qt<br>
&gt;&gt;<br>
&gt;&gt; &gt; based application depending on it, the find_package(Qt4) will fail<br>
&gt;&gt;<br>
&gt;&gt; &gt; during initial configure, as there is no Qt built/installed.<br>
&gt;&gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt;<br>
&gt;&gt; &gt; Instead you would normally have your own project as an external<br>
&gt;&gt;<br>
&gt;&gt; &gt; project that depends on the others it requires to build. That way,<br>
&gt;&gt;<br>
&gt;&gt; &gt; when your external project is configured the others will have been<br>
&gt;&gt;<br>
&gt;&gt; &gt; built and therefore could be found.<br>
&gt;&gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt;<br>
&gt;&gt; &gt; I hope that makes the mechanism a little clearer. You could take a<br>
&gt;&gt;<br>
&gt;&gt; &gt; look at the Titan project as one example where we have many external<br>
&gt;&gt;<br>
&gt;&gt; &gt; projects that we build, and the Libraries/Applications external<br>
&gt;&gt;<br>
&gt;&gt; &gt; projects that depend upon them and use them.<br>
&gt;&gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt;<br>
&gt;&gt; &gt; Marcus<br>
&gt;&gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt;<br>
&gt;&gt; _______________________________________________<br>
&gt;&gt; Powered by <a href="http://www.kitware.com" target="_blank">www.kitware.com</a><br>
&gt;&gt;<br>
&gt;&gt; Visit other Kitware open-source projects at<br>
&gt;&gt; <a href="http://www.kitware.com/opensource/opensource.html" target="_blank">http://www.kitware.com/opensource/opensource.html</a><br>
&gt;&gt;<br>
&gt;&gt; Please keep messages on-topic and check the CMake FAQ at:<br>
&gt;&gt; <a href="http://www.cmake.org/Wiki/CMake_FAQ" target="_blank">http://www.cmake.org/Wiki/CMake_FAQ</a><br>
&gt;&gt;<br>
&gt;&gt; Follow this link to subscribe/unsubscribe:<br>
&gt;&gt; <a href="http://www.cmake.org/mailman/listinfo/cmake" target="_blank">http://www.cmake.org/mailman/listinfo/cmake</a><br>
&gt;<br>
&gt;<br>
&gt; _______________________________________________<br>
&gt; Powered by <a href="http://www.kitware.com" target="_blank">www.kitware.com</a><br>
&gt;<br>
&gt; Visit other Kitware open-source projects at<br>
&gt; <a href="http://www.kitware.com/opensource/opensource.html" target="_blank">http://www.kitware.com/opensource/opensource.html</a><br>
&gt;<br>
&gt; Please keep messages on-topic and check the CMake FAQ at:<br>
&gt; <a href="http://www.cmake.org/Wiki/CMake_FAQ" target="_blank">http://www.cmake.org/Wiki/CMake_FAQ</a><br>
&gt;<br>
&gt; Follow this link to subscribe/unsubscribe:<br>
&gt; <a href="http://www.cmake.org/mailman/listinfo/cmake" target="_blank">http://www.cmake.org/mailman/listinfo/cmake</a><br>
&gt;<br>
_______________________________________________<br>
Powered by <a href="http://www.kitware.com" target="_blank">www.kitware.com</a><br>
<br>
Visit other Kitware open-source projects at <a href="http://www.kitware.com/opensource/opensource.html" target="_blank">http://www.kitware.com/opensource/opensource.html</a><br>
<br>
Please keep messages on-topic and check the CMake FAQ at: <a href="http://www.cmake.org/Wiki/CMake_FAQ" target="_blank">http://www.cmake.org/Wiki/CMake_FAQ</a><br>
<br>
Follow this link to subscribe/unsubscribe:<br>
<a href="http://www.cmake.org/mailman/listinfo/cmake" target="_blank">http://www.cmake.org/mailman/listinfo/cmake</a><br>
</div></div></blockquote></div><br></div>