DiX*_*uli 14 c++ intellisense autocomplete ros visual-studio-code
我正在努力使用 ROS 配置 VSCode 以具有自动完成功能。我习惯于在 Qt 和 OpenCV 中使用 VSCode,一切正常。例如,对于 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
Run Code Online (Sandbox Code Playgroud)
}
OpenCV 的自动完成工作正常(我有C++ IntelliSense 扩展)。但后来,当我试图指定include从ROS在文件夹中c_cpp_propreties.json,没有什么作品了,甚至没有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
Run Code Online (Sandbox Code Playgroud)
}
就像 ROS 正在阻止一切。我究竟做错了什么?我指定在 VSCode 中单击“打开文件夹”并浏览 ROS 包以加载它。我正在使用 Ubuntu 18.04 LTS。
您需要生成compile_commands.json并将其放入您的vscode工作目录中。该文件将告诉 vscode linter 去哪里查找。如果您创建新文件或 CMakeLists.txt 中的编译指令发生更改(即新库),则需要重新生成此文件
\n我制作了一个YouTube 视频来演示这个
\n我还在 reddit 上的类似帖子中回答了这个问题:有谁让 Visual Studio 能够与 ROS 正常工作吗?。我在下面添加了我为此写的答案;
\n如果你使用catkin_make,当你编译时,
\ncakin_make -DCMAKE_EXPORT_COMPILE_COMMANDS=1
compile_commands.json编译后,A将出现在您的构建文件夹中。
如果您使用catkin工具,由于构建系统不同,您将在构建后运行一个脚本以将个体合并compile_commands.json为一个
然后你可以重新启动VScode,它启动时会提示你是否要使用它。如果由于某种原因它没有提示您,
\n\n\n在配置 UI 的“高级”部分中,您可以提供 \xc2\xa0compile_commands.json\xc2\xa0 的路径,并且扩展将使用该文件中列出的编译信息来配置 IntelliSense。
\n
基本上,步骤是:
\nROS 从这里应该可以正常工作。
\n编辑:添加了另一篇文章中答案的步骤
\n我在 ROS 中使用 IntelliSense 时遇到了问题。ros无论我做什么,它都不会搜索名称空间。所以我想将cppStandard(在文件中c_cpp_properties.json)更改为gnu++11(无论如何它仅适用于 IntelliSense)。它立即开始工作。
我什至尝试过gnu++17,但这也取得了有限的成功。看起来gnu++11效果最好。
我也尝试了理查德在他的回答中所说的话。它无需更改任何其他内容即可工作。