Windows上VScode,CMake配置OpenGL,执行和调试
面向萌新(用VS不好吗,找罪受),废话少讠
默认你已经
- 会一点cmake知识,已经安装了cmake
- 安装完了VScode,C++插件,CMake插件,MingGW编译器
需要
我们需要glad glfw 两个库
- glfw下载:https://www.glfw.org/download.html
我们要下载编译好的,在Windows pre-compiled binaries
下
我下载的是64位的,如果下错了会导致编译程序链接阶段找不到库/找不到函数 - glad下载:https://glad.dav1d.de/
需要将Language设置为 c/c++,将Specification设置为 OpenGL。在 API 部分设置 gl 版本 3.3 或更高版本,将Profile设置为core并将Extensions留空。勾选_Generate a loader_选项并单击Generate。
他会跳转到新的页面,点哪个zip文件下载下来。
下载结束之后解压缩。
开始
- 新建文件夹,进入,新建include文件夹(用来放入第三方库的头文件),再新建一个src文件夹(我们的源文件),新建out文件夹(我们输出的exe文件会到这里),新建lib文件夹(我们将会把所需要的第三方链接库放入)
- 将你解压缩好的
glad
文件夹下的 include 里面的文件复制到我们的 include 里面 - 将你解压缩好的
glfw
文件夹下的 include 里面的文件复制到我们的 include 里面 - 将你解压缩好的
glad
文件夹下的src
里面的文件复制到我们的src
里面 - 将你解压缩好的
glfw
文件夹下的l ib-mingw-w64 里面的文件复制到我们的lib
里面
这一阶段你的工程应该是这样:
如果你有反骨不想按这样的结构来也可以,你会cmake就能做出来。
编译
我们现在就可以开始自己输入代码测试了(测试代码在learnopengl.com里面会有)
测试代码在这里:[[代码]]
src下新建一个main.cpp,代码粘贴进去。
接下来需要你有cmake的知识了
不过直接粘我写好的应该也可以,
在根目录下新建一个CMakeLists.txt (不要打错字哦),贴进如下代码
cmake_minimum_required(VERSION 3.6) #指示cmake最低版本
project(Opengl) #项目名称
set(CXX_STANDARD 17) #设置C++版本
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/out) #设置编译好的exe文件输出目录
include_directories(include) #包含我们的引入的第三方头文件
link_directories(${PROJECT_SOURCE_DIR}/lib) # 添加链接库的目录
find_library(GLFW_LIB glfw3 ${PROJECT_SOURCE_DIR}/lib) # 在链接库中找到我们的glfw3链接库文件。
if(NOT GLFW_LIB) #如果找不到glfw的话这里会报错。有可能你的glfw版本不会32位的。
message(FATAL_ERROR "Cannot find glfw3 library")
endif()
file(GLOB SRC_FILE src/*.c src/*.cpp) #找到src中的所有c/cpp文件,然后指定名称位SRC_CILE,GLOB只是内置的一个参数,别在意。
add_executable(main ${SRC_FILE}) #开始生成可执行文件
target_link_libraries(main ${GLFW_LIB}) # 这一行需要在add_executable之后,指示生成的文件链接我们指定的库。
如果你有cmake插件:
ctrl s 保存一下CMakeLists,cmake插件会自动帮你生成build文件夹。(如果没有,你就ctrl shift p,输入cmake:configure 然后指定编译器即可)
让vscode的控制台进入 build文件夹(cd build)
然后输入mingw32-make.exe(输入ming然后tab就能出来一般)
如果你没有cmake插件:
装一个
如果你不想装
mkdir build
cd build
cmake …
mingw32-make.exe (cmake指令也可以)
如果你修改了文件结构(增删了文件)那就重新生成一下cmake。
exe文件会在out下。双击执行就可以了。
好了已经学会了如何使用cmake构建工程,下面是如何配合使用vscode
配置VScode
目的:实现vscode可以自动化生成程序并运行,不需要我们输入代码还要双击执行了,而且还可以调试。
vscodeC++插件的代码识别 和 cmake配合mingw编译是两个东西,我们写cmake包含路径和链接是给mingw编译器看的。
我们帮vscode指定头文件搜索目录,不然vscode不认识#include的头文件。
ctrl shift p 搜索C++ edit configuration(UI) 然后会跳转一个界面并生成一个.vscode文件夹和里面的c_cpp_properties.json文件,
我们可以在这个界面的”包含路径“里面配置或者直接在.vscode的c_cpp_properties.json文件配置。
包含路径添加"${workspaceFolder}/include",json文件配置的话需要在上一行添逗号。
添加之后我们main.cpp文件中的头文件就不报错了。
vscodeC++的执行需要lanuch.json文件,点击到调试界面,点击create a launch.json file
打开launch.json文件,点 添加配置,选gdb启动。
按如下配置:
- 让”program“选中我们在out中生成的main.exe文件:“program”: “${workspaceFolder}/out/main.exe”(你至少已经生成了exe文件)
- 让”“miDebuggerPath”:选定你的gdb.exe程序(win + r cmd 然后 where gdb就可以知道你的gdb路径)。(或者直接删了这行,让他自己去找。)
如下是我的配置,只是修改了program和删除了miDebuggerPath。
{
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) 启动",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/out/main.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "D:/VScode/msys/mingw64/bin/gdb.exe",
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "将反汇编风格设置为 Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
],
//"preLaunchTask":"build",//这个你们先不要写上去,我一会解释。
}
]
}
这个时候就可以添加断点进行F5调试了。
但是这样只是告诉了vscode对我们用cmake生成的exe进行执行或者调试,我们修改了文件的话还是要重新cmake重新生成exe
launch.json 有一个“preLaunchTask”的属性,可以帮我们提前执行一些指令。
我们可以新添加一个tasks.json文件,然后将这一部分指令告诉tasks.json
ctrl shift p 输入tasks 然后.vscode生成了一个文件,
我们要把指令写到json里面,下面是我的,
{
"tasks": [
{
"label": "cmake",
"command":"cmake",
"args": [
".."
]
},
{
"label": "make",
"command":"mingw32-make.exe",
"args": [
]
},
{
"label": "build",
"dependsOn":[
"cmake",
"make",
]
}
],
"version": "2.0.0",
"options": {
"cwd":"${workspaceFolder}/build",//,这里要指定到这个文件夹,在build里面进行代码执行。
}
}
“label”是唯一标识,第三个task会执行前两个task,前两个task会在“cwd”指定为文件夹执行cmake … 和mingw32-make.exe,然后exe输出到out,然后launch.json里面添加一句"preLaunchTask":“build”,(”build“就是第三个task)这条指令帮我们执行task里面的指令,然后进行执行或者调试。
最后:
作者是个菜鸡,第一次发帖,稿子有问题的话可以告诉我改。
想好好了解vscode构建C++的可以看这俩视频:vscode构建C++和cmake+vscode