2012-04-24 10 views
0

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

LIBAのソースファイルには、次のようなものになります。私はあなたが手動でlink.exeとライブラリをリンクすることができることを理解

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 /lib LibA.lib LibB.lib LibC.lib 

しかし、可能な場合は、ビルドプロセスの後の時点でいくつかのターゲットは、LIBAに依存しているため、私は、LIBAのためのビルドプロセスの一環として、これと同じ効果を達成するためのいくつかの方法をしたいと思います。

ありがとうございます!

答えて

0

私はあなたと同じ状況に遭遇しました。 Googleはまだ多くのソリューションを持っていません。幸いにも、私はそれを最終的に解決する方法を見つけました。それを試してみて、libAソースファイルに以下のステートメントを追加してみてください。

LIBRARIAN_FLAGS = $(LIBRARIAN_FLAGS) libB.lib libC.lib 
+1

これは質問に対する答えではありません。 – bmargulies

+0

非常に遅い返信ですが、実際には@bmarguliesですが、これは質問に対する答えです。 +1。私は、ビルドプロセスの中で、他のライブラリをターゲットライブラリ(LibA)に静的にリンクする方法を探していました。それがまさにこれがしていることです。ただし、LibAにリンクしたいライブラリもビルドプロセスの一部として構築されている場合は、何らかのラッパースクリプトを使用してビルドオーダーを実施せずに作成されたことを保証できないため、競合条件があります。 'build.exe'はビルドを並行して実行します。 – user1354557

0

libユーティリティはライブラリを結合できます。例を使用すると、コマンドは次のようになります。

lib /out:CombinedLib.lib LibA.lib LibB.lib LibC.lib 
+0

応答のおかげで、しかし、この解決策は、私がLINK.EXEで述べたものと機能的に同等です。私が探しているのは、ビルドプロセスに直接組み込まれているものです(たとえば、おそらくTARGETLIBSに似たマクロ)。私はこれを行う方法をまだ見つけていないので、それは可能ではないかもしれませんが、今のところ、LibAをビルドしたバッチスクリプトを実行し、LibAをリンクし、 LibAがLibBおよびLibCを含むと仮定する。それはかなり醜いです。 – user1354557

1

これは遅い回答であり、最終的にはあなたが望むものではないかもしれません。しかし、ddkbuild.cmdは、特定のディレクトリ内のビルドの前後にアクションを実行するかなり気の利いたメカニズムを持っています。

私たちは、必ずしも静的ライブラリの数とし、多くのあなたが望むような一つの大きな静的ライブラリにリンク最終ステップとして建てられます、当社のドライバライブラリのいずれかでこれを使用しています。あなたのプロジェクトにddkbuild.cmdのようなものを使用できるのであれば、これは解決策を提供し、自動化されたビルドでも機能するソリューションです。

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

+0

私はこの効果をnmakeを通して完全に達成したかったのです。なぜなら、 'build'と打ち込んですべてのサブプロジェクトを一度に作ることができたからです。私は 'NTTARGETFILE2'を使ってビルド後の操作をしようとしましたが、ビルドの順序が重要なので、成功は競合状態に依存していました。私がやったことは、特定のシーケンスで各サブプロジェクトを個別に構築した包括的なラッパースクリプトを書くことでした。これにより、 'makefile.inc'のリンカーコマンドやその他のポストビルド操作で問題なくNTTARGETFILE2を使用することができました。とにかく、 'ddkbuild.cmd'の+1。それはかなり便利です。 – user1354557

関連する問題