前言
在上一篇笔记: Ubuntu vscode 配置 c++ 开发环境(一),我整理了关于如何配置 vscode 来进行 c++ 程序的编译运行和调试。上一篇笔记中主要还是利用 g++ 来进行编译,这种方法一般只适用于很小型的项目(大部分只有一个源文件)。对于多文件项目一般采用 CMake 来进行依赖之间的配置。这篇笔记主要介绍一下如何配置 vscode 来利用 CMake进行多文件项目的编译和调试。
前提条件
- 系统需要安装 cmake 以及gdb,可以通过以下命令安装
sudo apt install cmake gdb
- vscode 需要安装以下插件:
C/C++
:主要代码补全CMake
:主要是CMakeLists.txt
的语言支持CMake Tools
:CMake 的主要配置插件
测试项目
为了测试插件,这里我简单创建了一个 CMake 项目,主要包括一个可执行文件的构建还有一个静态库,同时用到了外部库 opencv,文件目录结构如下:
DisplayImageFromText
├── 3rdparty-----------------------外部库
│ └── FileWriter-----------------外部库
│ ├── CMakeLists.txt
│ ├── include
│ │ └── FileWriter.hpp
│ └── src
│ └── FileWriter.cpp
├── CMakeLists.txt
├── data---------------------------数据
│ ├── images
│ │ └── lena.png
│ └── text
│ ├── input_file.txt
│ └── output_file.txt
├── include------------------------项目头文件
│ └── FileReader.hpp
└── src----------------------------项目源文件
├── FileReader.cpp
└── main.cpp
程序的功能如下:
main.cpp
接收三个参数,分别作为输入文本文件路径,输出文本文件路径,数据图像文件夹main.cpp
通过FileReader
读取输入文本文件中的内容,按行存在字符串数组中,每一行代表一个图像文件名,(项目中的文件)main.cpp
通过FilerWriter
将上述内容写入输出文本文件中(项目中的第三方库)main.cpp
调用opencv
显示第一张图片(安装在系统中的第三方库)
vscode 配置
这里主要是利用微软官方的 CMake Tools
来进行配置,大部分操作都已经实现好了,比较简单,下面一一进行介绍
项目配置 — cmake ..
在 vscode 底部有一系列工具栏,分别可以调整编译器、编译模式、要编译的目标、调试按钮、运行等等,在使用 CMake Tools
之前一般会先让你选择好各项参数。
通过命令面板(Ctrl + Shift + p) 运行:CMake: Configure
,插件会自动在根目录(CMakeLists.txt
所在路径)下生成 build
文件夹,并在其中运行 cmake ..
进行项目配置,如下所示:
项目编译 — make .
直接按底部工具栏中的 Build
或者通过命令面板运行: CMake: Build
或者 F7
都可以进行项目编译,还可以通过底部工具栏 Build
旁边选择要编译的目标,默认是 [all]
即编译所有目标,输出如下所示:
项目调试和运行
无参数的目标的调试和运行比较简单,首先可以通过 vscode 底下工具栏中的 Build
右侧的昆虫键和播放键来进行,如下所示:
如果需要有参数的情况,需要创建一个 launch 配置来进行,关于如何使用 launch 来进行项目可以参考我的上一篇笔记。这里我创建的 launch 配置如下:
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Debug DispalyImageFromText",
"type": "cppdbg",
"request": "launch",
"program": "${command:cmake.launchTargetPath}",
"args": [
"${workspaceFolder}/data/text/input_file.txt",
"${workspaceFolder}/data/text/output_file.txt",
"${workspaceFolder}/data/images/"
],
"stopAtEntry": true,
"cwd": "${workspaceFolder}",
"environment": [
{
"name": "PATH",
"value": "$PATH:${command:cmake.launchTargetDirectory}"
}
],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}
其中需要留意的参数如下:
"name"
:针对这个调试配置的名称"program"
:这里需要按照CMake Tools
设为${command:cmake.launchTargetPath}
"args"
:调试输入的参数"environment"
:这里也要按照CMake Tools
进行相应设置
CMake Tools
目前不支持有参数的情况直接运行目标,所以我们还是采用 task 的方式来进行运行,我设置的 task 如下所示:
{
"version": "2.0.0",
"tasks": [
{
"type": "shell",
"label": "Run Target: DisplayImageFromText",
"command": "${workspaceFolder}/build/DisplayImageFromText",
"args": [
"${workspaceFolder}/data/text/input_file.txt",
"${workspaceFolder}/data/text/output_file.txt",
"${workspaceFolder}/data/images/"
],
"options": {
"cwd": "${workspaceFolder}"
},
"problemMatcher": [
"$gcc"
],
"group": "test",
"presentation": {
"reveal": "always"
},
"runOptions": { "reevaluateOnRerun": false }
}
]
}
运行的方法和之前也差不多,这里就不赘述了。
结语
目前为止已经总结了如何利用 vscode 来进行小型以及大型 C++ 项目,之后可能还会总结以下针对 ROS 的相关配置。