[Cmake] Question about shared library versioning

Andy Cedilnik andy.cedilnik at kitware.com
Thu Mar 27 14:16:08 EST 2003


Hi Brian,

Here is an example, but it may not be what you want:

# Version of library
SET(NJSVERSION_MAJOR 0)
SET(NJSVERSION_MINOR 1)
SET(NJSVERSION_PATCH 0)

# Create library
ADD_LIBRARY(njs ${NJS_SRCS})

# This will only work on unix
IF(UNIX)
  # Get library name
  SET(lib
${CMAKE_SHARED_MODULE_PREFIX}njs${CMAKE_SHARED_MODULE_SUFFIX})  

  # Get the path to the library
  IF(EXECUTABLE_OUTPUT_PATH)
    SET(lib ${EXECUTABLE_OUTPUT_PATH}/${lib})
  ELSE(EXECUTABLE_OUTPUT_PATH)
    SET(lib ${CMAKE_CURRENT_OUTPUT_PATH}/${lib})
  ENDIF(EXECUTABLE_OUTPUT_PATH)

  # Add custom command for making softlink
  ADD_CUSTOM_COMMAND(
    SOURCE njs
    TARGET njs
    COMMAND ln
    ARGS -s ${lib} ${lib}.${NJSVERSION_MAJOR})
  ADD_CUSTOM_COMMAND(
    SOURCE njs
    TARGET njs
    COMMAND ln
    ARGS -s ${lib} ${lib}.${NJSVERSION_MAJOR}.${NJSVERSION_MINOR})
  ADD_CUSTOM_COMMAND(
    SOURCE njs
    TARGET njs
    COMMAND ln
    ARGS -s ${lib}
${lib}.${NJSVERSION_MAJOR}.${NJSVERSION_MINOR}.${NJSVERSION_PATCH})
ENDIF(UNIX)

			Andy

On Thu, 2003-03-27 at 14:03, Brian Bassett wrote:
> Hello, 
> 
> I am looking at converting a project from the autoconf/automake/libtool
> trio to CMake and have noticed what appears to be a rather large
> deficiency in CMake.  It appears to be impossible to specify an soname
> for the UNIX dynamic linker or any kind of versioning info (i.e. for
> when a binary-incompatible change is made between two releases).  I have
> been able to specify this kind of thing with libtool's --version-info
> flag.
> 
> Right now, I simply get a "libnjs.so" with no soname when I set up an
> ADD_LIBRARY line in the CMakeLists.txt file.  What I'm after is
> something more like what libtool outputs:
> 
> lrwxrwxrwx    1 brian    brian          15 Dec  6 13:40 libnjs.so ->
> libnjs.so.0.1.0
> lrwxrwxrwx    1 brian    brian          15 Dec  6 13:40 libnjs.so.0 ->
> libnjs.so.0.1.0
> -rwxr-xr-x    1 brian    brian      800719 Feb 15  2001 libnjs.so.0.1.0
> 
> (It's not even necessary to have the third level (i.e. the .so.0.1.0);
> the .so -> .so.0 link and the library libnjs.so.0 linked with an soname 
> of libnjs.so.0 would suit my purposes enough to switch to CMake.)
> 
> I realize that all this is not possible for all platforms that CMake
> supports (Windows comes to mind).  It might be nice to be able to encode
> this information into the name of the dll file, for instance.





More information about the CMake mailing list