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

我有一个依赖于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规则做上述)。 那么libyours.so所有用户也会链接到/usr/lib/libutil.so

然而,你真正关心的是软件包依赖。 在你的libyours上制作一个包(Debian或者Ubuntu libyours )的包,这个包会依赖于其他的包。

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