On Thu, Dec 4, 2008 at 3:47 PM, David Cole <[EMAIL PROTECTED]> wrote:
> I think you'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... However, visual studio's option to "Link Library Dependencies" is enabled for project C, so this shows up as my command line for project C: */OUT:"C:\IT\work\cmaketest\Debug\C.exe" /VERSION:0.0 /INCREMENTAL /NOLOGO /LIBPATH:".\Debug" /LIBPATH:"." /MANIFEST /MANIFESTFILE:"C.dir\Debug\C.exe.intermediate.manifest" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG /PDB:"C:/IT/work/cmaketest/Debug/C.pdb" /SUBSYSTEM:CONSOLE /DYNAMICBASE /NXCOMPAT /IMPLIB:"C:\IT\work\cmaketest\Debug\C.lib" /ERRORREPORT:PROMPT kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib myClb.lib ".\debug\b.lib" ".\debug\z.lib" ".\debug\a.lib"* Notice that both b.lib, z.lib, and a.lib are linked to C here. I'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? I've also noticed another weird behavior that I can't seem to work around. I've modified the code I previously posted to this: cmake_minimum_required( VERSION 2.6 ) link_directories( ${CMAKE_CURRENT_SOURCE_DIR} ) project( Z ) add_library( Z STATIC Z.cpp ) target_link_libraries( Z Zlb ) project( A ) add_library( A STATIC A.cpp ) add_dependencies( A Z ) project( B ) add_library( B STATIC B.cpp ) add_dependencies( B A Z ) target_link_libraries( B Blb Bfoo ) project( C ) add_executable( C C.cpp ) add_dependencies( C B ) target_link_libraries( C myClb ) If you look at the command line I pasted earlier for project C, notice that only myClb.lib is on the command line. I'm expecting to see Blb.lib, Bfoo.lib, and Zlb.lib there as well. If I go to project B's command line, I only see this: */OUT:"C:\IT\work\cmaketest\Debug\B.lib" /NOLOGO* It's not even linking against Blb.lib or Bfoo.lib! Why are these target link libraries being ignored?
_______________________________________________ CMake mailing list CMake@cmake.org http://www.cmake.org/mailman/listinfo/cmake