0

DDK を使用してプロジェクトをビルドしています。いくつかのビルド ターゲットは、小さな内部ライブラリを生成します。簡単にするために、それらを LibA.lib、LibB.lib、および LibC.lib と呼びましょう。しかし、LibA のコードは、LibB と LibC のコードを参照しています。プロジェクトで LibA を使用するには、すべての依存関係を解決するために、LibB.lib と LibC.lib も含める必要があります。 私がやりたいことは、ユーザーが LibA.lib を含めるだけでよいように、LibB と LibC を LibA にリンクすることです。どうすればこれを達成できますか?

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特定のディレクトリ内でビルドの前後にアクションを実行するための非常に気の利いたメカニズムがあります。

これは、必要に応じて多くの静的ライブラリとしてビルドされ、最終ステップとして 1 つの大きな静的ライブラリにリンクされるドライバ ライブラリの 1 つで使用されます。プロジェクトで次のようなものを使用できる場合ddkbuild.cmd、これはソリューションを提供し、自動ビルドでも機能するソリューションです。

注意:私が知る限り、あなたが望むものを直接達成することはできませんbuild.exe。ただし、make (NMake) ファイルのアクロバットによって、同様の結果が得られる可能性は十分にあります。したがって、問題は、車輪が既にある場合に、車輪を再発明する価値があるかどうかです。

于 2013-02-18T15:28:35.110 に答える
0

私はあなたと同じ状況に遭遇しました。グーグルはたくさんあり、まだ解決策がありません。幸いなことに、私はそれを最終的に解決する方法を見つけました。あなたはそれを試すことができます、あなたのlibAソースファイルに以下のステートメントを追加してください。

LIBRARIAN_FLAGS = $(LIBRARIAN_FLAGS) libB.lib libC.lib
于 2012-09-14T19:39:46.727 に答える
0

lib ユーティリティは、ライブラリを組み合わせることができます。あなたの例を使用すると、コマンドは次のようになります。

lib /out:CombinedLib.lib LibA.lib LibB.lib LibC.lib
于 2012-08-11T22:39:44.223 に答える