2 :: - Drag & drop .cpp file on this file from Windows explorer
3 :: - Run from cmd/powershell:
4 :: - > _winpack_build_sample.cmd cpp\opencv_version.cpp
7 :: - MSVS 2015/2017/2019
8 :: (tools are searched on default paths or environment should be pre-configured)
13 SET "OPENCV_SETUPVARS_SCRIPT=setup_vars_opencv4.cmd"
14 SET "PACKAGE_BUILD_DIR=%SCRIPT_DIR%\..\..\build"
15 IF NOT EXIST "%PACKAGE_BUILD_DIR%\%OPENCV_SETUPVARS_SCRIPT%" (
17 SET "PACKAGE_BUILD_DIR=%SCRIPT_DIR%\..\..\..\build"
19 IF NOT EXIST "%PACKAGE_BUILD_DIR%\%OPENCV_SETUPVARS_SCRIPT%" (
20 set "MSG=OpenCV Winpack installation is required"
24 for %%i in ("%PACKAGE_BUILD_DIR%") do SET "PACKAGE_BUILD_DIR=%%~fi"
27 set "MSG=Sample path is required"
31 set "MSG=Only .cpp samples are allowed (not a directory): %1"
34 if NOT "%~x1" == ".cpp" (
35 set "MSG=Only .cpp samples are allowed: %~x1"
38 set SRC_FILENAME=%~dpnx1
39 echo SRC_FILENAME=%SRC_FILENAME%
40 call :dirname "%SRC_FILENAME%" SRC_DIR
41 echo SRC_DIR=%SRC_DIR%
43 echo SRC_NAME=%SRC_NAME%
44 echo ================================================================================
46 :: Path to root 'bin' dir
47 set "PATH=%PACKAGE_BUILD_DIR%\bin;%PATH%"
51 if %ERRORLEVEL% == 0 (
56 CALL :try_call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Auxiliary\Build\vcvars64.bat"
58 CALL :try_call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvars64.bat"
61 CALL :try_call "C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Auxiliary\Build\vcvars64.bat"
65 CALL :try_call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Auxiliary\Build\vcvars64.bat"
68 CALL :try_call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvars64.bat"
71 CALL :try_call "C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build\vcvars64.bat"
75 CALL :try_call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" amd64
80 if %ERRORLEVEL% NEQ 0 (
81 set "MSG=Can't detect Microsoft Visual Studio C++ compiler (cl.exe). MSVS 2015/2017/2019 are supported only from standard locations"
87 cmake --version >NUL 2>NUL
88 if %ERRORLEVEL% EQU 0 GOTO :CMAKE_FOUND
90 if NOT exist "C:\Program Files\CMake\bin" GOTO CMAKE_NOT_FOUND
91 set "PATH=%PATH%;C:\Program Files\CMake\bin"
92 cmake --version >NUL 2>NUL
93 if %ERRORLEVEL% EQU 0 GOTO :CMAKE_FOUND
96 set "MSG=CMake is required to build OpenCV samples. Download it from here: https://cmake.org/download/ and install into 'C:\Program Files\CMake'"
101 call :execute cmake --version
102 echo CMake is detected
105 :: Detect available MSVS version
106 if NOT DEFINED VisualStudioVersion (
107 set "MSG=Can't determine MSVS version. 'VisualStudioVersion' is not defined"
110 if "%VisualStudioVersion%" == "14.0" (
111 set "CMAKE_GENERATOR=-G^"Visual Studio 14 Win64^""
112 set "BUILD_DIR_SUFFIX=.vc14"
113 if EXIST "%PACKAGE_BUILD_DIR%\x64\vc14\bin" (
114 set "PATH=%PACKAGE_BUILD_DIR%\x64\vc14\bin;%PATH%"
117 if "%VisualStudioVersion%" == "15.0" (
118 set "CMAKE_GENERATOR=-G^"Visual Studio 15 Win64^""
119 set "BUILD_DIR_SUFFIX=.vc15"
120 set "PATH=%PATH%;%SCRIPTDIR%\..\..\build\x64\vc15\bin\"
121 if EXIST "%PACKAGE_BUILD_DIR%\x64\vc15\bin" (
122 set "PATH=%PACKAGE_BUILD_DIR%\x64\vc15\bin;%PATH%"
124 if EXIST "%PACKAGE_BUILD_DIR%\x64\vc14\bin" (
125 set "PATH=%PACKAGE_BUILD_DIR%\x64\vc14\bin;%PATH%"
129 if "%VisualStudioVersion%" == "16.0" (
130 echo.==========================================
131 echo.* Note: MSVS 2019 requires CMake 3.14+ *
132 echo.==========================================
133 set "CMAKE_GENERATOR=-G^"Visual Studio 16 2019^" -A x64"
134 set "BUILD_DIR_SUFFIX=.vc16"
135 if EXIST "%PACKAGE_BUILD_DIR%\x64\vc16\bin" (
136 set "PATH=%PACKAGE_BUILD_DIR%\x64\vc16\bin;%PATH%"
138 if EXIST "%PACKAGE_BUILD_DIR%\x64\vc15\bin" (
139 set "PATH=%PACKAGE_BUILD_DIR%\x64\vc15\bin;%PATH%"
141 if EXIST "%PACKAGE_BUILD_DIR%\x64\vc14\bin" (
142 set "PATH=%PACKAGE_BUILD_DIR%\x64\vc14\bin;%PATH%"
147 set "MSG=Unsupported MSVS version. VisualStudioVersion=%VisualStudioVersion%"
153 set "BUILD_DIR=%SRC_DIR%\build_%SRC_NAME%%BUILD_DIR_SUFFIX%"
154 call :set_title Create build directory
155 if NOT exist "%BUILD_DIR%" ( call :execute md "%BUILD_DIR%" )
157 if NOT exist "%BUILD_DIR%/sample" ( call :execute md "%BUILD_DIR%/sample" )
158 call :execute copy /Y "%SCRIPT_DIR%/CMakeLists.example.in" "%BUILD_DIR%/sample/CMakeLists.txt"
160 call :set_title Configuring via CMake
161 call :execute cmake %CMAKE_GENERATOR% "%BUILD_DIR%\sample" -DEXAMPLE_NAME=%SRC_NAME% "-DEXAMPLE_FILE=%SRC_FILENAME%"
162 if %ERRORLEVEL% NEQ 0 (
163 set "MSG=CMake configuration step failed: %BUILD_DIR%"
167 call :set_title Build sample project via CMake
168 call :execute cmake --build . --config Release
169 if %ERRORLEVEL% NEQ 0 (
170 set "MSG=Build step failed: %BUILD_DIR%"
174 call :set_title Launch %SRC_NAME%
175 if NOT exist "%BUILD_DIR%\Release\%SRC_NAME%.exe" (
176 echo. "ERROR: Can't find executable file (build seems broken): %SRC_NAME%.exe"
178 cd "%BUILD_DIR%\Release"
179 call :execute "%SRC_NAME%.exe" --help
180 echo ================================================================================
181 echo ** Type '%SRC_NAME%.exe' to run sample application
182 echo ** Type '%SRC_NAME%.exe --help' to get list of available options (if available)
183 echo ** Type 'start ..\%SRC_NAME%.sln' to launch MSVS IDE
184 echo ** Type 'cmake --build .. --config Release' to rebuild sample
185 echo ** Type 'exit' to exit from interactive shell and open the build directory
186 echo ================================================================================
189 call :set_title Hands-on: %SRC_NAME%
190 cmd /k echo Current directory: %CD%
192 call :set_title Done: %SRC_NAME%
193 echo Opening build directory with project files...
194 explorer "%BUILD_DIR%"
208 title OpenCV sample: %*
212 echo =================================================================================
219 :dirname file resultVar
222 set _dir=%_dir:~0,-1%
223 endlocal & set %2=%_dir%
234 :: 'goto die' instead of 'call'
236 TITLE OpenCV sample: ERROR: %MSG%