On Thu, Dec 4, 2008 at 3:47 PM, David Cole <span dir="ltr">&lt;<a href="mailto:david.cole@kitware.com">david.cole@kitware.com</a>&gt;</span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
I think you&#39;re looking at Visual Studio project dependencies and not link dependencies. It should not build *without* target_link_libraries calls. They are necessary to get correct linker command lines. add_dependencies does not link any libraries to anything, it just guarantees project building order...</blockquote>
</div><br>However, visual studio&#39;s option to &quot;Link Library Dependencies&quot; is
enabled for project C, so this shows up as my command line for project
C:<br>
<br>
<b>/OUT:&quot;C:\IT\work\cmaketest\Debug\C.exe&quot; /VERSION:0.0 /INCREMENTAL
/NOLOGO /LIBPATH:&quot;.\Debug&quot; /LIBPATH:&quot;.&quot; /MANIFEST
/MANIFESTFILE:&quot;C.dir\Debug\C.exe.intermediate.manifest&quot;
/MANIFESTUAC:&quot;level=&#39;asInvoker&#39; uiAccess=&#39;false&#39;&quot; /DEBUG
/PDB:&quot;C:/IT/work/cmaketest/Debug/C.pdb&quot; /SUBSYSTEM:CONSOLE /DYNAMICBASE
/NXCOMPAT /IMPLIB:&quot;C:\IT\work\cmaketest\Debug\C.lib&quot;
/ERRORREPORT:PROMPT kernel32.lib user32.lib gdi32.lib winspool.lib
shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib&nbsp;
myClb.lib &quot;.\debug\b.lib&quot; &quot;.\debug\z.lib&quot; &quot;.\debug\a.lib&quot;</b><br>
<br>
Notice that both b.lib, z.lib, and a.lib are linked to C here. I&#39;m only using add_dependencies() and this happens. You state that it only guarantees project building order, but why (for visual studio, at least) is it providing link dependencies as well? Is this just an artifact of visual studio? Can I expect this behavior to be portable to other CMake outputs?<br>

<br>I&#39;ve also noticed another weird behavior that I can&#39;t seem to work
around. I&#39;ve modified the code I previously posted to this:<br>
<br>
<span style="font-family: courier new,monospace;">cmake_minimum_required( VERSION 2.6 )</span><br style="font-family: courier new,monospace;">
<br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">link_directories( ${CMAKE_CURRENT_SOURCE_DIR} )</span><br style="font-family: courier new,monospace;">
<br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">project( Z )</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">add_library( Z STATIC Z.cpp )</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">target_link_libraries( Z Zlb )</span><br style="font-family: courier new,monospace;">
<br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">project( A )</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">add_library( A STATIC A.cpp )</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">add_dependencies( A Z )</span><br style="font-family: courier new,monospace;">
<br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">project( B )</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">add_library( B STATIC B.cpp )</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">add_dependencies( B A Z )</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">target_link_libraries( B Blb Bfoo )</span><br style="font-family: courier new,monospace;">
<br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">project( C )</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">add_executable( C C.cpp )</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">add_dependencies( C B )</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">target_link_libraries( C myClb )</span><br>
<br>
If you look at the command line I pasted earlier for project C, notice
that only myClb.lib is on the command line. I&#39;m expecting to see
Blb.lib, Bfoo.lib, and Zlb.lib there as well. If I go to project B&#39;s
command line, I only see this:<br>
<br>
<b>/OUT:&quot;C:\IT\work\cmaketest\Debug\B.lib&quot; /NOLOGO</b><br>
<br>
It&#39;s not even linking against Blb.lib or Bfoo.lib! Why are these target link libraries being ignored?<br>