Visual C++ 2017でプロジェクトを作る際、exe本体の他にlib,dllのプロジェクトを作ることがある。
このとき、プロジェクト設定を例えば以下のようにしておくと、何かと便利である。オープンソース系のプロジェクトを日常的にコンパイルするならその慣例にならえば良いと思う。
また、pdbはデバッグ時にはあっていいがReleaseにはいらないので、Releaseビルドの時には出力されないようにする。
NewSolution
+--ExeProject //ソースコードが入る
+--DllProject //ソースコードが入る
+--Libs
+--x64
+--Release // lib,expが入る
+--Debug // lib,exp
+--Builds
+--x64
+--Release //exe,dllが入る
+--Debug //exe,dll,pdb が入る
DLLProjectを右クリック
● → プロパティページ → リンカー → デバッグ →
(構成をReleaseにしてから) デバッグ情報の生成 => 「いいえ」
さらに、iobj,ipdbが出力される場合は、
● → プロパティページ → リンカー → 最適化 →
(構成をReleaseにしてから) リンク時のコード生成 =>「既定」
● → プロパティページ → リンカー → 詳細設定 → インポートライブラリ
変更前 : $(OutDir)$(TargetName).lib
変更後 : $(SolutionDir)Libs\$(Platform)\$(Configuration)\$(TargetName).lib
これで、NewSolution\Libs\x64\Release\ にlibとexpが出力されるようになる。
最後に、libをリンクしたいexeのプロジェクトで、上記libファイル出力先を参照先に指定する
● → プロパティページ → リンカー → 全般 → 追加のライブラリディレクトリ
追記 : $(SolutionDir)Libs\$(Platform)\$(Configuration)
exe側、dll側同様に、
● → プロパティページ → 全般 → 出力ディレクトリ
変更前 : $(SolutionDir)$(Platform)\$(Configuration)\
変更後 : $(SolutionDir)Builds\$(Platform)\$(Configuration)\
詳しくは以下を参照:
https://msdn.microsoft.com/ja-jp/library/c02as0cs.aspx
今回使用したのは、
$(SolutionDir) | slnファイルのあるディレクトリへのパスが入る。最後に’¥’がつく |
$(Platform) | x64,win32などが入る。最後に’¥’はつかない。→ |
$(Configuration) | Release,Debugなどが入る。最後に’¥’はつかない。→ |