CMake + OpenCV "3.0" + Visual Studio
OpenCV3.0をVisualStudioで使おうとするとこんなエラーが出ます。
error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MTd_StaticDebug' doesn't match value 'MDd_DynamicDebug' in main.obj
これはビルド済みのOpenCVが使っているライブラリとビルドしようとしているプログラムのライブラリが同じ必要があるのに違うために起こっているようです。
これはVisualStudioのプロジェクトの設定から「C/C++」→「コード生成」と移動し、「ランタイムライブラリ」の項目をMT→MDに変更すればコンパイルでき、実行可能です。
ただCMakeを使っている場合はCMakeLists.txtを変更するたびにこの変更が毎回元に戻ってしまうので面倒です。
なのでCMakeにMD→MTに変更するための設定を追記します。
重要なのはこちら
set(CompilerFlags
CMAKE_CXX_FLAGS
CMAKE_CXX_FLAGS_DEBUG
CMAKE_CXX_FLAGS_RELEASE
CMAKE_C_FLAGS
CMAKE_C_FLAGS_DEBUG
CMAKE_C_FLAGS_RELEASE
)
foreach(CompilerFlag ${CompilerFlags})
string(REPLACE "/MD" "/MT" ${CompilerFlag} "${${CompilerFlag}}")
endforeach()
これを書くことで設定中に存在しているMDをすべてMTに変更してくれます。
めでたしめでたし