解決VS Code下找不到ROS頭文件和無法自動(dòng)補(bǔ)全的問題

環(huán)境

  1. Ubuntu 18.04
  2. VS Code 插件: C/C++
  3. ROS Melodic
  4. gcc, clang(可選)

工作目錄

項(xiàng)目myproject文件夾位于~/catkin_ws/src/myproject, 關(guān)于ROS catkin_ws工作空間的創(chuàng)建可以參考這里.

步驟

1. 構(gòu)建并導(dǎo)出編譯命令
  1. 確保當(dāng)前.cpp源文件已被添加到項(xiàng)目文件夾下的CMakeLists.txt中,例如:

add_executable(node_name src/main.cpp)

如果有其它自定義頭文件路徑也可以一并設(shè)置,沒有的可以略過(注意ROS頭文件所在路徑不需要在這里指定):

target_include_directories(node_name PUBLIC ${PROJECT_SOURCE_DIR}/include)

  1. ~/catkin_ws/src/myproject下執(zhí)行下列命令導(dǎo)出編譯命令(myproject需要修改為自己的項(xiàng)目名,或者刪掉,構(gòu)建catkin_ws下的所有項(xiàng)目。

catkin build [myproject] -DCMAKE_EXPORT_COMPILE_COMMANDS=ON

或者,將set(CMAKE_EXPORT_COMPILE_COMMANDS ON)加入到自己項(xiàng)目文件的CMakeLists.txt文件中,然后執(zhí)行,這樣在每次構(gòu)建時(shí)都會(huì)自動(dòng)導(dǎo)出編譯命令。

catkin build [myproject]

構(gòu)建完成后,在~/catkin_ws/build/myproject/下會(huì)生成一個(gè)compile_commands.json文件,這個(gè)文件可以用來實(shí)現(xiàn)代碼的自動(dòng)補(bǔ)全功能.

2. VS Code 設(shè)置

在VS Code中 按下Ctrl+Shift+P打開主命令框,輸入 C/C++: Edit configurations (UI),打開配置C/C++的UI界面。滾到最下方,展開Advanced Settings,在Compile command設(shè)置中輸入如下內(nèi)容(myproject需要修改成工程文件夾名,或者直接輸入上一步生成的compile_commands.json文件的絕對(duì)路徑):

${workspaceFolder}/../../build/[myproject]/compile_commands.json

Screenshot from 2020-08-22 22-04-00.png
3. 重啟VS Code

重啟VS Code,或者Ctrl+Shift+P打開主命令框輸入 Developer: Reload Window

4. 效果

最終效果如下,可以看到頭文件可以被找到,并且可以給出自動(dòng)補(bǔ)全。(如果這一步仍然提示找不到頭文件,但是可以實(shí)現(xiàn)自動(dòng)補(bǔ)全,檢查一下是否有其它C++插件在工作,例如clangd, C++ Intellisense 等)


Screenshot from 2020-08-22 23-36-00.png

使用Clang提供自動(dòng)補(bǔ)全(可選)

Clang編譯器提供的自動(dòng)補(bǔ)全功能一般更友好一些,比如,如果上述步驟默認(rèn)采用gcc編譯器,ROS_INFO仍存在警告提示,而且不能自動(dòng)補(bǔ)全Ros::Rate等一些類,而Clang沒有這些問題。使用Clang編譯器的配置如下:


Screenshot from 2020-08-22 23-39-20.png

上面文件可以 Ctrl + Shift +P 輸入C/C++: Edit configurations (JSON)打開,注意這個(gè)文件和之前使用的C/C++: Edit configurations (UI) 是自動(dòng)同步的,修改一處即可。
沒有安裝Clang的話需要sudo apt install clang
注意:這些設(shè)置只保證自動(dòng)補(bǔ)全功能使用Clang編譯器,不會(huì)影響最終編譯時(shí)候所選擇的編譯器。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容