Skip to content

Instantly share code, notes, and snippets.

@rotu
Last active April 30, 2024 16:24
Show Gist options
  • Star 29 You must be signed in to star a gist
  • Fork 11 You must be signed in to fork a gist
  • Save rotu/1eac858b808b82bbf1b475f515e91636 to your computer and use it in GitHub Desktop.
Save rotu/1eac858b808b82bbf1b475f515e91636 to your computer and use it in GitHub Desktop.
CLion top level ROS2 Workspace CMakeLists
cmake_minimum_required(VERSION 3.14)
project("ROS2 Master")
# usually I put this in a separate file include("/opt/ros/_common/Colcon.cmake")
function(colcon_add_subdirectories)
cmake_parse_arguments(PARSE_ARGV 0 "ARG" "" "BUILD_BASE;BASE_PATHS" "")
message("search criteria: ${ARGV}")
execute_process(COMMAND colcon list
--paths-only
--base-paths ${ARG_BASE_PATHS}
--topological-order
${ARG_UNPARSED_ARGUMENTS}
OUTPUT_VARIABLE paths)
string(STRIP "${paths}" paths)
string(REPLACE "\n" ";" paths "${paths}")
MESSAGE("colcon shows paths ${paths}")
foreach(path IN LISTS paths)
message("...examining ${path}")
# if(EXISTS "${path}/CMakeLists.txt")
execute_process(COMMAND colcon info --paths "${path}" OUTPUT_VARIABLE package_info)
if(NOT "${package_info}" MATCHES "type:[ \t]+(cmake|ros.ament_cmake|ros.cmake)")
message("skipping non-cmake project")
elseif(NOT "${package_info}" MATCHES "name:[ \t]+([^ \r\n\t]*)")
message(WARNING "could not identify package at ${path}")
else()
set(name "${CMAKE_MATCH_1}")
message("...adding package ${name} from path ${path}")
MESSAGE("package info: ${package_info}")
get_filename_component(BUILD_PATH "${name}" ABSOLUTE BASE_DIR "${ARG_BUILD_BASE}")
add_subdirectory("${path}" "${BUILD_PATH}")
endif()
endforeach()
endfunction()
colcon_add_subdirectories(
BUILD_BASE "${PROJECT_SOURCE_DIR}/build"
BASE_PATHS "${PROJECT_SOURCE_DIR}/src/"
--packages-select rmw_cyclonedds_cpp performance_test
)
@rotu
Copy link
Author

rotu commented Jan 23, 2023

@Catially I have not been actively working with ROS for some time, so I unfortunately can’t help

@guru-florida
Copy link

@Catially This is a pretty standard error for when GCC isn't aware of where the Ros2 core libraries are. This script will find your source code but it doesnt add the ros2 core libs to gcc builds. Through Jetbrains File | Settings | Build menu you can manually add libs or the easiest way is to source the ros core setup.py then launch clion from the same shell. Thus ros core libs will already be in the build env paths.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment