VScode 使用 ROS 设置并自动完成
VScode setup with ROS and auto complete
我正在努力配置 VSCode ROS 以具有自动完成功能。
我习惯于将 VSCode 与 Qt 和 OpenCV 一起使用,并且一切正常。
例如,对于 OpenCV,我只是像这样编辑 c_cpp_propreties.json
:
{
"configurations": [
{
"name": "Linux",
"includePath": [
"${workspaceFolder}/**",
"/usr/local/include/opencv4/opencv2"
],
"defines": [],
"compilerPath": "/usr/bin/gcc",
"cStandard": "gnu11",
"cppStandard": "gnu++14",
"intelliSenseMode": "clang-x64"
}
],
"version": 4
}
OpenCV 的自动完成工作正常(我有 C++ IntelliSense 扩展)。
但是,一旦我尝试在 c_cpp_propreties.json
中从 ROS 指定 include
文件夹,就没有任何工作了,甚至 OpenCV 自动完成也没有:
{
"configurations": [
{
"name": "Linux",
"includePath": [
"${workspaceFolder}/**",
"/usr/local/include/opencv4/opencv2",
"/opt/ros/melodic/include"
],
"defines": [],
"compilerPath": "/usr/bin/gcc",
"cStandard": "gnu11",
"cppStandard": "gnu++14",
"intelliSenseMode": "clang-x64"
}
],
"version": 4
}
好像 ROS 正在阻止一切。我究竟做错了什么?我指定在 VSCode 中单击“打开文件夹”并浏览 ROS 包以加载它。
我正在开发 Ubuntu 18.04 LTS。
您需要生成 compile_commands.json 并将其放入您的 vscode 工作目录。这个文件会告诉 vscode linter 去哪里找。如果您在 CMakeLists.txt 更改(即新库)
中创建新文件或编译指令,则需要重新生成
我做了一个youtube video来演示这个
我也在 reddit 上用类似的 post 回答了这个问题:Has anyone got Visual Studio to work properly with ROS?。我在下面添加了我为此写的答案;
如果使用catkin_make,编译时,
cakin_make -DCMAKE_EXPORT_COMPILE_COMMANDS=1
A compile_commands.json
将在编译后出现在您的构建文件夹中。
如果你使用catkin工具,因为构建系统不同,构建后你会有一个运行一个脚本将个体compile_commands.json
合并为一个
See the issue here for script.
然后你可以重新启动VScode,它会在启动时提示你是否要使用它。如果它出于某种原因没有提示您,
基本上,步骤是:
- cakin_make -DCMAKE_EXPORT_COMPILE_COMMANDS=1
- 将 catkin_ws/build 中的 compile_commands 移动到您的 vscode 工作目录下,我通常将其放在 catkin_ws/src 下,个人喜好
- 将 vscode 指向您的编译命令。
ROS 从这里应该可以正常工作。
编辑:从另一个 post
中的答案添加了步骤
我在使用 IntelliSense 和 ROS 时遇到问题。无论我做什么,它都不会搜索 ros
命名空间。所以我想将 cppStandard
(在文件 c_cpp_properties.json
中)更改为 gnu++11
(无论如何它仅适用于 IntelliSense)。它立即开始工作。
这是 cppStandard
设置为 gnu++14
的结果
这是 cppStandard
设置为 gnu++11
的结果
我什至尝试过 gnu++17
,但也收效甚微。看起来 gnu++11
效果最好。
我也尝试了 Richard 在 中所说的内容。它无需更改任何其他内容即可工作。
在文件 .vscode/c_cpp_properties.json
(由 VSCode ROS extension 生成)中,尝试将 "cppStandard": "gnu++14"
更改为 "cppStandard": "c++14"
。
ROS 正在使用 c++14 standard, so specifying gnu++14
seems to break things. This was deduced from this question。
存在关于此的 issue。
我正在努力配置 VSCode ROS 以具有自动完成功能。
我习惯于将 VSCode 与 Qt 和 OpenCV 一起使用,并且一切正常。
例如,对于 OpenCV,我只是像这样编辑 c_cpp_propreties.json
:
{
"configurations": [
{
"name": "Linux",
"includePath": [
"${workspaceFolder}/**",
"/usr/local/include/opencv4/opencv2"
],
"defines": [],
"compilerPath": "/usr/bin/gcc",
"cStandard": "gnu11",
"cppStandard": "gnu++14",
"intelliSenseMode": "clang-x64"
}
],
"version": 4
}
OpenCV 的自动完成工作正常(我有 C++ IntelliSense 扩展)。
但是,一旦我尝试在 c_cpp_propreties.json
中从 ROS 指定 include
文件夹,就没有任何工作了,甚至 OpenCV 自动完成也没有:
{
"configurations": [
{
"name": "Linux",
"includePath": [
"${workspaceFolder}/**",
"/usr/local/include/opencv4/opencv2",
"/opt/ros/melodic/include"
],
"defines": [],
"compilerPath": "/usr/bin/gcc",
"cStandard": "gnu11",
"cppStandard": "gnu++14",
"intelliSenseMode": "clang-x64"
}
],
"version": 4
}
好像 ROS 正在阻止一切。我究竟做错了什么?我指定在 VSCode 中单击“打开文件夹”并浏览 ROS 包以加载它。 我正在开发 Ubuntu 18.04 LTS。
您需要生成 compile_commands.json 并将其放入您的 vscode 工作目录。这个文件会告诉 vscode linter 去哪里找。如果您在 CMakeLists.txt 更改(即新库)
中创建新文件或编译指令,则需要重新生成我做了一个youtube video来演示这个
我也在 reddit 上用类似的 post 回答了这个问题:Has anyone got Visual Studio to work properly with ROS?。我在下面添加了我为此写的答案;
如果使用catkin_make,编译时,
cakin_make -DCMAKE_EXPORT_COMPILE_COMMANDS=1
A compile_commands.json
将在编译后出现在您的构建文件夹中。
如果你使用catkin工具,因为构建系统不同,构建后你会有一个运行一个脚本将个体compile_commands.json
合并为一个
See the issue here for script.
然后你可以重新启动VScode,它会在启动时提示你是否要使用它。如果它出于某种原因没有提示您,
基本上,步骤是:
- cakin_make -DCMAKE_EXPORT_COMPILE_COMMANDS=1
- 将 catkin_ws/build 中的 compile_commands 移动到您的 vscode 工作目录下,我通常将其放在 catkin_ws/src 下,个人喜好
- 将 vscode 指向您的编译命令。
ROS 从这里应该可以正常工作。
编辑:从另一个 post
中的答案添加了步骤我在使用 IntelliSense 和 ROS 时遇到问题。无论我做什么,它都不会搜索 ros
命名空间。所以我想将 cppStandard
(在文件 c_cpp_properties.json
中)更改为 gnu++11
(无论如何它仅适用于 IntelliSense)。它立即开始工作。
这是 cppStandard
设置为 gnu++14
的结果
这是 cppStandard
设置为 gnu++11
的结果
我什至尝试过 gnu++17
,但也收效甚微。看起来 gnu++11
效果最好。
我也尝试了 Richard 在
在文件 .vscode/c_cpp_properties.json
(由 VSCode ROS extension 生成)中,尝试将 "cppStandard": "gnu++14"
更改为 "cppStandard": "c++14"
。
ROS 正在使用 c++14 standard, so specifying gnu++14
seems to break things. This was deduced from this question。
存在关于此的 issue。