GAMES101 - 实验环境搭建

GAMES101 Vscode可行配置

环境:Vscode + CMakeTools + CppTools + Mingw64

Vscode中C++引入第三方库的方式大致有以下三种:

  1. 对于非Cmake项目,利用CppTools(Miscrosoft官方为Vscode提供的编译和调试插件)的IntelliSense功能,通过设置c_cpp_properties.json中的includePath项引入对应库的/include目录。
  2. 对于Cmake项目,利用CMakeTools (Miscrosoft官方为Vscode提供的Cmake插件)一键基于CMakeList.txt生成/build目录,在通过内置终端make并运行。
  3. 对于Cmake项目,同时使用CppTools与CMakeTools ,高度自动化的预设置支持一键build和一键debug,在配置合理的情况下这种方式是最高效的。麻烦点在于需要对setting.jsonc_cpp_properties.jsontask.jsonlaunch.json进行额外配置。假设使用windows下以mingw64为编译器,具体改动如下。

    • setting.json。在工作区配置中将C_Cpp.default.configurationProvider设置为ms-vscode.cmake-tools,表示通过CMakeTools 引入外部链接而不是内置的includePath。

    • c_cpp_properties.json。如果在setting.json中已配置或配置失效,可以添加configurationProvider设置为ms-vscode.cmake-tool从而实现同样的引入效果,两者不冲突。

    • task.json。由于CMakeTools 在CMakeList.txt保持的时候就完成了build,因此只需提供make的任务指令即可,具体指令根据环境变量的设置而变,一般为make或mingw32-make,json配置如下

      // tasks下添加
      {
                  "label": "make",
                  "options": {
                      "cwd": "${workspaceFolder}/build"
                  },
                  "type": "shell",
                  "command": "mingw32-make -j4", 
      }
    • launch.json。注意指定正确的miDebuggerPath和program,并加载task.json中新添加的make为前置任务,json配置如下(Assignments2为例)

      "configurations": [
              {
                  "name": "debug",
                  "type": "cppdbg",
                  "request": "launch",
                  "program": "${fileDirname}\\build\\Rasterizer.exe",
                  "args": [],
                  "stopAtEntry": false,
                  "cwd": "${workspaceFolder}",
                  "environment": [],
                  "externalConsole": false,
                  "MIMode": "gdb",
                  "miDebuggerPath": "D:\\MinGW\\mingw64\\bin\\gdb.exe",
                  "setupCommands": [
                      {
                          "description": "为 gdb 启用整齐打印",
                          "text": "-enable-pretty-printing",
                          "ignoreFailures": true
                      }
                  ],
                  "preLaunchTask": "make"
              }
          ]

其他坑

  1. eigen和opencv自带include文件无法被正确引入时,需要自己用Cmake进行本地构建和编译,这里的坑搜一下网上的文章基本能解决。
  2. 在用mingw本地编译opencv时需要使用mingw64-posix离线版,online版的选了posix还不行。
  3. CMakeList.txt找不着包,是环境变量没有被正确配置。所幸GAMES101的助教提供了写好的CMakeList作为参照,把拥有xxxconfig.cmake的目录添加到对应的环境变量即可(例如设置OpenCv DIR目录为包含opencvconfig.cmake的路径),不必绕进cmake的一堆坑。

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!