gpt4 book ai didi

cmake - 安装带有必要链接的共享导入库

转载 作者:行者123 更新时间:2023-12-02 04:34:17 26 4
gpt4 key购买 nike

这个问题询问如何使用已导入而不是由当前项目构建的 cmake 安装共享库:

Can I install shared imported library?

重复这个问题:

add_library(libfoobar SHARED IMPORTED)
# this install command is illegal
install(TARGET libfoobar LIBRARY DESTINATION "${RPMBUILDROOT}${LIBDIR}")

这被提出为 [ https://gitlab.kitware.com/cmake/cmake/issues/14311|issue]使用已关闭的cmake,有效地解决了将无法修复的问题。相当合理的理由是,cmake 对导入目标的了解不足,无法可靠地安装它。

该问题的答案忽略了一点, install(TARGET) 将在 GNU/Linux 和其他需要这样做的类 unix 平台上自动创建从 libfoo.so 到 libfoo.so.major 和 libfoo.so.minor 版本的链接。

有没有办法劫持 cmake 将自定义目标视为由项目构建或以其他方式说服它创建这些链接?
就像是:
add_library(libfoobar SHARED IMPORTED)

#? add_custom_target(X libfoobar)
install(TARGET X LIBRARY DESTINATION "${RPMBUILDROOT}${LIBDIR}")

这样做的规范方法是什么?

最佳答案

当一个库被 CMake 构建时,它是 CMake 分配版本号 给它(根据 project's settings )。

当库不是由 CMake 构建时, CMake 不知道版本 ,因此它无法为您创建符号链接(symbolic link)。

如果您担心 CMake 实际安装的是符号链接(symbolic link)而不是文件,请在安装前解析符号链接(symbolic link),例如 that question .

好吧,你可以问 CMake 到 猜测 库的soversion(例如,通过解析符号链接(symbolic link)并检查它们的名称)。但是为什么你需要符号链接(symbolic link)?

soversion 符号链接(symbolic link)的主要目的是解决与 future 库的 的兼容性问题。更新 .但是只有在项目 安装了库时才能进行更新。谁创造了它 .

如果您的项目安装了其他项目生成的库,则您不太可能希望支持 的更新。本地 库的安装。所以你不需要支持soversions。

关于cmake - 安装带有必要链接的共享导入库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45213145/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com