繁体   English   中英

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

[英]Cmake: how to mark library as dependent on a system library

我有一个C ++库,该库依赖于linux系统库util。 我可以使用g ++命令“ g ++ lib.cpp -lutil”来编译我的库,并且可以正常编译。

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

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

所有您需要做的是你的链接库lib使用到UTIL target_link_libraries 现在,只要其他目标(可执行文件或库)链接到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规则)。 然后, libyours.so所有用户还将链接/usr/lib/libutil.so

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

您还可以使用pkg-config并让您的libyours用户使用pkg-config 然后编写一个libyours.pc文件,描述相关性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM