Visual Studio で外部ライブラリを使った場合、普通はライブラリをインストールしたシステム上でしか動かせない。
そこで、ライブラリをプロジェクトと同じフォルダに突っ込むことで、同じバージョンの Visual Studio をインストールした他のPCに持っていってもそのままコンパイルができるようにすることができる。
講習会とかで学生無料のVisual Studioインストールしたけどライブラリを各人でインストールさせるのは面倒だからこのプロジェクトそのまま使って、みたいな感じには役立つかもしれない。
手順
ここではOpenCVの場合を考える。そうでない場合でも大して変わらないはず。
ライブラリは
からなっている。そのため、それらが参照できる状態になっている必要がある。
そこで、これらのファイルを含んだライブラリをプロジェクトの入っているディレクトリに突っ込んで、ディレクトリの相対パスで指定するようにすれば、システムにインストールせずともOpenCVを使ったプログラムがコンパイル・実行できるようになる。
プロジェクト作成
まず、新しいプロジェクトを作成する。「ファイル」→「新規作成」→「プロジェクト」から新しいプロジェクトのウィンドウを開く。
ここでは「Visual C++」の「Win32 コンソールアプリケーション」を選択、プロジェクトの名前とかは適当に入力しOKをクリック。
Win32 アプリケーションウィザードが開くので適当に設定する。
作成したプロジェクトのフォルダにライブラリを入れる
以下フォルダの名前や構造については設定で整合性がついていればいいので適当に。
ここでは "C:\vsproject\opencvlibinstall" が作成したプロジェクトの入っているディレクトリである。
ここに “Library” フォルダを作成する。
Library フォルダ内に opencv フォルダを作成する。
Visual Studioの構成プロパティでコンパイル時に必要なものを設定する
ここではライブラリにパスを通すことで使えるようにする。ここで、パスを設定する際に、
などのようにマクロ $(~) を使うことで相対的にディレクトリを指定できる。 $(SolutionDir) はソリューションファイルがあるディレクトリを示す(ここでは"C:\vsproject\opencvlibinstall\")。ディレクトリの表現は\で終わる形になっているので余計な\を入れないように。
マクロの一覧はパス設定を行うウィンドウの「マクロ」ボタンをクリックすると一覧が確認できる。他には $(ProjectDir) なども使えるかもしれない(プロジェクトファイルのあるディレクトリを示す)。
ソリューションエクスプローラからプロジェクト名を右クリックしプロパティを開く(あるいは、メニューからプロジェクト→~のプロパティ)。
構成プロパティ下のVC++ディレクトリタブを開く。
インクルードディレクトリにヘッダファイルのディレクトリを追加する。「インクルードディレクトリ」の項目をクリックすると右端に出てくる逆三角のボタンをクリック、「<編集...>」をクリック。
$(SolutionDir)Library\opencv\include
を追加する。
次に、ライブラリディレクトリに.libファイルのディレクトリを同様に追加する。
ここで、ライブラリディレクトリについて、 32ビットアプリケーション用であれば x86, 64ビットアプリケーション用であれば x64 のフォルダを選ぶ。さらにその中で、 vc10 が Visual Studio 2010 用, vc11 が Visual Studio 2012 用, vc12 が Visual Studio 2013 用なので自分の環境にあった物を選ぶ。そのフォルダの下にあるのが
ここでは、Visual Studio 2013で32ビットアプリケーションを作成しているので、ディレクトリは x86\vc12\lib であり、次を追加することになる。
$(SolutionDir)Library\opencv\x86\vc12\lib
左ペインで リンカー→入力 タブを開く。
「追加の依存ファイル」に、使いたい .lib ファイルを追加する。ここでは、
opencv_video2410d.lib;opencv_ml2410d.lib;opencv_legacy2410d.lib;opencv_core2410d.lib;opencv_highgui2410d.lib;opencv_imgproc2410d.lib;opencv_features2d2410d.lib
を追加した。