SOVERSION¶
共享库目标的 ABI 版本号。
对于共享库,VERSION 和 SOVERSION 可分别用于指定构建版本和 ABI 版本。如果平台支持符号链接且链接器支持 so-name,则在构建或安装时会创建相应的符号链接。如果仅指定了其中一个,则缺失的那个被假定为具有相同的版本号。如果设置了 NO_SONAME 属性,则 SOVERSION 会被忽略。
一种常见的惯例是同时指定 VERSION 和 SOVERSION,使得 SOVERSION 与 VERSION 的第一部分相匹配。
set_target_properties(mylib PROPERTIES VERSION 1.2.3 SOVERSION 1)
其设计理念是:对 ABI 的破坏性更改应同时增加 SOVERSION 和 VERSION 的主版本号。
Windows 版本¶
对于 Windows 上的共享库和可执行文件,VERSION 属性会被解析以提取 <major>.<minor> 版本号。这些数字将用作二进制文件的映像版本(image version)。
Mach-O 版本¶
对于 Mach-O 系统(例如 macOS、iOS)上的共享库和可执行文件,SOVERSION 属性对应于兼容性版本(compatibility version),而 VERSION 对应于当前版本(current version)(除非提供了下述的 Mach-O 特有覆盖项)。有关示例,请参见 FRAMEWORK 目标属性。
对于共享库,MACHO_COMPATIBILITY_VERSION 和 MACHO_CURRENT_VERSION 属性可分别用于覆盖兼容性版本和当前版本。请注意,SOVERSION 仍将用于构成 install_name,并且 SOVERSION 和 VERSION 都可能会影响文件和符号链接名称。
可以使用 otool -L <binary> 命令检查 Mach-O 二进制文件的版本。