-
QT5.9.2 - QT5的最高版本;
-
Python还使用的之前安装过的Anaconda2,安装了py36虚拟环境,并在py36虚拟环境下安装了必要的依赖库;python模块主要是生成OpenCV的python接口(依赖Numpy科学计算包);
使用CMake配置Configure并创建Generate项目文件,其中多次迭代Configure确保配置一致,最后Generate出OpenCV solution
-
首次运行configure(specify the compiler (and IDE) you want to
use),会根据各个模块的CMake文件下载预设的库文件,这些库文件存放在opencv_3rdparty的各个分支中 https://github.com/opencv/opencv_3rdparty/branches/all, 通过CMake文件就可以动态地链接到最新的第3方库文件,从而实现OpenCV和第3方库文件的分离,保证了OpenCV部分代码的纯净性
-
若configure后无法自动下载第3方库文件,手动下载第3方库文件,下载的文件被存储在隐藏文件夹.cache下
message(STATUS
"FFMPEG: Package successfully downloaded")
include(${CMAKE_CURRENT_LIST_DIR}/ffmpeg_version.cmake)
-
自动下载第3方库文件
-
完成后,再次configure
-
Check “INSTALL_C_EXAMPLES” and “INSTALL_PYTHON_EXAMPLES”
-
OPENCV_EXTRA_MODULES_PATH 设置为 E:/OpenCV/opencv_source/opencv_contrib/modules
-
ENABLE_CXX11,支持C++11特性
-
BUILD_opencv_js,无效,支持3.1.0,暂时还是不勾选了吧,实在要调用可以考虑通过python做桥梁,没必要js搞一套我觉得
-
BUILD_EXAMPLE【31】,如果是后来勾选的,感觉只要直接生产解决方案和生成INSTALL,不要选择重新生成,应该会自动跳过已经生成过的项目吧?
- BUILD_TESTS
- BUILD_PERF_TESTS
-
WITH_QT,其他二次configure配置见下面的 为OpenCV配置QT 小节,选择了WITH_QT后,highgui本身的窗口界面会变成基于Qt的,比原来要好看一些,而且自动集成了一些图片缩放、保存等功能,参考【2】,WITH_X是用来配置packages开关的
-
WITH_OPENGL,不知道有什么用,勾上吧
-
搜索python,把能配置的都配置上,configure后要再次搜索python配置,参考【34】
-

-
对于python记得把OPENCV_FORCE_PYTHON_LIBS勾选,否则无法生成cv2.pyd文件,cv2.pyd应该被复制到python安装目录Lib\site-packages下,可能要将cv2.cp36-win_amd64.pyd改名为cv2.pyd
-
BUILD_SHARED_LIBS 生成的动态库其实可以理解为就是编译生成的exe了,当然了,有Release和Debug两种模式
-
CMAKE_INSTALL_PREFIX 就相当于软件的安装路径了
-
不建议勾选
-
On Windows 10, opencv_saliency module fails
to build. So we will disable it. Uncheck BUILD_opencv_saliency,参考【29】,saliency可能要在多次configure后出现。
-
BUILD_DOCS:生成文档,需要安装Doxygen,文档可在官网查看,参考【32】。如果DOC不用安装,那么其他的类似Miktex、Sphinx就可以不用安装了【31】。
-
WITH_CUDA:先关闭吧,我自己笔记本的CUDA较弱,用CUDA提升有限,以后用到了再安装吧,理解算法的话应该暂时和速度无关。CUDA Toolkit允许你利用GPU的运算能力加速算法,对于特定的算法GPU会提升很大,让更多的算法支持GPU加速是OpenCV团队的不懈努力【31】,我的理解是GPU属于计算层面,算法属于计算的上层。
-
caffe模块是深度学习模块,鉴于笔记本的性能暂时不装了,我也不太清楚caffe是怎么个工作模型,用的时候再说吧,笔记安装opencv主要是学习计算机视觉,深度学习部分可以单独安装学习,参考【35】。
-
BUILD_opencv_cvv,我的环境是VS2015
64+opencv3.4.0,发现cvv无法编译成功,而python3又依赖cvv,所以干脆就禁用cvv,由于之前版本的opencv也没用到cvv模块,所以禁用了估计也没事。如果以后实在要用cvv,完全可以把cvv项目单独调试,opencv本来就是一个个独立的项目构成的,先把能用的都编译了,不明原因的用到了单独调试个别项目即可,也不需要重新编译整个项目,所以不要担心个别功能模块没有编译成功。
其实吧,有些功能性的模块不编译也没事,如果你是应用当然是编译成DLL直接能用最好了,如果是学习算法,关键还是自己理解算法模块,那样子完全可以自己把CPP文件单独放到一个工程里编译运行,而不需要编译整个opencv项目了。
-
记得把 BUILD_opencv_saliency 勾掉,不勾也没发现问题,可能会产生编译错误,所以还是勾掉吧,这样编译没错误看着舒服
-
再次configure
-
出现新的需要下载的第3方库文件,可以自己下载重命名后放到.cache下,下载的版本根据cmake文件,下载地址依然是 https://github.com/opencv/opencv_3rdparty/branches/all 可以到CSDN上下载别人上传的最新tag版本所需的.cache文件
-
再次configure
为OpenCV配置QT
编译OpenCV的时候选择WITH_QT【2】(把WITH_OPENGL【19】也选上吧),至于这个选项的作用,可能是指OpenCV的highgui模块本身是否使用Qt,highg使用QT后higngui本身的窗口界面会变成基于Qt的,比原来的要好看一些,而且自动集成了一些图片缩放、保存等功能【2】。(那么原来的highgui使用的是什么GUI技术?)

勾选如上图后,点击Configure,得到如下图路径或者通过输入QT搜索得到勾选WITH_QT后重新配置产生的关于QT的项目。

但是上图有一个问题,就是QT相关的路径都是Anaconda下的,而我自己安装了是最新的QT5.9.2版本,我不清楚这几个选项的具体作用,不过改成QT5.9.2应该是没错的,于是把Anaconda相关的路径都替换成自己安装的QT5.9.2的路径,如下图所示,因为OpenCV3.3.0当初用CMAKE编译选择的Generator就是Visual
Studio 14 2015 win64,所以QT的预编译版本也选择对应版本,感觉用Anaconda的话应该也可以?不可以,后面发现没有生成opencv_highgui模块,后来把路径修改后,生成这个模块了,但是我还不能确定是不是这个原因导致的。

再Configure一下,然后再Generate,之后Open Project,其实可以不用Open Project,直接在命令行用cmake直接编译Release和Debug版本的代码,如果没有产生install文件夹,说明编译失败,勾掉不必要的选项,好像还是要用VS2015图形界面编译更可靠。
Compile opencv in Release mode【29】
Open Windows Command Prompt (cmd).
Go to OPENCV_PATH/build directory and run this
command
E:\OpenCV\tool\cmake-3.10.1-win64-x64\bin\cmake.exe --build . --config Release --target INSTALL 这里INSTALL是解决方案里的目标项目,即生成INSTALL
Compile opencv in Debug mode【29】
Open CMake GUI again
Search “python” in search box
Uncheck INSTALL_PYTHON_EXAMPLES,
BUILD_opencv_python3 and BUILD_opencv_python2,经测试若勾选会编译失败?会吗?反正勾掉吧。好像3.4.0取消了
实际上我的opencv3.4.0的情况如下图,我把generator也uncheck了,我的理解是python只要Release版本,调试版本用不到,毕竟python也是调用的编译后的opencv项目,它不能进行调试C++的代码,我是这么理解的。

python2支持,没有发现BUILD_opencv_python2选项,自然也没有pyhon的项目,但是有pyhon3的项目。
Click configure
Click generate
Now in windows command prompt, Go to OPENCV_PATH/build directory and run this command
E:\OpenCV\tool\cmake-3.10.1-win64-x64\bin\cmake.exe --build . --config Debug --target INSTALL
Now that we have compiled OpenCV we will find out how
to test a OpenCV project using CMake.
通过VS2015图形界面编译
点击Open
Project按钮打开生成的VS工程,待其完全载入后即可编译了,需要注意的是,不要使用默认的生成解决方案(F7)进行编译,这样最终得到的install文件夹中的内容是不全的。正确方法是在INSTALL工程上点右键,选择生成,还是选择重新生成吧,单独编译生成此工程【3】。
最后Open
Project打开就能回到熟悉的VS环境中了,直接右键解决方案等它Build完就好了(ps: 生成的文件放在 build\lib\ 和 build\bin\
目录下,最后通过INSTALL这个项目把相关文件(.h、.dll、.lib等)拷贝到CMAKE_INSTALL_PREFIX目录下面,如果你没有Build
INSTALL这个项目是不会拷贝的,跟make之后没执行make install情况一样),参考【32】,我是看了【32】才知道解决方案和INSTALL项目的关系的,好像其他博客都说的不太对。To
collect the header and the binary files, that you will use during your own
projects, into a separate directory (simillary to how the pre-built binaries
ship) you need to explicitely build the Install project【31】.你可以理解为OpenCV库本身就是一个solution,里面有好多projects,之前的编译都是面向solution的,而install则是面向客户的,客户需要是现成能用的成品,这就是INSTALL的作用,通过build
INSTALL实现。This will create an Install directory inside the Build one collecting all the built binaries into a single place. Use
this only after you built both the Release and Debug versions.其实的话生成的install文件夹也是提供给cmake调用的,因为install目录下生成了
我感觉还是通过下面的两个步骤编译,生成的文件更全面,就是先编译再安装,不过应该效果一样吧。
-
所以我们先清理解决方案,然后重新生成解决方案,我感觉是先重新生成ALL_BUILD项目。
-
然后再重新生成INSTALL项目。
也就是说我们队解决方案的操作也是通过解决方案中的项目来实现的,并不是通过什么外部的工具来实现的。

生成的动态库,如下图

配置系统变量,添加系统变量是添加第3方库设置的常用的便利方法,可以简化改动的地方
-
添加系统变量 OPENCV_DIR,变量值设置为 E:\OpenCV\opencv_build\install 注意末尾不要有 \,值得注意的是,【31】设置的是E:\OpenCV\opencv_build\install\x64\vc14,因为E:\OpenCV\opencv_build\install下有cmake文件提供了所有路径信息,cmake知道在\x64\vc14下,所以用这个目录更合适;为了保证OPENCV_DIR包含平台信息,我后来觉得还是应该包含\x64\vc14,这样才能保证install目录移动时,VS属性表不用修改,只修改OPENCV_DIR。
install目录可以理解为一种绿色软件的目录,我们可以任意搬动,只要修改OPENCV_DIR就可以了。
此外install目录在不同的操作系统在别人的电脑上也都是可能不同的。
更新!!!根据研究重新配置系统变量如下
-
OPENCV_DIR设置为E:\OpenCV\opencv_build\install
-
新建一个变量OPENCV_VC设置为%OPENCV_DIR%\x64\vc14
-
Path相应地修改为%OPENCV_vc%\bin
-
VS里的项目属性表的配置也根据OPENCV_VC来设置
-
添加 E:\OpenCV\opencv_build\install\x64\vc14\bin 或者 %OPENCV_DIR%\x64\vc14\bin 到系统变量PATH,相当于程序的安装路径;
If you built static libraries then you are done. Otherwise, you need to
add the bin folders path to the systems path. This is cause you will use the
OpenCV library in form of “Dynamic-link libraries” (also known as DLL). Inside
these are stored all the algorithms and information the OpenCV library
contains. The operating system will load them only on demand, during runtime.
However, to do this he needs to know where they are. The systems PATH contains a list of folders where DLLs can be found. Add the OpenCV library path to this and the OS will
know where to look if he ever needs the OpenCV binaries. Otherwise, you will
need to copy the used DLLs right beside the applications executable file (exe)
for the OS to find it, which is highly unpleasent if you work on many
projects. To do this start up again the Path Editor and add the following new
entry (right click in the application to bring up the menu):
%OPENCV_DIR%\bin 【31】
-
This directory OPENCV_DIR
contains file “OpenCVConfig.cmake”. This is used by CMake to
configure OpenCV_LIBS and OpenCV_INCLUDE_DIRS variables to generate
project files;

Testing C++ code with CLion【29】
下载测试代码redEyeRemover code,参考【29】。
运行C++代码可以利用cmake的纯命令行形式,或者通过CLion配合cmake,这里利用CLion。
首先利用CLion+命令行的形式,然后只利用CLion编译运行。
利用CLion+命令行的形式
修改CLion控制台程序为sh.exe或者powershell.exe
Working
with Embedded Local Terminal
在RedEyeRemover文件下新建CLion工程,然后创建一个CMakeLists.txt文件,在文件中输入:
cmake_minimum_required(VERSION
2.8)
project( redEyeRemover )
find_package( OpenCV
REQUIRED ) 这个地方注意了,cmake是根据系统变量OPENCV_DIR来找到cmake文件的,所以OPENCV_DIR我们设置为install路径,而新建一个变量OPENCV_VC设置为%OPENCV_DIR%\x64\vc14
include_directories(
${OpenCV_INCLUDE_DIRS} )
add_executable( removeRedEyes
removeRedEyes.cpp )
target_link_libraries(
removeRedEyes ${OpenCV_LIBS} )
其中包含了之前生成OpenCV的头文件路径和DLL动态库路径。
在CLion下面的终端里运行如下命令来编译我们的removeRedEyes.cpp源代码:
# create build directory
mkdir build
cd build
# create Visual
Studio project files using cmake,可以理解为之前的configure和generate
cmake -G
"Visual Studio 14 2015 Win64" ..
下面构建(编译+链接)我们的应用程序:
# build our
application,可以理解为生成目标项目了
cmake --build
. --config Release
# once the build is complete,
it will generate exe file in build\Release directory
下面在主目录装载应用程序,应用程序会查询调用目录下的图片文件:
cd ..
.\build\Release\removeRedEyes.exe
.\build\Release\main.exe .\opencv-logo.png
应用程序执行结果
没有出现图片!!!折腾了一天居然没有出现图片,比较打击,考虑到我使用的QT,所以想先测试下图片读取功能是否正常,打算先测试最简单的图片显示【2】。还是官方文档齐全,QT显示图片的例子早就在官方文档里了。用我那个Example1里的示例吧。
只利用CLion编译运行,但是无法编译运行(对CLion不熟悉),CLion编写OpenCV应用程序还是当编辑器用吧,用命令行编译,生成VS工程还是可以用VS打开,cmake生成的项目文件都在build目录
Visual Studio Quick Tutorial on Configuring CLion on
Windows

MinGW

How to build applications with OpenCV
inside the "Microsoft Visual Studio",如何使用VS构建依赖OpenCV的应用程序
VS2015工程配置,之前配置VS的OpenCV项目规则一直很困惑,不过现在彻底搞明白了,主要参考【6】,我用一个流程图彻底解释清楚
不过如果想对OpenCV源码进行Debug跟踪,是不能选用.\install文件夹中的库文件的,因为此处缺少.pdb调试文件,无法正常Debug。此时需要使用.\lib文件夹中的库文件,这时可以正常的跟踪到源代码中,且使用profiler分析代码性能时也可以正确定位到OpenCV内部函数上【3】。
关于库、DLL、lib、pdb概念的理解,我理解库是相对的,如果拿游戏类比,库就好比是武器装备库,而每件武器可能又有自己的配件库,库的内容不同大小不同,但是调用方式是相同的【4】。参考资料【4】给出的最小原型动态链接库可以和QT库、OpenCV库在调用配置上等价。
这里只说下对OpenCV的DLL的理解,更准确的参考资料【5】。
OpenCV其实是一个一个的功能模块,每个模块对应一些CPP文件和H文件,CPP文件经过编译就生成DLL(而普通软件生成EXE)和LIB(这是用于LINK的,可以理解为一个DLL的伪静态LIB占位符,否则的话就是静态LIB了)、以及include里的头文件。
而头文件H文件就被搬运到一个专门的INCLUDE目录。
使用库的人叫做客户端Client或者应用程序Application,他们要使用库的功能,其实就是使用那些模块函数了,就要配置项目。配置的话也无非3个方面,其中第3个方面又分为2个,所以一共4个地方需要配置:
-
头文件的路径,也就是DLL中函数的路径;
-
DLL的路径,由于DLL是程序运行时的才调用,所以DLL路径要放到系统环境变量PATH;
- 占位符伪LIB的路径,这个比较特殊,要配置两个方面,其实也不难理解。一个就是LIB所在的目录路径,一个就是需要该目录下的哪些LIB,全要的话自然生成的程序体积就大了。不过对于DLL来说,占位符的伪LIB体积不大多了其实也没事,所以就全写进去了?
新建solution时,选择空项目,这样一来项目文件夹都是空的没有预备的文件在里面,更加灵活。

测试OpenCV的QT安装效果
参考资料【6】
最后显示图像的highgui界面确实是调用的QT库测试VS插件的QT安装效果【7】
参考资料【7】操作后可以实现一个空白GUI框
不过QT有一个官方版本的VS插件,所以重新下载使用官方的插件,但是安装后使用出现问题【12】,所以还是用qt
package插件吧,插件也只是项目组织功能,官方不官方也无所谓了。
几个概念:
moc 元对象编译器
uic 用户接口编译器
rcc 资源编译器
.pro Qt工程文件
.pri 工程包含文件

插件的使用参考资料【14】测试OpenCV和QT联合编程效果
参考资料【13】
其中.pro文件不需要配置,因为那是给QT
Creator用的,只要把项目属性里关于OpenCV库和QT库的部分配置一下(这两个库的配置项目几乎是一样的),QT其他部分的配置由QT插件完成了。
术语
build directory
runtime argument
compiler
linker
补充:
Anaconda是什么?参考【30】
Anaconda是一种python的发布版本,我理解就是类似Ubuntu是Linux的一种发布版本一样,就是说强化了python核心,虽然我也说不清楚pyhon核心是什么。
Python虚拟环境配置方法?参考【30】
conda
create --name opencv-env python=3.6
activate
opencv-env
pip install numpy
scipy matplotlib scikit-learn jupyter
pip install
opencv_python-3.3.1+contrib-cp36-cp36m-win_amd64.whl
pip install dlib
import cv2
cv2.__version__
import dlib
dlib.__version__
如何复制OpenCV安装目录下的lib目录下的*.lib和*d.lib?
使用win10的bash模式
opencv_(The
Name of the module)(The version Number of the library you use)d.lib
opencv_world340.lib 因为考虑到生成1个lib文件可能减慢速度我就没弄这个
过滤*.lib

过滤*d.lib

框架、工具、库的区别?
框架和库的区别可以参考【50】,工具的话,我的理解就是系统方面的,和计算机视觉没什么关系的东西,比如生成 OpenCV documentation 的工具。
框架的我感觉就是解决一类问题的一个模式架构,随便说的。比如QT框架,要显式图片,你把图片数据填充到框架的API中,然后调用显式图片的API,QT框架就帮你把图片显式出来。而中间图片的处理我们可以调用OpenCV库里的各种算法来处理。
库的话好比工具箱,解决一类问题的各种方法的实现集合。
命令行设置环境变量的方法?
setx -m QTDIR D:/OpenCV/dep/qt/qt-everywhere-opensource-src-4.7.3
The -m should be added if you wish to make the settings
computer wise, instead of user wise.
Path是做什么用的?
Path一般用来配置bin目录的路径。
make与build的区别?没有找到很好的答案
make常用在具体事物,e.g.
make a conversation, make a reservation
build可以用在抽象事物上,e.g.
build an empire, build a relationship
关于Intellij
IDEA菜单项中Compile、Make和Build的区别
库按的安装时提供DLL(内存运行时调用),QQ的安装时提供一个QQ.exe给我们登录,都是安装,只是对象不同。
VS的文件组织结构?
应用程序-->代码层面: solution-->building blocks: multiple projects-->a main
project(组
织所有的项目拼图到一起,所有项目就好比拼图solution的一部分)
我们平时练习小应用程序的时候可以每个应用程序都建立一个solution,也可以都放到一个solution里面,然后通过main project屏蔽不需要的building
blocks: projects,和solution同名的那一个project作为main project。
其实,我理解solution平时可能也叫做项目,这是对于外部而言,而项目内部而言,我们可能划分为多个building blocks,此时那个所谓的项目就变成了solution了,当然了这是就应用程序组织而言的。
事实上一个solution可以是一个很大的应用程序,比如QQ所有代码就是一个solution,然后分成多个模块进行分工。

有用的VS2015插件?有些有用的插件VS2017还没有更新,所以还是使用VS2015吧,VS2017的更新我觉得其实也用不上。
- Open
Command Line
- IMAGE WATCH
如何打开VS属性管理器视图?
视图菜单下
如何通过宏引用不同lib?参考【33】,没看懂什么意思,光看应用肯定不懂了
-
#ifdef _DEBUG
-
# define RLIB_IMPORT_LIBRARY(a) __pragma(comment(lib, a "d.lib")) 1
-
#else
-
# define RLIB_IMPORT_LIBRARY(a) __pragma(comment(lib, a ".lib"))
-
#endif // _DEBUG
-
-
// 用法如下
-
RLIB_IMPORT_LIBRARY("opencv_world340") // world 其实是 All In One
-
// RLIB_IMPORT_LIBRARY("opencv_core340")
-
// RLIB_IMPORT_LIBRARY("opencv_highgui340")
-
// RLIB_IMPORT_LIBRARY("opencv_imgproc340")
-
// RLIB_IMPORT_LIBRARY("opencv_imgcodecs340")
-
// RLIB_IMPORT_LIBRARY("opencv_features2d340")
-
// RLIB_IMPORT_LIBRARY("opencv_calib3d340")
-
// RLIB_IMPORT_LIBRARY("opencv_objdetect340")
如何美化VS2015使得编程更舒服护眼?
-
主题
-
https://studiostyl.es/
-
https://studiostyl.es/schemes/son-of-obsidian
- How to change color of vertical bar left of text editor?
-
字体
-
Inziu losevkaCC Slab SC 用于输出窗口
-
YaHei Consola Hybrid 用于代码编辑窗口
-
背景色(Colour
palette)
-
440030 深紫色 用于输出背景色
-
475760 灰绿色 用于编辑背景色
疑问TODO?
-
如何修改/添加OpenCV代码,完成pull request;
参考文献
【1】VS2015搭建Qt 5.7开发环境
【2】OpenCV与Qt结合使用
【3】VS2015下编译OpenCV 3.1
【4】Walkthrough: Creating and Using a Dynamic Link
Library (C++)
【5】DLLs in Visual C++
【6】How to
build applications with OpenCV inside the "Microsoft Visual Studio" 该官方文档对如何调用INSTALL后的OpenCV的原理讲解十分清楚,有很多中文博客几乎没有人提到的细节,其他博文都可以看做该文档的注释版本,很多人都在网上搜各种教程却不愿意阅读官方文档,确实很奇怪。其实任意博文都是官方文档额注释和应用罢了
【7】将 Qt 5.6 集成至 VS2015
【8】详解 QT 框架中快速应用OpenCV 基于图片 上篇
【9】详解 QT 框架中快速应用OpenCV 基于视频播放 下篇
【10】《Qt 学习之路 2》
【11】Qt Visual Studio Tools
【12】Run Qt5.6 on VS2015 & “无法迁移项目文件” &
"Cannot instantiate QtProjectEngine object"错误的解决方法
【13】How to setup Qt and openCV on Windows
【14】Qt VS Tools Manual
【15】[OPENCV QT TUTORIAL] OPENGL WIDGET TO SHOW OPENCV
IMAGES IN A QT GUI (FIRST PART)
【16】[OPENCV QT TUTORIAL] OPENGL WIDGET TO SHOW OPENCV
IMAGES IN A QT GUI (SECOND PART)
【17】[TUTORIAL OPENCV QT] HOW TO COMPRESS AN IMAGE IN
MEMORY
【18】OpenCV 与 OpenGL 的关系是什么?
【19】OpenCV 为啥勾搭上 OpenGL?
【29】Install OpenCV 3 on Windows
【30】Install OpenCV 3 and Dlib on Windows ( Python only )
【31】Installation in Windows
【32】使用 CMake + VS2017 ( + Python 3) 配置和编译 OpenCV 3.3
【33】【OpenCV3.3】编译源码并搭建VS2017+Windows开发环境 -
菜鸟小筑 - CSDN博客 这个博客对编译和VS项目属性设置方面也讲得很好
【34】python3下opencv的编译过程
【35】Deep Learning with OpenCV
【36】errors
on build opencv with cvv module and qt5
【37】Windows环境下最新OpenCV和Contribute代码的联合编译
【38】git支持socks5和HTTP代理
【39】Windows 7 and TortoiseGit contribution
guide
【40】Load and Display an
Image
【50】库,框架,架构,平台,有什么明确的区别?
【51】Write and Manage Code
using Visual Studio Documentation
【52】CMake:How To Find
Libraries
【53】CMake find_package for
OpenCV
【54】Python Extension
Packages for Windows - Christoph Gohlke
【55】How to: Change the Build
Output Directory