環(huán)境
- Ubuntu 18.04
- VS Code 插件: C/C++
- ROS Melodic
- gcc, clang(可選)
工作目錄
項(xiàng)目myproject文件夾位于~/catkin_ws/src/myproject, 關(guān)于ROS catkin_ws工作空間的創(chuàng)建可以參考這里.
步驟
1. 構(gòu)建并導(dǎo)出編譯命令
- 確保當(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)
- 在
~/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

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 等)

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

上面文件可以 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í)候所選擇的編譯器。