GAMES101 作业 1-7 VS 环境配置和实现
作业实现源码:GAMES101 作业 1-7 实现代码
安装 Eigen
官网:http://eigen.tuxfamily.org/index.php?title=Main_Page
下载最新的 zip 后解压
解压出来的文件夹名称应该是 eigen-version,为了和作业 include 对应,重命名为 eigen3。
安装 OpenCV
官网:https://opencv.org/releases/
下载最新版安装即可。
安装完成后添加环境变量 ...\include\opencv\build\x64\vc16\bin
VS 项目环境设置
安装 eigen3 和 opencv 库之后,做如下设置。
新建一个 C++空项目。
打开项目属性,进行如下设置。
VC++目录 –> 包含目录
D:\APP\CPPOpenSouceLib 新建eigen3文件夹的上级目录(注意不是eigen3文件夹)
D:\APP\opencv\build\include
VC++目录 –> 库目录
D:\APP\opencv\build\x64\vc16\lib
链接器 –> 输入 –> 附加依赖项
opencv_world480d.lib
调试环境 –> 环境
PATH=D:\APP\opencv\build\x64\vc16\bin
重复配置
新建一个项目之后又要重复配置,非常麻烦,可以参考下面的链接,但是 调试环境 –> 环境 的路径,还是需要自己配。
https://blog.csdn.net/weixin_45410343/article/details/108987053
GAMES101 作业 8 的 VS 环境配置和实现
作业实现源码:GAMES101 作业 8 实现代码
配置 VS2019 环境
创建一个空的 C++工程,我这里创建的工程名字为
Games101Work8。把作业 8 里面给的两个文件夹
CGL和src拷贝到项目中。进入 CGL 文件夹,并创建一个
build文件夹。打开 cmd,将路径切换刚刚创建到
build文件夹下。输入命令cmake ..(需要自行安装配置好 cmake,并且在执行的过程中中可能会提示没有找到FREETYPE_LIBRARY和FREETYPE_INCLUDE_DIRS),执行成功后会在build文件夹下生成一个可编译的工程。我这里是生成的 VS2019 的工程。
- 如果出现没有找到
FREETYPE_LIBRARY和FREETYPE_INCLUDE_DIRS的情况,就需要自己安装Freetype库。可以从 这里 下载压缩包,我下载的版本是 2.13.2,压缩包为ft2132.zip。下载解压后,进入freetype-2.13.2\builds\windows\vc2010目录下,打开freetype.sln工程,进行编译。编译完成后的lib和dll在freetype-2.13.2\objs\x64\Debug目录下。
- 打开作业 8 工程的 CGL 文件夹下的
CMakeLists.txt,添加如下两行代码,FREETYPE_LIBRARY路径是刚刚生成的freetype.lib文件的路径,FREETYPE_INCLUDE_DIRS则是Freetype头文件所在的路径。
// 修改路径为自己的freetype路径
set(FREETYPE_LIBRARY "D:/APP/CPPOpenSouceLib/freetype-2.13.2/objs/x64/Debug")
set(FREETYPE_INCLUDE_DIRS "D:/APP/CPPOpenSouceLib/freetype-2.13.2/include")
- 回到
CGL\build路径下,将刚刚生成失败的时候产生的文件全部删除掉,重新执行cmake ..。此时应该会正常生成一个 VS 工程。
打开在
CGL\build文件夹中生成CGL.sln。将osdfont.c文件后缀修改为osdfont.h,若不修改会在编译的时候出现 C1060:编译器堆内存不足的报错(我试过把虚拟内存增大,但还是会占满所有内存)。修改之后同时需要把osdtext.h文件中的extern "C" char osdfont_base64[];代码注释掉,并加上#include "osdfont.h"。右键
CGL工程点击属性,然后配置属性->C/C++->预处理器->预处理器定义,添加_USE_MATH_DEFINES和GLEW_STATIC,最后点击菜单栏生成->生成解决方案。这样就把 CGL 编译好了。_USE_MATH_DEFINES:需要使用到了 M_PI 等定义,只有定义了该宏才可用。GLEW_STATIC:编译 glew 需要打开该宏,否则当使用 CGL.lib 的时候,引用 glew 库会出现 LNK2019: 无法解析的外部符号。
- 打开作业 8 的工程,然后将作业
src目录的代码包括在项目中。
#include <unistd.h>报错的问题可参考这篇博客:vs19 下无法找到 unistd.h 头文件getopt未定义问题可参考这篇博客 getopt 未定义问题。由于用了
M_PI、PI_OVER_2等,所以在这个工程同样也需要右键Games101Work8工程点击属性,然后配置属性->C/C++->预处理器->预处理器定义,添加_USE_MATH_DEFINES。
- 接下来配置
VC++目录下的包含目录和库目录。
- 首先编辑包含目录,需要添加
freetype目录下面的include文件夹,以及 CGL 目录下面的include文件夹。
- 然后编辑库目录,这里需要配置各个
.lib文件所在的文件夹,分别需要添加freetype.lib、glfw3.lib、CGL.lib、glew.lib所在的目录。这里的路径看起来比较乱,需要仔细查看各个路径。
- 配置各个 lib 的名字,编辑
链接器->输入->附加依赖项,分别添加下面几个 lib 库(opengl32.lib 为自带的,其他几个你都可以在上一步配置库目录的文件夹中能找到)。
freetype.lib
glew.lib
CGL.lib
glfw3.lib
opengl32.lib
- 编辑
配置属性->调试->环境,添加 freetype 的 freetype.dll 所在的路径,在上面的步骤中有提到过他的位置,他与 freetype.lib 在同一级目录下。注意一定要写成path=你的路径,不要有多余的空格。
path=D:\APP\CPPOpenSouceLib\freetype-2.13.2\objs\x64\Debug
- 到这里就完成所有的配置了,点击生成解决方案并运行,没有任何报错运行出来就成功了。接下来就可以愉快的编写代码了。
VS2022 一键自动配置(未验证)
我在配置环境的过程中看到一个 VS2022 的自动一键配置环境的仓库,但是由于我没有 VS2022 所以就懒得去折腾这个了,如果有 VS2022 可以看一下该仓库(不确定能否正确运行出来)。
GitHub 仓库地址:一键配置 GAMES101 作业框架及运行环境(含答案)
