Pau Garcia i Quiles wrote:
On Sun, Dec 27, 2009 at 6:26 PM, Bill Hoffman <bill.hoff...@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?


What version of CMake are you using? This should work... As of 2.6.2 (I think...) CMake uses full paths to libraries, see policy CMP0003: http://www.cmake.org/cmake/help/cmake-2-8-docs.html#policy:CMP0003. It does not matter if there are two libraries in the same directory. There is no way to force find_library to find the static one. However, if you tell CMake to link to a full path to /usr/lib/libsqlite3.a, it should link to /usr/lib/libsqlite3.a even if /usr/lib/libsqlite3.so exists.

-Bill


_______________________________________________
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