CMake:如何只安装通过find_library找到的共享库?

时间:2018-02-07 19:31:07

标签: cmake installation shared-libraries static-libraries

我有几个第三方库,有些是共享的,有些是静态的,我需要安装共享库(进入RPM进一步重新分配)。

目前我正在查找find_library,列出了所有需要的库并将其传递给install(FILES ...)

但是这样安装了.a.so个库。

使用install(TARGETS ...) RUNTIMEARCHIVE等分隔。 但我不想为每个lib创建一个虚拟目标。

我也不想将lib分成共享和静态(已经有另一种分离)。

我是否有更好的方法来过滤共享库而不仅仅是正则表达文件名?也许图书馆被视为“更多”的东西。而不仅仅是find_library之后的文件路径,所以我可以从中获取库类型?

1 个答案:

答案 0 :(得分:0)

让我们看看发生了什么。

  1. 您可以通过包管理器安装一些库(yum / dnf / apt-get / sth else)。
  2. 您构建自己的应用。
  3. 您分发您的应用。
  4. 如果是这样,你不应该要求cmake安装这些库,因为如果其他人想通过另一个rpm包安装相同的第三方库,则会产生冲突(并且必须删除一个包) - 它&#39一团糟。

    管理库依赖的地方是包管理器 - 创建rpm包,其中包含:

    Requires: all_your_dynamic_libs
    BuildRequires: all_your_static_libs
    

    如果第1点相反 - 您可以通过make&&amp ;;安装一些库。 make install然后你应该首先为它创建rpm包。

    创建所有这些额外的工作是一种痛苦,但相信我,你不想创建一体化的包。