C++ 带ROS的VScode设置和自动完成
我正在努力用ROS配置VSCode,使其具有自动完成功能。 我习惯于将VSCode与Qt和OpenCV一起使用,一切都很好。 例如,对于OpenCV,我刚刚编辑了C++ 带ROS的VScode设置和自动完成,c++,visual-studio-code,autocomplete,intellisense,ros,C++,Visual Studio Code,Autocomplete,Intellisense,Ros,我正在努力用ROS配置VSCode,使其具有自动完成功能。 我习惯于将VSCode与Qt和OpenCV一起使用,一切都很好。 例如,对于OpenCV,我刚刚编辑了c_cpp_propreties.json,如下所示: { "configurations": [ { "name": "Linux", "includePath": [ "${wor
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++智能感知扩展)。 但是,一旦我试图在
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
}
好像罗斯在封锁一切。我做错了什么?我指定在VSCode中单击“打开文件夹”,并浏览ROS包以加载它。
我正在使用Ubuntu18.04 LTS。您需要生成compile_commands.json并将其放在您的vscode工作目录中。该文件将告诉vscode linter在哪里查找。如果在CMakeLists.txt中创建新文件或编译指令发生更改(即新库),则需要重新生成 我做了一个演示 我也在reddit上的类似帖子中回答了这个问题:。我在下面添加了我为此写的答案 如果使用catkin_make,编译时
cakin\u make-DCMAKE\u EXPORT\u COMPILE\u COMMANDS=1
编译后,compile\u commands.json
将出现在构建文件夹中
如果您使用catkin工具,因为构建系统不同,您将需要在构建后运行脚本,以将各个compile\u命令.json
合并为一个脚本
然后,您可以重新启动VScode,它会提示您,并在启动时询问您是否要使用它。如果它没有出于任何原因提示你
基本上,这些步骤是:
编辑:添加了另一篇文章中答案的步骤我在将IntelliSense与ROS一起使用时遇到问题。无论我做了什么,它都不会搜索
ros
名称空间。因此,我考虑将cpp标准
(在文件c\u cpp\u properties.json
)更改为gnu++11
(无论如何,它只适用于IntelliSense)。它立即开始工作
以下是cppStandard
设置为gnu++14
以下是cppStandard
设置为gnu++11
我甚至尝试过gnu++17
,但这也只能取得有限的成功。看起来gnu++11
工作得最好
我也试过Richard在书中说的话。它无需更改任何其他内容即可工作。在文件
.vscode/c_cpp_properties.json
(由生成)中,尝试从“cppStandard”:“gnu++14”
更改为“cppStandard”:“c++14”
ROS正在使用,因此指定gnu++14
似乎会破坏一切。这是从中推断出来的
关于这件事有一个新的消息。你有什么消息吗?我也在试着让它工作?ROS扩展没有完全解决这个问题。欢迎链接到解决方案,但请确保没有它,您的答案是有用的。答案只不过是一个链接。嗨。如果我有,让我们说
ros::NodeHandle n
然后我希望我的自动完成功能n.
找到我的n
相关方法、属性等。我该怎么做?我提到我在ubuntu上使用VScode,安装了autocomplete插件,还安装了ROS插件。目前我只收到n.
->没有任何建议。还有,将vscode指向编译命令是什么意思。
这是什么?如果您按照视频中显示的步骤进行操作,您应该自动完成n
将vscode指向编译命令
指执行然后可以重新启动vscode,它会提示你…
你是个巫师,老实说,这是黑魔法:P