[CMake] Version in name of shared library

Michael Wild themiwi at gmail.com
Thu Sep 6 04:09:28 EDT 2012


On 09/06/2012 10:05 AM, Benjamin Eikel wrote:
> Am Donnerstag, 6. September 2012 um 10:01:36 schrieb Michael Wild:
>> On 09/06/2012 09:43 AM, Anton Sibilev wrote:
>>> Hi all!
>>>
>>> I'm making shared library with add_library(xxx SHARED xxx.c) and as
>>> result I got 'libxxx.so'.
>>> I want to create lib with name like 'libxxx.so.1', can you please help,
>>> how to make this?
>>>
>>> Point is not to create link or copy libxxx.so -> libxxx.so.1, but to
>>> create it initially.
>>>
>>> Thanks!
>>
>> You need to set the VERSION and SOVERSION target properties:
>>
>> http://cmake.org/cmake/help/v2.8.8/cmake.html#command:set_target_properties
> 
> Right. One example:
> 
> set(MYLIB_VERSION_MAJOR 0)
> set(MYLIB_VERSION_MINOR 1)
> set(MYLIB_VERSION_PATCH 1)
> set(MYLIB_VERSION_STRING ${MYLIB_VERSION_MAJOR}.${MYLIB_VERSION_MINOR}.${MYLIB_VERSION_PATCH})
> 
> set_target_properties(MyLib PROPERTIES VERSION ${MYLIB_VERSION_STRING}
>                                           SOVERSION ${MYLIB_VERSION_MAJOR})
> 

As an added remark: The SOVERSION is not necessarily the same as the
major version. The rule is that any breakage of the ABI must be
indicated by incrementing the SOVERSION. So, adding e.g. functions is no
problem, modifying argument lists or removing functions would required
the SOVERSION to be incremented. Similar rules hold of course for
non-opaque data-structures. For C++ the whole issue is infinitely more
complicated, as determining whether the ABI was changed in an
incompatible way is AFAIK nearly impossible.

Michael



More information about the CMake mailing list