我正在使用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。
谢谢!
答案 0 :(得分:1)
我意识到这是一个迟到的答案,它甚至可能不是你想要的最终。但是,ddkbuild.cmd
有一个非常好的机制,可以在特定目录中构建之前和之后运行操作。
我们在我们的一个驱动程序库中使用它,它必须构建为许多静态库,并作为最终步骤链接到一个大的静态库,就像你想要的那样。如果您能够在项目中使用ddkbuild.cmd
之类的东西,这将提供一个解决方案,它也是一个可以在自动构建中使用的解决方案。
注意:就我所知,你无法直接用build.exe
达到你想要的效果。但是,使用一些make(NMake)文件杂技很可能会获得类似的结果。所以问题是,当已经存在时,是否值得重新发明轮子。
答案 1 :(得分:0)
lib实用程序可以组合库。使用您的示例,命令将是:
lib /out:CombinedLib.lib LibA.lib LibB.lib LibC.lib
答案 2 :(得分:0)
我遇到了和你一样的情况。谷歌很多,仍然没有解决方案。幸运的是,我找到了解决问题的方法。您可以尝试它,在libA源文件中添加以下语句。
LIBRARIAN_FLAGS = $(LIBRARIAN_FLAGS) libB.lib libC.lib