如何防止CMake在安装时为共享库创建符号链接?

lan*_*tar 7 cmake shared-libraries software-packaging

有没有办法阻止CMake为共享库创建一个符号链接,比如libfoo.so当你使用so-versioning时(这意味着你会有类似的东西libfoo.so.0.8)?

我之所以问这个问题,是因为我有一个项目,我想让这个项目的多个版本并行安装.但是,如果多个包中存在类似符号链接的文件,则大多数包管理器会拒绝并行安装.

作为背景信息:我们正在使用CPack来构建软件包,最后我认为它是CPack的一个缺陷,你不能阻止这个符号链接,或者至少能够分离开发包和运行时包,例如debian.然而,到目前为止,我有一些幻想,只是阻止CMake创建符号链接可能比修补CPack更容易.

sak*_*kra 11

对于共享库,您可以使用install命令NAMELINK_SKIP选项来防止生成版本化库文件的无版本库名称符号链接.生成的CPack安装程序将在安装时遵循该设置.必须通过设置共享库目标的属性来指定库版本:SOVERSION

以下示例代码概述了所需的步骤:

add_library(foo SHARED foo.c)

set_target_properties(foo PROPERTIES SOVERSION "0.8")

install(TARGETS foo LIBRARY DESTINATION lib NAMELINK_SKIP)

include(CPack)
Run Code Online (Sandbox Code Playgroud)