用VSCode和CMake打造树莓派开发利器 保姆级教程
各位,前段时间我主要在做STM32上的嵌入式软件开发,主要是用来同时控制3个BLDC电机和4G通信。当时写了一个【用VSCode和STM32CubeMX打造STM32开发利器 保姆级教程】
用VSCode和STM32CubeMX打造STM32开发利器 保姆级教程
确实很好用。
现在我要用树莓派来写嵌入式软件,我发现用vscode来编程实在是爽,因此,我准备来用vscode和cmake打造一个树莓派开发利器。下面是保姆级教程。
1. vscode的安装
参考下面链接就可以了。
因为我是用的ubuntu 24.04LTS版,所以,我是装的ubuntu的vscode
2. 打开vscode
安装好后,用ssh登录树莓派,在任意地方,输入code,就可以打开vscode了。我喜欢在project目录下编程,所以,我在project目录下打开vscode.
打开之后,在显示器就出现vscode框了。但是,大小和位置是固定的,而且反应有点慢。这没有办法,因为是通过ssh登录反应到电脑屏幕的。(如果直接用树莓派接显示器的话,应该能够解决这个问题)

3. 编译环境
编译的话,当然还是用CMake爽啊。下面是我用的cmake文件,主要是参考
cmake使用详细教程(日常使用这一篇就足够了)_cmake教程-CSDN博客
cmake_minimum_required(VERSION 3.22)
#Setup compiler settings
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTERNSIONS ON)
#Set the project name
set(CMAKE_PROJECT_NAME my_dcmotor1)
#Enable CMake support for ASM and C, CPP languages
enable_language(CXX C ASM)
#Core project settings
project(${CMAKE_PROJECT_NAME})
#integrate source files
aux_source_directory(. MAIN_SRC)
#include files
include_directories(.)
#for opencv
find_package(OpenCV REQUIRED)
#for wiringPi
find_library(WIRINGPI_LIBRARIES NAMES wiringPi)
#Create an executable object type
add_executable (${CMAKE_PROJECT_NAME} ${MAIN_SRC})
#link
target_link_libraries(${CMAKE_PROJECT_NAME} ${OpenCV_LIBS})
target_link_libraries(${CMAKE_PROJECT_NAME} ${WIRINGPI_LIBRARIES})
#add compiler options
add_compile_options(-Wall -g)
4. 编译方式
有了上面的cmake文件后呢,可以有2种方式进行编译
4.1, 在源文件目录下打开vscode后,vscode看到这个cmake文件后,会自动帮你配置,你只需要等配置好后,点build就行。大概情况如下:

上面是vscode的自动配置,那么点build后,就是下面的情况了

可以看到,build文件夹里,已经生成了【my_dcmotor1】的可执行文件,并且包含debug信息的。
4.2 第二种方式,就是,自己建立一个build文件夹,进入build文件夹,然后,执行指令
cmake ..
那么会自动执行上层目录的CMakeLists.txt里面的指令。然后,执行指令
make
则,在build目录下就自动生成了【my_dcmotor1】的可执行文件。
5. 调试debug
因为CMakeLists.txt里面已经加了生成debug信息的指令,所以,生成的可执行文件是带debug的信息的。
然后,点vscode左侧的run and debug图标,然后点绿色三角形图标,会要求配置launch.json.
按照我下面这样配置,就OK了
{
// 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": "build and debug Linux (gdb) Launch",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/build/my_dcmotor1",
"args": [],
"stopAtEntry": true,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "Set Disassembly Flavor to Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
]
}
]
}
什么都不需要改,只是将“program”:后面的可执行文件改成你的文件就行了。我的文件就是build文件夹下的【my_dcmotor1】.
那么,就会出现下面的画面

调试程序停在了main()的第一条指令,然后,可以点单步执行,或者打断点,看执行逻辑和变量了。可以在watch窗口加入全局变量,看全局变量。
那么接下来的执行,就跟【用VSCode和STM32CubeMX打造STM32开发利器 保姆级教程】里面一样了,可以随意进行debug了。
6. 一点tips
如果你的程序用到了wiringPi的库,那么用gdb进行调试时,会说没有权限访问gpiomem等等。这时需要将用户加入kmem组,然后重启系统,就没有问题了。
7. 好了,大功告成,亲个嘴儿。
更多推荐
所有评论(0)