[CMake] Issue w/ relative library paths between targets in CMake 2.8 / Visual Studio 9 2008

Ed Loper eloper at bbn.com
Thu Jun 10 14:34:24 EDT 2010


I have a CMake project that works fine with CMake 2.6, but when I build 
Visual Studio output with CMake 2.8, it doesn't seem to get the target 
library linking information quite right.  Here's a simplified version of 
my project:

Project/CMakeLists.txt
   -------------------------------------------------------
   ADD_SUBDIRECTORY(Foo)
   ADD_SUBDIRECTORY(Bar)
   -------------------------------------------------------

Project/Foo/CMakeLists.txt
   -------------------------------------------------------
   SET (LIBRARY Foo)
   # [...]
   GENERATE_PROJECT (${LIBRARY} "${SOURCE_FILES}" )
   ADD_LIBRARY (${LIBRARY} STATIC ${SOURCE_FILES})
   -------------------------------------------------------

Project/Bar/CMakeLists.txt
   -------------------------------------------------------
   # [...]
   ADD_EXECUTABLE (${BAR} ${SOURCE_FILES})
   TARGET_LINK_LIBRARIES(${FOO} ${BAR})
   -------------------------------------------------------

Under CMake 2.6, the Visual Studio project file for Bar would link to 
"..\Foo\$(OutDir)\Foo.lib".  But under CMake 2.8, it tries to link to 
just "Foo.lib", and Visual Studio can't find it.  In particular, the 
'AdditionalDependencies' field in the vcproj file is different:

=======================================================================
--- old_bar.vcproj
+++ new_bar.vcproj
=======================================================================
  <Configuration Name="RelWithDebInfo|Win32"
                 OutputDirectory="RelWithDebInfo" [...]>
     [...]
     <Tool Name="VCLinkerTool"
           LinkLibraryDependencies="false"
           AdditionalOptions=" /STACK:10000000 /machine:I386 /debug"
           AdditionalDependencies="$(NOINHERIT) kernel32.lib user32.lib
-             gdi32.lib [...] ..\Foo\$(OutDir)\Foo.lib"
+             gdi32.lib [...] Foo.lib"
           [...]/>
  </Configuration>
=======================================================================

Any idea what might be causing this and/or what I could do to fix it?

Thanks,
-Edward


More information about the CMake mailing list