On 27. Dec, 2009, at 23:30 , Pau Garcia i Quiles wrote:

> On Sun, Dec 27, 2009 at 10:16 PM, Michael Wild <them...@gmail.com> wrote:
>> 
>> On 27. Dec, 2009, at 20:41 , Pau Garcia i Quiles wrote:
>> 
>>> On Sun, Dec 27, 2009 at 10:59 AM, Michael Wild <them...@gmail.com> wrote:
>>>> 
>>>> On 26. Dec, 2009, at 17:53 , Pau Garcia i Quiles wrote:
>>>> 
>>>>> Hello,
>>>>> 
>>>>> I think this has already been discussed and the answer is negative but
>>>>> still: when I do target_link_libraries to an external library (for
>>>>> instance, my application needs to link to sqlite), is it possible to
>>>>> tell CMake to link to the static version of sqlite instead of the
>>>>> dynamic version?
>>>>> 
>>>>> For instance, in Debian the libsqlite3-dev package contains both the
>>>>> static and the dynamic versions of the library and they have the very
>>>>> same name:
>>>>> 
>>>>> /usr/lib/libsqlite3.a
>>>>> /usr/lib/libsqlite3.so
>>>>> 
>>>>> ( http://packages.debian.org/sid/i386/libsqlite3-dev/filelist )
>>>>> 
>>>>> Is this feature going to be implemented any time soon? I have not
>>>>> looked at the sources for target_link_libraries but at first sight it
>>>>> doesn't look difficult to add  something like
>>>>> "static;optimized;libsqlite3.a;dynamic;optimized;libsqlite3.so".
>>>>> There's the problem of find_library on Windows confusing the .lib as
>>>>> the import for a .dll with a static .lib library but IIRC it's
>>>>> possible to detect that.
>>>> 
>>>> Perhaps a variable CMAKE_FIND_STATIC with the possible values "FIRST" 
>>>> "LAST", "ONLY" and "NEVER, similar to CMAKE_FIND_FRAMEWORK, would fit the 
>>>> bill?
>>> 
>>> No, it won't. If my application links to two libraries, I may want to
>>> link statically to libA but dynamically to libB.
>> 
>> But then, on Debian a static version of sqlite3 is available, but not on Mac 
>> OS X (that is, without compiling it yourself). What should be the behavior 
>> there? Perhaps this could be expanded to optional options FIND_STATIC of 
>> find_library and find_package? Besides, the variable IS enough:
>> 
>> set(CMAKE_FIND_STATIC FIRST)
>> find_library(SQLITE_LIBRARY sqlite3)
>> 
>> set(CMAKE_FIND_STATIC LAST)
>> find_library(OTHER_LIBRARY other)
> 
> Instead of having CMAKE_FIND_STATIC, CMAKE_FIND_FRAMEWORK,
> CMAKE_FIND_APPBUNDLE, etc, those could be replaced with something like
> this in find_library:
> 
> find_library(
>          <VAR>
>          name | NAMES name1 [name2 ...]
>          [...]
>          VARIANT variant1 [variant2 ...]
>          )
> 
> Where "variant1", "variant2", etc would be "shared static framework
> bundle" by default. That'd mean find_libraries searches for shared,
> static, framework and bundle in that order.
> 
> With my proposal for find_library, and the one I made in the first
> e-mail of this thread, if I do:
> 
> find_library( SQLITE3_LIBRARY_RELEASE sqlite3 VARIANT static shared )
> 
> I'd have:
> SQLITE3_LIBRARY_RELEASE=static;release;/usr/lib/libsqlite3.a
> 
> But if I do:
> 
> find_library( SQLITE3_LIBRARY_RELEASE sqlite3 VARIANT shared static )
> 
> I'd have:
> SQLITE3_LIBRARY_RELEASE=share;release;/usr/lib/libsqlite3.so
> 
> I. e. I'm expressing preference: in the first case I'm saying "I'd
> like to find a static version of sqlite3 but if it's not available,
> give me the shared version". I could also look for the static version
> only:
> 
> find_library( SQLITE3_LIBRARY_RELEASE sqlite3 VARIANT static )
> 
> or the shared one:
> 
> find_library( SQLITE3_LIBRARY_RELEASE sqlite3 VARIANT shared )
> 
> Meaning: in the first case "I want to find a static version of sqlite3
> and fail if it's not available".
> 
> Neither of those should not be the default, though.
> 
> So for instance if I do:
> 
> find_library( SQLITE3_LIBRARY_RELEASE sqlite3 )
> 
> That'd would be equivalent to:
> 
> find_library( SQLITE3_LIBRARY_RELEASE sqlite3 VARIANT shared static
> framework bundle )
> 

That sounds doable to me. However, you'd need a mechanism to express the same 
preference when calling find_package and then have find_package communicate 
that to find_library. Not sure how fine-grained the control should be for 
FindXXX.cmake modules that find more than one library (or call another 
FindYYY.cmake internally).


Michael

_______________________________________________
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

Reply via email to