在我的项目中,我在一个静态链接库中有一些共享代码,该代码由多个子项目使用,每个子项目都构建自己的可执行文件。我使用ar.o文件创建库。共享代码的一部分取决于静态链接的第三方库。

当前,我必须在每个makefile中(对于每个可执行文件)包括所有第三方库,并将它们传递给g++。是否可以将这些库包含在子项目共享的一个库中,所以在构建不同的可执行文件时不必显式引用它们?还是我的方法总体上有问题?

最佳答案

可以将您正在使用的所有静态库打包到一个大库中。你不要那样

处理这种情况的常用方法是在顶级makefile或几个makefile包含的.inc文件中定义变量:

MY_LIBS = -lOne -lTwo
MY_LDFLAGS = -L /path/to/libs

然后将这些变量添加到标准变量中
LDLIBS += $(MY_LIBS)
LDFLAGS += $(MY_LDFLAGS)

上面的变量由GNU Make隐式链接规则使用;如果您使用自己的规则,请确保使用以下变量,如下所示:
...
g++ $^ $(LDLIBS) $(LDFLAGS) -o $@

查看已建立的开源项目中的几个makefile,以获取启发。

引用文献:
  • https://www.gnu.org/software/make/manual/html_node/Using-Variables.html
  • https://www.gnu.org/software/make/manual/html_node/Implicit-Variables.html
  • 关于c++ - 是否可以在C/C++的其他库中包含静态链接的库?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32222560/

    10-13 05:05