2

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

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

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

4

2 回答 2

4

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

于 2013-09-04T18:15:43.520 回答
0

如果您创建一个共享库,您可以随时将其他一些库链接到它。因此,如果s1.cc并且s2.cc是您的库的来源(共享一个 common 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

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

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

于 2013-09-04T18:13:24.427 回答