I have now also found a way to load a whole ROS2 workspace into Clion. At least code browsing is now made easy.
a) You first need to compile ros_ws with ament: https://github.com/ros2/ros2/wiki/Linux-Development-Setup.
b) Second you need to prepare you top level CMakeLists.txt file:
- cd ros_ws
- find src -name CMakeLists.txt -not -name setup.py -print0 | xargs -0 -n1 dirname | sort --unique
- after I manually removed all fastRTPS subfolders and test subfolders
- I also skipped all ament_* folders
- I used emacs to replace ./ with add_subdirectory and to add ) at the end of every line (replace-string, C-q C-j)
c) Put this CMakeLists.txt into your ros_ws.
d) Comment out the following line in ament_cmake_core/ament_cmake_uninstall_target-extras.cmake:
=== ./src/ament/ament_cmake (git) ===
diff --git a/ament_cmake_core/ament_cmake_uninstall_target-extras.cmake b/ament_cmake_core/ament_cmake_uninstall_target-extras.cmake
index f6805e8..c89f289 100644
--- a/ament_cmake_core/ament_cmake_uninstall_target-extras.cmake
+++ b/ament_cmake_core/ament_cmake_uninstall_target-extras.cmake
@@ -32,6 +32,6 @@ if(AMENT_CMAKE_UNINSTALL_TARGET)
)
# register uninstall target to run generated CMake script
- add_custom_target(uninstall
- COMMAND ${CMAKE_COMMAND} -P "${AMENT_CMAKE_UNINSTALL_TARGET_UNINSTALL_SCRIPT}")
+# add_custom_target(uninstall
+# COMMAND ${CMAKE_COMMAND} -P "${AMENT_CMAKE_UNINSTALL_TARGET_UNINSTALL_SCRIPT}")
endif()
e)
$ source ~/ros_ws/build/rclcpp/cmake__build.sh #this will setup your environment
$ clion # go to File => Open => ~/ros2_ws/CMakeLists.txt => click OK
f)
Disable BUILD_TESTING:
In Clion File => Settings => Build, Execution, Deployment => CMake => Cmake options: -DBUILD_TESTING=OFF
g)
You can right click on the Clion project => Reload CMake Project. There will be some warnings about missing OpenSplice dependecies which you can safely ignore.