我有一个依赖于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.cc
和s2.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
(或者有适当的make
或cmake
规则做上述)。 那么libyours.so
所有用户也会链接到/usr/lib/libutil.so
。
然而,你真正关心的是软件包依赖。 在你的libyours
上制作一个包(Debian或者Ubuntu libyours
)的包,这个包会依赖于其他的包。
你也可以使用,并让你的libyours
用户使用pkg-config 。 然后编写一个描述依赖关系的libyours.pc
文件。