Thanks, it solved it.<div><br></div><div>I thought that using set(a project_a) then using ${a} would be the same than using project_a (therefore I could use the same variable everywhere and simply change the target name in the set). But it seems it is not the same.</div>

<div><br></div><div>Thanks for you help :D. I will have another question later, but it will be for a different thread.</div><div><br></div><div>Ludo<br><br><div class="gmail_quote">2011/11/4 Michael Wild <span dir="ltr">&lt;<a href="mailto:themiwi@gmail.com">themiwi@gmail.com</a>&gt;</span><br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><br>
On 11/04/2011 11:07 AM, Ludovic Hoyet wrote:<br>
[fixed top-post]<br>
&gt;<br>
&gt; 2011/11/4 Michael Wild &lt;<a href="mailto:themiwi@gmail.com">themiwi@gmail.com</a> &lt;mailto:<a href="mailto:themiwi@gmail.com">themiwi@gmail.com</a>&gt;&gt;<br>
<div><div></div><div class="h5">&gt;<br>
&gt;     On 11/04/2011 10:47 AM, Ludovic Hoyet wrote:<br>
&gt;     &gt; Hi,<br>
&gt;     &gt;<br>
&gt;     &gt; I am using cmake to build an application made up of a dozen<br>
&gt;     projects. We<br>
&gt;     &gt; use cmake to automatically generate solutions for x86, x64, and<br>
&gt;     both VS<br>
&gt;     &gt; 2005 and 2010.<br>
&gt;     &gt;<br>
&gt;     &gt; Here is an idea of our organisation:<br>
&gt;     &gt;<br>
&gt;     &gt;   * a.lib, which has no dependency<br>
&gt;     &gt;   * b.lib, which has no dependency<br>
&gt;     &gt;   * c.lib, which depends on a and b<br>
&gt;     &gt;   * d.dll, which depends on c<br>
&gt;     &gt;<br>
&gt;     &gt; Each project lies in its own subdirectory, and has its own<br>
&gt;     &gt; CMakeLists.txt file. In order to keep track of the lib/dll<br>
&gt;     generated for<br>
&gt;     &gt; our different platforms, we automatically post-fix each lib/dll with<br>
&gt;     &gt; _x86/_x64 and _vc80/_vc100 (e.g., a_x86_vc100.lib), and with an _d for<br>
&gt;     &gt; debug (e.g., a_x86_vc100_d.lib).<br>
&gt;     &gt;<br>
&gt;     &gt; In the CMakeLists.txt files, I use target_link_libraries to link each<br>
&gt;     &gt; target with the corresponding libraries, for instance:<br>
&gt;     &gt;<br>
&gt;     &gt;     TARGET_LINK_LIBRARIES( c debug a_${VS}_${PLATFORM}/d optimized<br>
&gt;     &gt;     a/${VS_DIR}/${PLATFORM} debug b/${VS}_${PLATFORM}/d optimized<br>
&gt;     &gt;     b/${VS_DIR}_${PLATFORM})<br>
&gt;     &gt;<br>
&gt;     &gt; In Visual Studio, the different &quot;Project Dependencies&quot; between the<br>
&gt;     &gt; various projects do not appear. I wonder if there is something I miss,<br>
&gt;     &gt; or if it is simply not compatible with our library post-fix. I also<br>
&gt;     &gt; tried to use ADD_DEPENDENCIES(c a b) but it does not seem to work<br>
&gt;     either.<br>
&gt;     &gt;<br>
&gt;     &gt; Does anyone has an idea how to solve this?<br>
&gt;     &gt;<br>
&gt;     &gt; Cheers,<br>
&gt;     &gt;<br>
&gt;     &gt; Ludovic<br>
&gt;<br>
&gt;<br>
&gt;     Are these projects completely isolated, i.e. there is no higher-level<br>
&gt;     CMakeLists.txt file that calls add_subdirectory() for each of the<br>
&gt;     project directories?<br>
&gt;<br>
&gt;     1: if they belong to the same project, then you should use the *target*<br>
&gt;     names, not the *output* names in target_link_libraries().<br>
&gt;<br>
&gt;     2: if they indeed are independent projects, you should take a look at<br>
&gt;     this:<br>
&gt;     <a href="http://www.cmake.org/Wiki/CMake/Tutorials/How_to_create_a_ProjectConfig.cmake_file" target="_blank">http://www.cmake.org/Wiki/CMake/Tutorials/How_to_create_a_ProjectConfig.cmake_file</a><br>
&gt;     and for each of the libraries create a &lt;libname&gt;Config.cmake file.<br>
&gt;<br>
&gt;     A bit more information on how your projects are structured would help.<br>
&gt;     Also, showing example code is always useful.<br>
&gt;<br>
&gt;     HTH<br>
&gt;<br>
&gt;     Michael<br>
&gt;<br>
</div></div><div><div></div><div class="h5">&gt; No, they all belong to a higher-level project. There is a root directory<br>
&gt; with a CMakeLists.txt. This file calls ADD_SUBDIRECTORY(dir_i) for each<br>
&gt; subproject (a, b, c and d). Each sub-project is in his own directory,<br>
&gt; with a CMakeLists.txt for each of them.<br>
&gt;<br>
&gt; Root : CMakeLists.txt<br>
&gt;   - dir_a :  CMakeLists.txt<br>
&gt;   - dir_b :  CMakeLists.txt<br>
&gt;   - dir_c :  CMakeLists.txt<br>
&gt;   - dir_d :  CMakeLists.txt<br>
&gt;<br>
&gt; In the root CMakeLists.txt I call<br>
&gt;   ADD_SUBDIRECTORY(dir_a)<br>
&gt;   ADD_SUBDIRECTORY(dir_b)<br>
&gt;   ADD_SUBDIRECTORY(dir_c)<br>
&gt;   ADD_SUBDIRECTORY(dir_d)<br>
&gt;<br>
&gt; My a CMakeLists contains:<br>
&gt; SET(a project_a)<br>
&gt; add_library(${a} ${SRCS_a} ${HDRS_a})<br>
&gt; SET_TARGET_PROPERTIES(${a} PROPERTIES OUTPUT_NAME ${a} DEBUG_POSTFIX<br>
&gt; &quot;_${VS_DIR}_${PLATFORM}_d&quot; RELEASE_POSTFIX &quot;_${VS_DIR}_${PLATFORM})<br>
&gt;<br>
&gt; My c CMakeLists contains:<br>
&gt; SET(c project_c)<br>
&gt; add_library(${c} ${SRCS_c} ${HDRS_c})<br>
&gt; ADD_DEPENDENCIES( ${c} ${a} )<br>
&gt;<br>
&gt; I hope it is clearer now and that I provided the required information...<br>
&gt;<br>
&gt; Ludo<br>
<br>
</div></div>Your c/CMakeLists.txt should look like this:<br>
<br>
set(c project_c)<br>
<div class="im">add_library(${c} ${SRCS_c} ${HDRS_c})<br>
</div>target_link_libraries(${c} project_a project_b)<br>
<br>
<br>
In CMake you should always use *target* names, CMake handles the rest<br>
for you. Also, the dependencies will be automagically handles this way.<br>
<font color="#888888"><br>
<br>
Michael<br>
</font></blockquote></div><br><br clear="all"><div><br></div>-- <br>_______________________________________<br><br>Ludovic Hoyet<br>Research Fellow, <div><span style="font-family:Tahoma, Helvetica, sans-serif;font-size:13px;line-height:16px;background-color:rgb(255, 255, 255)">Graphics Vision and Visualisation group,</span><br>

Trinity College Dublin<br><a href="http://www.scss.tcd.ie/~hoyetl/" target="_blank">http://www.scss.tcd.ie/~hoyetl/</a></div><br>
</div>