Build OpenCV 2.4.13 with CUDA 7.5/7.0 and VC12 (Visual Studio 2013) 

試行錯誤でかなり苦労したので、これで動いてますというメモ。

# 作業環境

## ハードウェア
Windows 7 世代のノートPC。

+ Intel i7 3rd-Gen リアル4コア：疑似8コア DRAM 8GB
+ NVIDIA GeForce GT 650M

## ソフトウェア

+ MS Windows 10 pro 64 bit （最新）
+ MS Visual Studio 2013 Pro Update 2 （OpenCVとCUDAの対応指定による）
+ NVIDIA CUDA Toolkit 7.5 / 7.0 （安定版の最新/一世代前）
+ CMake 3.5.2 （最新）

## ライブラリー

+ OpenCV 2.4.13 （2系の最新、2系指定は本稿作業要件による）
+ Qt 5.7 Open Source （最新）
+ Eigen 3.2.8 （最新）
+ Intel TBB 4.4 Update 5 （最新）

# 作業手順

CMake-GUI にて、Configure / Generate 。
最終的に下記指定内容となったが、試行錯誤の結果であり、論理的ではないかも。
所要時間が長いので、DOCS と EXAMPLES は除外した。
Qt は出来合いのパッケージをそのまま参照している。

```
  -- 
  -- General configuration for OpenCV 2.4.13 =====================================
  --   Version control:               unknown
  -- 
  --   Platform:
  --     Host:                        Windows 10.0.10586 AMD64
  --     CMake:                       3.5.2
  --     CMake generator:             Visual Studio 12 2013 Win64
  --     CMake build tool:            C:/Program Files (x86)/MSBuild/12.0/bin/MSBuild.exe
  --     MSVC:                        1800
  -- 
  --   C/C++:
  --     Built as dynamic libs?:      YES
  --     C++ Compiler:                C:/Program Files (x86)/Microsoft Visual Studio 12.0/VC/bin/x86_amd64/cl.exe  (ver 18.0.40629.0)
  --     C++ flags (Release):         /DWIN32 /D_WINDOWS /W4 /GR /EHa  /D _CRT_SECURE_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE /D _SCL_SECURE_NO_WARNINGS /Gy /bigobj /Oi  /wd4251 /wd4275 /wd4589 /wd4359 /wd4819 /MD /O2 /Ob2 /D NDEBUG  /Zi
  --     C++ flags (Debug):           /DWIN32 /D_WINDOWS /W4 /GR /EHa  /D _CRT_SECURE_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE /D _SCL_SECURE_NO_WARNINGS /Gy /bigobj /Oi  /wd4251 /wd4275 /wd4589 /wd4359 /wd4819 /D_DEBUG /MDd /Zi /Ob0 /Od /RTC1 
  --     C Compiler:                  C:/Program Files (x86)/Microsoft Visual Studio 12.0/VC/bin/x86_amd64/cl.exe
  --     C flags (Release):           /DWIN32 /D_WINDOWS /W3  /D _CRT_SECURE_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE /D _SCL_SECURE_NO_WARNINGS /Gy /bigobj /Oi  /MD /O2 /Ob2 /D NDEBUG  /Zi
  --     C flags (Debug):             /DWIN32 /D_WINDOWS /W3  /D _CRT_SECURE_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE /D _SCL_SECURE_NO_WARNINGS /Gy /bigobj /Oi  /D_DEBUG /MDd /Zi /Ob0 /Od /RTC1 
  --     Linker flags (Release):      /machine:x64  /INCREMENTAL:NO  /debug
  --     Linker flags (Debug):        /machine:x64  /debug /INCREMENTAL 
  --     Precompiled headers:         YES
  -- 
  --   OpenCV modules:
  --     To be built:                 core flann imgproc highgui features2d calib3d ml video legacy objdetect photo gpu ocl nonfree contrib stitching superres ts videostab
  --     Disabled:                    world
  --     Disabled by dependency:      -
  --     Unavailable:                 androidcamera dynamicuda java python viz
  -- 
  --   Windows RT support:            NO
  -- 
  --   GUI: 
  --     QT 5.x:                      YES (ver 5.7.0)
  --     QT OpenGL support:           YES (Qt5::OpenGL 5.7.0)
  --     OpenGL support:              YES (glu32 opengl32)
  --     VTK support:                 NO
  -- 
  --   Media I/O: 
  --     ZLib:                        build (ver 1.2.7)
  --     JPEG:                        libjpeg (ver 62)
  --     PNG:                         build (ver 1.5.12)
  --     TIFF:                        build (ver 42 - 4.0.2)
  --     JPEG 2000:                   build (ver 1.900.1)
  --     OpenEXR:                     build (ver 1.7.1)
  -- 
  --   Video I/O:
  --     Video for Windows:           YES
  --     DC1394 1.x:                  NO
  --     DC1394 2.x:                  NO
  --     FFMPEG:                      YES (prebuilt binaries)
  --       codec:                     YES (ver 55.18.102)
  --       format:                    YES (ver 55.12.100)
  --       util:                      YES (ver 52.38.100)
  --       swscale:                   YES (ver 2.3.100)
  --       resample:                  NO
  --       gentoo-style:              YES
  --     OpenNI:                      NO
  --     OpenNI PrimeSensor Modules:  NO
  --     PvAPI:                       NO
  --     GigEVisionSDK:               NO
  --     DirectShow:                  YES
  --     Media Foundation:            NO
  --     XIMEA:                       NO
  --     Intel PerC:                  NO
  -- 
  --   Other third-party libraries:
  --     Use IPP:                     NO
  --     Use Eigen:                   YES (ver 3.2.8)
  --     Use TBB:                     YES (ver 4.4 interface 9005)
  --     Use OpenMP:                  NO
  --     Use GCD                      NO
  --     Use Concurrency              NO
  --     Use C=:                      NO
  --     Use Cuda:                    YES (ver 7.5)　　【7.0】
  --     Use OpenCL:                  YES
  -- 
  --   NVIDIA CUDA
  --     Use CUFFT:                   YES
  --     Use CUBLAS:                  YES
  --     USE NVCUVID:                 NO
  --     NVIDIA GPU arch:             20 21 30 35 　　【30 35】
  --     NVIDIA PTX archs:            30　　　　　　　　　　【-】
  --     Use fast math:               NO　　　　　　　　　　【YES】
  --     Tiny gpu module:             NO
  -- 
  --   OpenCL:
  --     Version:                     dynamic
  --     Include path:                C:/DevCPP/OpenCV2413/sources/3rdparty/include/opencl/1.2
  --     Use AMD FFT:                 NO
  --     Use AMD BLAS:                NO
  -- 
  --   Python:
  --     Interpreter:                 NO
  -- 
  --   Java:
  --     ant:                         NO
  --     JNI:                         NO
  --     Java tests:                  NO
  -- 
  --   Tests and samples:
  --     Tests:                       YES　　　　　　　　　【NO】
  --     Performance tests:           YES　　　　　　　　　【NO】
  --     C/C++ Examples:              NO
  -- 
  --   Install path:                  C:/DevCPP/OpenCV2413/buildCUDA/install
  -- 
  --   cvconfig.h is in:              C:/DevCPP/OpenCV2413/buildCUDA
  -- -----------------------------------------------------------------
  -- 
```

CMakeにより生成された OpenCV.sln を処理。
OpenCV TEST を含み、対象CUDAコアアーキテクチャーを無指定とした場合の所要時間は4時間超、 TESTはOpenCVのバージョンによってはコンパイルリンク時エラーになることが多かったような記憶だが、この版、この手順では問題なく通った。ただし所要時間が長いのは確かで、あっさり外したほうが良いかも。

この後、GPUに関わるサンプルプログラムを実行し、CUDAコア群にアクセスしていることを確認する。
標準サンプルでは下記のようなインフォメーションが表示される。
（この例は CUDA 8.0 RC をインストールしている環境での CUDA 7.5 の実行なので、ドライバーが8.0の表示となっている。）

```
Device 0:  "GeForce GT 650M"  2048Mb, sm_30, 384 cores, Driver/Runtime ver.8.0/7.50
```	

この手順では、Build ディレクトリに正常な include ディレクトリが生成されなかったので、Source ディレクトリから手動でコピーした。

# 参考文献

いろいろ参照したが、下記二稿に多く拠った。
ただし本稿と同様、構成指定の判断理由は明示されていない。

+ Neil Z. SHAO's Blog<br/>
Sept 25, 2014 OpenCV 2.4.9 + CUDA 6.5 + Visual Studio 2013<br/>
https://initialneil.wordpress.com/2014/09/25/opencv-2-4-9-cuda-6-5-visual-studio-2013/<br/><br/>
+ minus9d's diary<br/>
Jan 24, 2013 OpenCV2.4.3をWindowsでビルド<br/>
http://minus9d.hatenablog.com/entry/20130124/1359033785

その後、下稿著者からご教示を頂戴した。

+ GitHub atinfinity/opencv2.4.10.1_build_vs2012_x64.bat
https://gist.github.com/atinfinity/2ce87cbc5d651b58bee5