引言
这篇博客介绍的是,如何在windows环境下搭建基于CMake和GCC的开发环境。这里使用的编辑器是VSCode。害怕麻烦的同学不应该搭建这个开发环境,应该直接使用VS Studiao的集成开发环境。
而我之所以要搭建这个环境,是因为为了方便在Windows下写好程序,直接移植到Linux系统,这样配置基本可以做到不需要怎么改。
OK,让我们开始吧~~~
配置这个环境的前提是要安装好:
cmake-gui.exe
和gcc.exe,g++.exe,gdb.exe
等应用程序的路径包含到环境变量中,在我的电脑上这两个路径分别为:D:\software\cmake-3.18.0-rc3-win64-x64\bin
D:\software\MinGW64\bin
此外,在VSCode中,需要下载好以下四个插件:
打开VSCode,创建一个main.cpp,创建一个CMakeLists.txt
main.cpp
#include
using namespace std;
int main(int agec, char **argv) {
cout << "Hello world" << endl;
return 0;
}
CMakeLists.txt
cmake_minimum_required(VERSION 3.0)
project(cmake_test_project)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g")
add_executable(${PROJECT_NAME} ${DIR_TOOT_SRCS})
在这里我们使用VSCode中的Task来配置工程的编译环境。
具体来说,就是我们定义一个Task,这个Task的主要工作就是编译工程。
{
// 这里配置了三个Task
"tasks": [
// Task 1:生成build文件夹
{
"type": "shell", // 这里决定了task的类型,shell类型就是在命令行里运行command的命令,还有一种类型是“process”,这里就不介绍了
"label": "mk_build", // task的名字
"command": "mkdir", // 需要被运行的命令
"args": ["build"], // 传递给command的参数
"options": {
"cwd": "${workspaceFolder}",
},
},
// Task 2:运行cmake
{
"type": "shell",
"label": "cmake",
"command": "cmake",
"args": [
"-G",
"MinGW Makefiles", // 这里必须定义生成器,否则默认cmake生成的是VS Studio可编译的工程
"${workspaceFolder}"
],
"options": {
"cwd": "${workspaceFolder}/build", // 工作路径,就是说cmake的输出都会放在${workspaceFolder}/build文件夹下
},
"problemMatcher": [],
"group": {
"kind": "build",
"isDefault": true
}
},
// Task 3:运行make
{
"type": "shell",
"label": "build",
"command": "mingw32-make",
"args": ["-j4"],
"options": {
"cwd": "${workspaceFolder}/build",
},
"problemMatcher": [],
"group": {
"kind": "build", // 这里说明这个任务时输入"build"类型的,也就是说明,这是一个生成任务
"isDefault": true
},
"dependsOn": [
"cmake" // 这里设置,说明了这个任务一定要在Task “cmake”执行之后方可执行
]
}
],
"version": "2.0.0"
}
Ctrl+Shift+B
即可执行定义好的生成任务。另外,也可以通过菜单栏的“终端”栏目运行任务。VSCode的提供了一个调试的环境,但是我们需要先配置好launch.json,才可以使用这一个功能。
这里我们介绍操作步骤:
launch.json
{
"version": "0.2.0",
"configurations": [
// Debug 1,这里也可以配置多个Debug任务,这其实和tasks.json很类似
{
"name": "first_exe", // Debug任务名
"type": "cppdbg", // 类型
"request": "launch",
"program": "${workspaceFolder}/build/cmake_test_project.exe", // 需要调试的应用程序,这是需要按照你的需要进行调整的
"args": [], // 传递参数给应用程序
"stopAtEntry": false,
"cwd": "${workspaceFolder}", // 当前工作路径
"environment": [{"name": "PATH","value": "${PATH};D:/software/opencv/build-gcc/bin;D:/software/aruco/bin"}], // 这里需要特别注意,这里要把应用程序运行需要的动态链接库的路径,放进来,这里也需要你根据自己需要进行调整,我在这里给出一个示范
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "D:/software/TDM-GCC-64/bin/gdb.exe", // 这里需要填写你自己的gdb.exe的路径
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}
一般来说,把上面两个都配置好,就可以在VSCode里写程序,编译程序,调试程序了。
但是,还有一个非常严重的问题,就是一般的关于C/C++的默认库函数,VSCode是可以自动补全的,只要安装了C/C++插件就够了。
但是呢,我们如果要用第三方库,VSCode就无法自动补全了。所以,我们还需要进一步地去配置。
这里我们主要是要配置C/C++插件,让这个插件可以通过CMake来找到第三方库的头文件,从而提供代码补全的支持。
具体的操作步骤如下:
c_cpp_properties.json
{
"configurations": [
{
"name": "Win32",
"includePath": [
"${workspaceFolder}/**"
],
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE"
],
"windowsSdkVersion": "10.0.18362.0",
"compilerPath": "D:/software/TDM-GCC-64/bin/g++.exe", // 这里写你自己的g++的路径
"cStandard": "c11",
"cppStandard": "c++17",
"intelliSenseMode": "gcc-x64",
"configurationProvider": "vector-of-bool.cmake-tools" // 这个很重要,就是这句话在通过cmake引入第三方库的代码补全
}
],
"version": 4
}
这里有一个更正
第三方库的代码补全的设置方法,如下,不要按我上面说的做…
参考博客: VSCode中C/C++库文件的配置(自动提示、补全)
https://blog.csdn.net/cbc000/article/details/80670413
关键就是要在includePath里面添加第三方库的头文件路径
事实上,说了很多,关于C语言和C++的环境配置一言以蔽之就是,要保证编译器能在编译阶段能找到静态链接库,而应用软件在运行阶段,能找到动态链接库,我们所做的一切配置都是为了这两点。
OK,enjoy your coding time~~~