Hello Tyler,<br><br>Please find my comments below.<br>
<br><div class="gmail_quote">2009/5/28 Tyler Roscoe <span dir="ltr">&lt;<a href="mailto:tyler@cryptio.net">tyler@cryptio.net</a>&gt;</span><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div class="im">On Thu, May 28, 2009 at 08:56:04PM +0300, Dmytro Ovdiienko wrote:<br>
&gt; 1. We have two projects A and B.<br>
&gt; 2. Project A is stored to &lt;root&gt;/A<br>
&gt; 3. Project B is stored to &lt;root&gt;/B<br>
&gt; 4. Project A depends on B.<br>
&gt; 5. Project B depends on A. (please don&#39;t ask me why:) )<br>
&gt; 6. There is CMakeLists.txt in the &lt;root&gt;<br>
<br>
</div>If A and B really depend on each other, I don&#39;t know how you would ever<br>
expect to build them, nor how you would expect CMake to handle this<br>
case.<br>
</blockquote><div><br>That was just a sample. CMake  can build it correctly, if you specify full path to the include directlry.<br><br>
If you root CMakeLists.txt declares ROOT_PRJ you can write following in the A project.<br>
<br>
INCLUDE_DIRECTORIES(<br>

  ${ROOT_PRJ_SOURCE_DIR}/B<br>
 )<br>
<br>
And following in the B project<br>
<br>
INCLUDE_DIRECTORIES(<br>


  ${ROOT_PRJ_SOURCE_DIR}/A<br>

 )<br> 

<br></div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><br>
But from your Lists below it appears that they don&#39;t really depend on<br>
one another, in a &quot;target A must be built before target B&quot; sense, but<br>
simply that they use headers from each other&#39;s source directories?<br>
<div class="im"></div></blockquote><div><br>A and B are static libraries. The order static libraries building has no mater.<br><br><br></div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div class="im"><br>
&gt; #####################################<br>
&gt; # Project A<br>
&gt; #####################################<br>
&gt; SET (PROJECT_NAME A )<br>
&gt; PROJECT (${PROJECT_NAME})<br>
&gt;<br>
&gt; INCLUDE_DIRECTORIES(<br>
&gt;   ${B_SOURCE_DIR}<br>
&gt; )<br>
&gt;<br>
&gt; FILE (GLOB ${PROJECT_NAME}_SOURCE_LIST<br>
&gt;     *.cpp<br>
&gt; )<br>
&gt;<br>
&gt; ADD_LIBRARY (${PROJECT_NAME} ${${PROJECT_NAME}_SOURCE_LIST})<br>
&gt;<br>
&gt; #####################################<br>
&gt; # Project B<br>
&gt; #####################################<br>
&gt; SET (PROJECT_NAME B )<br>
&gt; PROJECT (${PROJECT_NAME})<br>
&gt;<br>
&gt; INCLUDE_DIRECTORIES(<br>
&gt;   ${A_SOURCE_DIR}<br>
&gt; )<br>
&gt;<br>
&gt; FILE (GLOB ${PROJECT_NAME}_SOURCE_LIST<br>
&gt;     *.cpp<br>
&gt; )<br>
&gt;<br>
&gt; ADD_LIBRARY (${PROJECT_NAME} ${${PROJECT_NAME}_SOURCE_LIST})<br>
&gt;<br>
&gt;<br>
&gt; And now we generate the project files and check Additional Includes<br>
&gt; Directories of the A project.<br>
&gt;<br>
&gt; Expected it is equal to &lt;root&gt;/B.<br>
&gt; But in fact it is empty.<br>
<br>
</div>Is ${B_SOURCE_DIR} defined in the CMakeLists for project A?<br>
<div class="im"></div></blockquote><div><br>It is defined if B folder is processed before A folder. But then A_SOURCE_DIR is not defined in the B project (circular dependency)<br> </div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div class="im"><br>
&gt; The other side of this problem is you have to write ADD_SUBDIRECTORY<br>
&gt; commands in specific order. IMHO it is inconvenient.<br>
<br>
</div>CMakeLists are essentially a scripting language, so of course order<br>
matters. What would you propose instead?<br>
<font color="#888888"></font></blockquote><div><br>But... why does TARGET_LINK_LIBRARIES work correctly? You can pass not loaded-yet project name to TARGET_LINK_LIBRARIES.<br> </div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<font color="#888888"><br>
tyler<br>
</font></blockquote></div><br>