[CMake] target_link_libraries: prefer static to dynamic

Pau Garcia i Quiles pgquiles at elpauer.org
Sun Dec 27 15:07:27 EST 2009


On Sun, Dec 27, 2009 at 6:26 PM, Bill Hoffman <bill.hoffman at kitware.com> wrote:
> 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.
>>
> If you use the full path then it should work fine.  find_library will always
> return the full path.  So if you do target_link_libraries(foo ${SQLITELIB})
> where SQLITELIB = /usr/lib/libswlite3.a then it will work just fine.

That will not work in the case I was describing, where you have both
the shared and the static versions of the library installed. Futher,
it would be even worse if both the static and the shared versions of
the library are installed but in different paths, because you would
depend on what path is searched first.

As I said if you install libsqlite3-dev on a Debian-based distro, it
will install both /usr/lib/libsqlite3.a and /usr/lib/libsqlite3.so.
How can I be sure find_library will find the static version before the
dynamic one. What happens if the path to the static library is
searched after the path to the shared library?

-- 
Pau Garcia i Quiles
http://www.elpauer.org
(Due to my workload, I may need 10 days to answer)


More information about the CMake mailing list