【问题标题】:Cmake: how to mark library as dependent on a system libraryCmake:如何将库标记为依赖于系统库
【发布时间】:2013-09-04 17:32:55
【问题描述】:

我有一个依赖于 linux 系统库 util 的 C++ 库。我可以用 g++ 命令“g++ lib.cpp -lutil”编译我的库,它编译得很好。

当我将我的库添加到我们更大的项目中时,我遇到了麻烦。我可以转到包含我们库的每个目标并使用“target_link_libraries”命令使其包含 util。问题是有许多目标依赖于这个库。如果我可以只编辑库的 CMakeLists.txt 并说它取决于 util,那就更好了。但我找不到这样做的方法。

是否可以将我的库标记为依赖于 util,以便包括我的库在内的任何目标也将链接到 util 中?

【问题讨论】:

    标签: c++ c linux cmake


    【解决方案1】:

    您所要做的就是使用target_link_libraries 将您的库lib 链接到util。现在,只要其他目标(可执行文件或库)链接到 lib,它们也会链接到 util

    【讨论】:

      【解决方案2】:

      如果您创建了一个共享库,您可以随时将其他一些库链接到它。因此,如果 s1.ccs2.cc 是您的库的来源(共享一个共同的 header.h),您可以编译库

        g++ -Wall -fPIC s1.cc -c -o s1.pic.o
        g++ -Wall -fPIC s2.cc -c -o s2.pic.o
        g++ -Wall -shared s1.pic.o s2.pic.o -lutil -o libyours.so
      

      (或有适当的makecmake 规则执行上述操作)。那么libyours.so 的所有用户也会链接/usr/lib/libutil.so

      然而,你真正关心的是包依赖。为您的libyours 制作一个软件包(Debian 或 Ubuntu 上的 .deb,...),该软件包将适当地依赖于其他软件包。

      您也可以使用 libyours 的用户并让您的用户使用 pkg-config。然后编写一个libyours.pc 文件描述依赖关系。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-04-18
        • 2023-03-04
        • 2011-12-19
        • 1970-01-01
        • 2021-11-21
        • 1970-01-01
        • 2011-02-28
        • 1970-01-01
        相关资源
        最近更新 更多