GAMES101实验环境搭建(Vscode + CMakeTools + CppTools + Mingw64)

GAMES101 Vscode可行配置

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配置如下

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

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      "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的一堆坑。