引言

这篇博客介绍的是,如何在windows环境下搭建基于CMake和GCC的开发环境。这里使用的编辑器是VSCode。害怕麻烦的同学不应该搭建这个开发环境,应该直接使用VS Studiao的集成开发环境。   而我之所以要搭建这个环境,是因为为了方便在Windows下写好程序,直接移植到Linux系统,这样配置基本可以做到不需要怎么改。   OK,让我们开始吧~~~  

1 软件安装

配置这个环境的前提是要安装好:
  • VSCode
  • CMake
  • MinGW
  关于这三个软件的安装,这里就不多介绍了,但是需要注意的是,在安装好后,需要把CMake和MinGW的环境变量设置到系统环境变量中。   具体而言,就是要把包含有cmake-gui.exegcc.exe,g++.exe,gdb.exe等应用程序的路径包含到环境变量中,在我的电脑上这两个路径分别为:
D:\software\cmake-3.18.0-rc3-win64-x64\bin
D:\software\MinGW64\bin
  此外,在VSCode中,需要下载好以下四个插件:  
  • C/C++
  • C++ Intellisense
  • CMake
  • CMake Tools
  这里面的前两个插件是提供C++自动代码补全的支持的,后两个是提供CMake代码自动补全支持的插件。务必都要下载。  

2 创建工程

打开VSCode,创建一个main.cpp,创建一个CMakeLists.txt   main.cpp
#include <iostream>
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})
 

3 环境配置

3.1 配置编译(Build)环境

在这里我们使用VSCode中的Task来配置工程的编译环境。 具体来说,就是我们定义一个Task,这个Task的主要工作就是编译工程。  

操作步骤:

 
  • 1、产生tasks.json配置文件
    • 这里有两种方法:
      • 一是:点击上方菜单栏的“终端”>"配置任务"or“配置生成任务”;
      • 二是:“Ctrl+Shift+P”,输入task,选择“任务:配置任务”即可。
    • 这里生成的tasks.json会出现在.vscode文件夹下。
    • 这里需要说明的是,“任务”和“生成任务”的区别就在于,生成任务属于“build”的group,二者没有本质区别。
 
  • 2、配置tasks.json文件,具体可见下方程序实例: 这里tasks.json文件是通用的,你可以复制到自己的工程中使用。
  tasks.json
{
	// 这里配置了三个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"
}
 
  • 3、执行任务:Ctrl+Shift+B即可执行定义好的生成任务。另外,也可以通过菜单栏的“终端”栏目运行任务。

3.2 配置调试(Debug)环境

VSCode的提供了一个调试的环境,但是我们需要先配置好launch.json,才可以使用这一个功能。 这里我们介绍操作步骤:  
  • 1、创建launch.json文件
    • 这里同样有两种方法:
      • 一是:点击上方菜单栏的“运行”>“打开配置”;
      • 二是:“Ctrl+Shift+P”,输入debug,选择“调试:打开launch.json”即可。
 
  • 2、配置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
                }
            ]
        }
    ]
}
 
  • 3、执行调试:F5

3.3 配置代码自动补全环境

一般来说,把上面两个都配置好,就可以在VSCode里写程序,编译程序,调试程序了。   但是,还有一个非常严重的问题,就是一般的关于C/C++的默认库函数,VSCode是可以自动补全的,只要安装了C/C++插件就够了。   但是呢,我们如果要用第三方库,VSCode就无法自动补全了。所以,我们还需要进一步地去配置。   这里我们主要是要配置C/C++插件,让这个插件可以通过CMake来找到第三方库的头文件,从而提供代码补全的支持。   具体的操作步骤如下:
  • 1、创建c_cpp_properties.json配置文件:
    • 方法:“Ctrl+Shift+P”,接着输入“C/C++”,选择“C/C++编辑配置(JSON)”
  • 2、配置c_cpp_properties.json文件,具体可见下方程序实例:
  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
}
 
  • 3、重启VSCode
这里有一个更正 第三方库的代码补全的设置方法,如下,不要按我上面说的做… 参考博客: VSCode中C/C++库文件的配置(自动提示、补全) https://blog.csdn.net/cbc000/article/details/80670413 关键就是要在includePath里面添加第三方库的头文件路径

4 结语

事实上,说了很多,关于C语言和C++的环境配置一言以蔽之就是,要保证编译器能在编译阶段能找到静态链接库,而应用软件在运行阶段,能找到动态链接库,我们所做的一切配置都是为了这两点。   OK,enjoy your coding time~~~