写在最前面:
vscode它不是一个IDE,vscode只提供编辑的环境,而不提供编译的环境,如果想要用vscode来集成开发环境,就必须安装必须的编译器(比如mingw,python,texlive等)、配置相应编译环境(添加环境变量等)、 安装匹配的vscode的拓展插件、通过拓展插件提供的“属性”将外部编译器链接到vscode。
所以vscode仅仅起到了一个编写代码的作用,想要编译ros相关代码,还得转到终端输入命令执行。
1 . 通过终端创建工作空间和功能包
2. 用vscode打开工作空间并补充东西
注意:如果是从硬盘上拷贝过来的工作空间文件夹,一定要先删除 devel,build文件夹,然后重新在终端catkin_make生成新的devel,build。
在想要打开的文件夹目录下打开终端输入code .
code .
打开后,.vscode文件夹下包含4个文件:(最上面的4个)
c_cpp_properties.json
launch.json
settings.json
tasks.json
只需要对tasks.json和c_cpp_properties.json、 launch.json这3个文件内容进行修改
2.1 task.json
这里需要在添加 "args"中添加了-DCMAKE_EXPORT_COMPILE_COMMANDS=ON(注意:一般情况下task.json这里已经添加了这个)
{
"version": "2.0.0",
"tasks": [
{
"label": "catkin_make", //代表提示的描述性信息
"type": "shell", //可以选择shell或者process,如果是shell代码是在shell里面运行一个命令,如果是process代表作为一个进程来运行
"command": "catkin_make",//这个是我们需要运行的命令
"args": [
"-DCMAKE_EXPORT_COMPILE_COMMANDS=ON"
],//如果需要在命令后面加一些后缀,可以写在这里,比如-DCATKIN_WHITELIST_PACKAGES=“pac1;pac2”
"group": {"kind":"build","isDefault":true},
"presentation": {
"reveal": "always"//可选always或者silence,代表是否输出信息
},
"problemMatcher": "$msCompile"
},
]
}
2.2 c_cpp_properties.json
并且需要在c_cpp_properties.json的configurations中添加 "compileCommands": "${workspaceFolder}/build/compile_commands.json"
{
"configurations": [
{
"browse": {
"databaseFilename": "${default}",
"limitSymbolsToIncludedHeaders": false
},
"includePath": [
"/opt/ros/melodic/include/**",//无需修改
"/home/nrc/catkin_px4odom/src/px4_odom/include/**",
"/usr/include/**"
],
"name": "ROS",
"intelliSenseMode": "gcc-x64",
"compilerPath": "/usr/bin/gcc",
"cStandard": "gnu11",
"cppStandard": "c++14",
"compileCommands": "${workspaceFolder}/build/compile_commands.json"//因为在task.json里面的rgs[]有东西,所以此处也要添加
}
],
"version": 4
}
2.3 launch.json
然后需要增加 "preLaunchTask"项,其参数需要与task.json 文件中的“label”项设置的名称相同
{
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/devel/lib/px4_odom/odometry_process_node", //编译生成的可执行文件的位置
"args": [],
"stopAtEntry": false,
//"preLaunchTask": "build",
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"targetArchitecture": "x64",
"avoidWindowsConsoleRedirection": true,
"preLaunchTask": "catkin_make",//与task.json的lable一致,这一行非常重要,加了这个才能调试debug
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}
3. 编译
方法一: 执行快捷键ctrl + shfit + b自动执行task.json
中的catkin_make指令进行编译了,并在build文件夹下生成compile_commands.json
,这个文件是在c_cpp_properties.json
中调用的,这样就能找到头文件了
方法二:直接在终端运行catkin_make
在终端会发现编译成功
同时,发现在打开的.cpp文件里面写代码会有提示了(说明VScode编辑器识别到了头文件路径,所以会给提示)
以上参考【ROS】VSCODE + ROS 配置方法(保姆级教程,总结了多篇)
更详细内容可以参考以上文章
4. 调试(debug)
4.1 CMakeLists.txt文件设置
为了能执行断点调试,需要在设置CMakeLists.txt文件,添加下面程序,下面的两个set是两种写法,如果debug时不能设置断电则换另一种试一下
#set(CMAKE_CXXX_FLAGS "${CMAKE_CXX_FLAGS} -g" )
SET(CMAKE_BUILD_TYPE Debug)
4.2 在debug之前要开一个终端roscore,以启动ROS MASTER
4.3 然后点击开始调试((gdb)launch)
此时,界面右下角会出现一个小七星瓢虫,代表正在进行调试的终端。
以上更详细可参考VScode debug ROS cpp程序设置 断点调试