分享

嵌入式开发:VSCode中,基于CMake开发

 开心果NeedCar 2023-06-21 发布于上海

作为一个程序员,VSCode、CMake并不陌生,然而,在MCU的开发过程中,底层很少选择使用CMake去编译工程,多数还是使用目标芯片对应的工具链编译,常见的编译器:HighTec、Tasking、GreenHills、Keil等等。如果进行SOA(Service Oriented Architecture)架构开发,使用一些软实时操作系统时(eg:Linux),搭配CMake使用,构建进程的编译会方便很多。本文,主要介绍VSCode+CMake环境搭建以及示例。

提示:本文操作系统Windows10 64b

1、VSCode、CMake安装

关于VSCode、CMake的安装教程,网上很多,本文不过多赘述。

(一)VSCode官方下载地址

链接:
https://code./download
(二)CMake的官方下载地址
链接:https:///download/
(三)MinGW的官方下载地址
链接:https:///projects/mingw/
(四)VSCode插件安装

1、CMake、CMake Tools插件安装,如下所示:

2、C/C++、C/C++ Extension Pack插件安装,如下所示:

2、源文件编写及编译

编写源文件之前,先创建一个工作区,操作如下:文件->打开文件夹...(选择一个目标文件夹)。

本文在VSCode_CMake文件夹下创建工作区,如下所示:

(一)CMakeLists.txt文件编写

CMakeLists.txt文件内容如下所示:

# 设置项目名称project(CMakePro)
set(CMAKE_C_COMPILER "gcc")set(CMAKE_CXX_COMPILER "g++")
#指定CMake版本set(CMAKE_CXX_STANDARD 11)
# 将当前文件中的所有文件放到变量DIR_TOOT_SRCS中# aux_source_directory 查找某路径下的所有源文件,"."表示当前路径aux_source_directory(. DIR_TOOT_SRCS)# 将变量DIR_TOOT_SRCS中的源文件编译源码生成目标,目标文件名称CMakeProadd_executable(CMakePro ${DIR_TOOT_SRCS})
(二)源文件编辑
main.cpp文件内容如下所示:
#include <iostream>#include <vector>#include <string>
using namespace std;
int main(){ vector<string> MsgInfo {"HelloWorld","VSCode","CMake"};
for (const string& info : MsgInfo) { cout << info << " " << endl; } getchar();}

(三)另存工作区

具体操作:文件->将工作区另存为...

自定义工作的名称,本文VSCode_CMake,文件后缀.code-workspace,如下所示:

VSCode_CMake.code-workspace内容如下所示,设置CMake的IDE,本文选则"MinGW Makefiles"。

添加内容如下所示:
"cmake.generator""MinGW Makefiles"

使用快捷键:Ctrl+Shift+P,选择目标CMake工具包,如下所示:

本文选择"GCC 12.2.0 x86_64-w64-mingw32",如下所示:

3、编辑配置文件

(1)创建.vscode文件夹

(2)创建c_cpp_properties.json文件
文件内容如下:
{    "configurations": [      {        "name": "GCC",        "defines": ["_DEBUG", "UNICODE", "_UNICODE"],        //g++路径        "compilerPath": "C:/msys64/mingw64/bin/g++.exe",        "cStandard": "c11",        "cppStandard": "c++17",        "intelliSenseMode""windows-gcc-x64",        "configurationProvider": "vector-of-bool.cmake-tools",        "includePath": [          "${default}",          "${workspaceFolder}/**"        ]      }    ],    "version": 4}
(3)创建launch.json文件
launch.json文件内容如下所示:
{    "version": "0.2.0",    "configurations": [      {        "name": "C/C++: g++.exe build and debug active file",        "type": "cppdbg",        "request": "launch",        "program": "${fileDirname}\\${fileBasenameNoExtension}.exe",        "args": [],        "stopAtEntry": false,        "cwd": "${fileDirname}",        "environment": [],        "externalConsole": true,        "MIMode": "gdb",        "miDebuggerPath": "C:\\msys64\\mingw64\\bin\\gdb.exe",        "setupCommands": [          {            "description": "Enable pretty-printing for gdb",            "text": "-enable-pretty-printing",            "ignoreFailures": true          }        ],        "preLaunchTask": "g++"      }    ]  }
(4)创建tasks.json文件
tasks.json文件内容如下所示:
{    "tasks": [      {        "type": "cppbuild",        "label": "g++",        "command": "C:\\msys64\\mingw64\\bin\\g++.exe",        "args": [          "-fdiagnostics-color=always",          "-g",          "${file}",          "-o",          "${fileDirname}\\${fileBasenameNoExtension}.exe"        ],        "options": {          "cwd": "${fileDirname}"        },        "problemMatcher": ["$gcc"],        "group": {          "kind": "build",          "isDefault": true        },        "detail": "Task generated by Debugger."      }    ],    "version": "2.0.0"  }

当然,如上的*.json文件也可以通过"调试配置"自动生成,选择调试方式,会自动生成对应的*.json文件,如下所示:

注意:tasks.json文件的label与launch.json文件中的preLaunchTask保持一致,如下所示:

参考资料https://code./docs/cpp/config-mingw

4、使用CMake编译源文件

可以在终端使用命令查看CMake和Make的安装情况,如下所示:

如果习惯了bash命令,只要安装了git,可以切换shell,在终端输入:bash,如下所示:

CMake编译之前,可以先将本地安装的CMake.exe路径添加到"设置"中,如下所示:

(一)终端中,手动进行源文件编译

1、使用cmake命令,如下所示:

cmake -S . -B Build -G "MinGW Makefiles"
这里为什么使用上述命令,可以参考如下链接:
https:///cmake/help/latest/manual/cmake.1.html

提示:-B 构建项目文件所在的目录,-G(Generator ),设置 IDE。

在源文件对应的文件夹下会自动生成一个build文件夹,如下所示:

2、使用make命令,生成可执行文件(CMakePro),如下所示:

生成的CMakePro.exe文件如下所示:

提示:如上的操作可以通过批处理文件操作。
(二)使用CMake进行源文件编译
1、单击"CMake"图标,配置项目

2、进行项目配置,如下所示

3、编译文件,通过"输出"窗口查看输出信息,如下所示:

生成文件,均输出到build文件夹,与手动执行命令产生的结果一致,如下所示:

最后,进行目标文件,在终端(eg:PowerShell)运行可执行文件,本文示例如下:

5、Debug程序

(一)在调试C/C++文件中选择"调试C/C++文件",如下所示:

(二)程序调试如下所示:

提示:生成可执行文件以后,方可调试。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多