0

我正在使用 DDK 构建一个项目。一些构建目标生成小型内部库——为简单起见,我们称它们为 LibA.lib、LibB.lib 和 LibC.lib。但是 LibA 的代码引用了 LibB 和 LibC 的代码。要在项目中使用 LibA,您还需要包含 LibB.lib 和 LibC.lib 以解析所有依赖项。 我想要做的是将 LibB 和 LibC 链接到 LibA 中,这样用户只需要包含 LibA.lib。我怎样才能做到这一点?

LibA 的 SOURCES 文件如下所示:

TARGETNAME=LibA
TARGETTYPE=LIBRARY

TARGETPATH=..\lib\$(DDKBUILDENV)

INCLUDES = .; \
           ..\LibB; \
           ..\LibC; \
           $(CRT_INC_PATH) \
           $(SDK_INC_PATH)

SOURCES = LibA_main.cpp \
          LibA_file2.cpp \
          LibA_file3.cpp

我了解您可以手动将库与link.exe; 例如,

link.exe /lib LibA.lib LibB.lib LibC.lib

但如果可能的话,我希望通过某种方式来实现与 LibA 构建过程的一部分相同的效果,因为构建过程后期的一些目标依赖于 LibA。

谢谢!

4

3 回答 3

1

我意识到这是一个迟到的答案,最终它甚至可能不是你想要的。但是,ddkbuild.cmd它有一个非常漂亮的机制来在特定目录中构建之前和之后运行操作。

我们在我们的一个驱动程序库中使用它,该驱动程序库必须构建为多个静态库,并作为最后一步链接到一个大型静态库,就像您想要的那样。如果您能够ddkbuild.cmd在您的项目中使用类似的东西,这将提供一个解决方案,并且它也是一个适用于自动构建的解决方案。

注意:据我所知,您无法直接使用build.exe. 但是,很可能通过一些 make (NMake) 文件杂技,您可以获得类似的结果。所以问题是,当已经有一个轮子时,是否值得重新发明轮子。

于 2013-02-18T15:28:35.110 回答
0

lib 实用程序可以组合库。使用您的示例,命令将是:

lib /out:CombinedLib.lib LibA.lib LibB.lib LibC.lib
于 2012-08-11T22:39:44.223 回答
0

我遇到了和你一样的情况。谷歌了很多,仍然没有解决方案。幸运的是,我终于找到了解决它的方法。您可以尝试一下,在您的 libA 源文件中添加以下语句。

LIBRARIAN_FLAGS = $(LIBRARIAN_FLAGS) libB.lib libC.lib
于 2012-09-14T19:39:46.727 回答