[CMake] Fwd: MSVC7.1 static link question
ankitguddu at gmail.com
Wed Feb 11 00:15:42 EST 2009
---------- Forwarded message ----------
From: ankit jain <ankitguddu at gmail.com>
Subject: Re: [CMake] MSVC7.1 static link question
To: Brad King <brad.king at kitware.com>
2009/2/10 Brad King <brad.king at kitware.com>
Luigi Calori wrote:
>> Bill Hoffman ha scritto:
>>> Philip Lowman wrote:
>>>> On Mon, Feb 9, 2009 at 12:39 PM, Luigi Calori <l.calori at cineca.it<mailto:
>>>> l.calori at cineca.it>> wrote:
>>>> I' m quite a newbie in static linking, I would like to combine two
>>>> into one:
>>>> say libtiff needs libjpeg and zlib
>>>> If you generate them separately, then when you build an executable
>>>> needs libtiff, you have to link also libjpeg and zlib otherwise unref
>>>> It is possible, under VisualStudio interface, to specify libjpeg.lib
>>>> 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
>>>> 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
>>> target_link_libraries(libtiff libjpeg zlib)
>>> add_executable(myexe ...)
>>> target_link_libraries(myexe libtiff) # will link jpeg and zlib
>>> 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:
> CMake 2.6 makes it easy to export targets from one project (either its
> build tree or install tree) for use by another project.
> 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.
> Powered by www.kitware.com
> Visit other Kitware open-source projects at
> Please keep messages on-topic and check the CMake FAQ at:
> Follow this link to subscribe/unsubscribe:
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the CMake