Cmake:如何将库标记为依赖于系统库

Cmake: how to mark library as dependent on a system library

本文关键字:记为 依赖于 系统库 Cmake      更新时间:2023-10-16

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

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

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

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

如果你创建了一个共享库,你总是可以将一些其他库链接到它。因此,如果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规则)。那么CCD_ 7的所有用户也将链接CCD_。

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

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