---------- Forwarded message ---------- From: ankit jain <ankitgu...@gmail.com> Date: 2009/2/11 Subject: Re: [CMake] MSVC7.1 static link question To: Brad King <brad.k...@kitware.com>
2009/2/10 Brad King <brad.k...@kitware.com> Luigi Calori wrote: > >> Bill Hoffman ha scritto: >> >>> Philip Lowman wrote: >>> >>>> On Mon, Feb 9, 2009 at 12:39 PM, Luigi Calori <l.cal...@cineca.it<mailto: >>>> l.cal...@cineca.it>> wrote: >>>> >>>> I' m quite a newbie in static linking, I would like to combine two >>>> lib >>>> into one: >>>> say libtiff needs libjpeg and zlib >>>> If you generate them separately, then when you build an executable >>>> that >>>> needs libtiff, you have to link also libjpeg and zlib otherwise unref >>>> happens >>>> It is possible, under VisualStudio interface, to specify libjpeg.lib >>>> and >>>> zlib.lib as Additional Dependencies >>>> This way (even if the linker show warnings as duplicate symbols) I >>>> obtain a libtiff that can be used alone. >>>> My question is: can I obtain the same result with cmake? >>>> I' ve tried to use TARGET_LINK_LIBRARIES, that is perfecly working >>>> for >>>> exe and SHARED linkage but no success: the >>>> vs project has always the Additional Dependencies field empty. >>>> >>>> Am I completely missing something? >>>> >>>> CMake does not work that way since it is not achievable cross platform. >>> If you project is CMake based CMake will chain the libraries. If you use >>> other build tools then you will have to explicitly list libjpeg and zlib >>> with the libtiff. To do this in CMake you have two options: >>> >>> 1. have a library that uses libtiff >>> add_library(mylib ...) >>> target_link_libraries(mylib libtiff libjepg zlib) >>> add_executable(myexe ...) >>> target_link_libraries(myexe mylib) # will link in tiff jpeg and zlib >>> >>> 2. create an imported target for libtiff >>> add_library(libtiff IMPORTED) >>> set_target_properties(libtiff PROPERTIES IMPORTED_LOCATION >>> /path/to/libtiff.lib) >>> target_link_libraries(libtiff libjpeg zlib) >>> add_executable(myexe ...) >>> target_link_libraries(myexe libtiff) # will link jpeg and zlib >>> >>> >>> -Bill >>> >>> >>> >>> Hi Philip and Bill: >> >> I tried Philip suggestion and it seem working: it adds the flags as >> Additiona Optins in the commandline form and it seems to produce a >> libtiff.lib that links ok. >> The problem is that STATIC_LIBRARY_FLAGS property is not differentiated >> between Debug / Release. >> >> Bill, is your method equivalent? >> >> Is your suggestion applicable if the exe and the lib stay in two >> completely different projects? >> >> What I mean is that I ' m willing to have a CMake project that BUILDS and >> install libtiff.lib (static) >> >> Then I have another project that build a .dll (or .exe, I think it behave >> the same) that Find and use my libtiff.lib. >> >> Both your suggested method seem to assume that myexe and libtiff are >> built at the same time. >> This is not my case, I would like build libtiff static on win32 in such a >> way that allow other projects (built with cmake) to link it without adding >> explicitly the other dependent libraries. >> so to not require changes in the dependent project (it is actually >> OpenSceneGraph, Philip) >> So either modifying VS project or adding STATIC_LIBRARY_FLAGS I am able >> to do. >> >> I tried to use IMPORTED bud it did not worked >> > > Bill's example will not work as written. The target_link_libraries command > does not work for imported targets. See IMPORTED target and general > packaging documentation here: > > http://www.cmake.org/Wiki/CMake_2.6_Notes#Exporting_and_Importing_Targets > http://www.cmake.org/Wiki/CMake_2.6_Notes#Packages > > CMake 2.6 makes it easy to export targets from one project (either its > build tree or install tree) for use by another project. > > -Brad > > If our library which we want to link is not in the curre tn project and > we linkan executable to it through target_link_libraries by giving it entire > path like /another/project/lib, will it not work properly. is it compulsory > to use import and export targets for it. > Ankit > > _______________________________________________ > Powered by www.kitware.com > > Visit other Kitware open-source projects at > http://www.kitware.com/opensource/opensource.html > > Please keep messages on-topic and check the CMake FAQ at: > http://www.cmake.org/Wiki/CMake_FAQ > > Follow this link to subscribe/unsubscribe: > http://www.cmake.org/mailman/listinfo/cmake >
_______________________________________________ Powered by www.kitware.com Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Follow this link to subscribe/unsubscribe: http://www.cmake.org/mailman/listinfo/cmake