🤖
Introduction to ROS2 and Robotics
  • Introduction
  • ROS2
    • Index
    • IDE and CMake Setup
      • How to add additional include search path
    • ROS2 Building Blocks
      • ROS Workspace and Package Layout
      • Launch File
      • tf2
      • Quality of Service
      • Configurations
        • Rviz Configuration
      • Built-in Types
        • Built-in Message Type
    • ROS Architecture
      • Intra-process Communication
    • Navigation and Planning
      • Navigation Stack and Concepts
      • Navigation2 Implementation Overview
        • 🏗️Cost Map
        • Obstacle Avoidance and DWB Controller
      • DWB Controller
      • Page 5
    • How to launch the Nav2 stack
    • ROS2 Control
      • Online Resources
      • Overview of Codebase
    • 🍳Cookbook
      • Useful Commands
      • How to specify parameters
      • How to build the workspace
      • 🏗️How to publish message to a topic from command line?
      • How to inspect service and make a service call
      • How to properly terminate ROS and Gazebo
      • How to add and remove models in Gazebo simulation dynamically
      • 🚧How to spin nodes
    • 🛒Tutorials
      • Services and Communication between ROS2 and Gazebo
      • Subscription and Message Filters Demo
      • Executor and Spin Explained
      • Lifecycle Node Demo
      • Robotic Arm Demo
      • ⚒️Multiple Robotic Arms Simulation Demo
      • 🚧Introduction to xacro
    • Page
    • 🍺Tech Blog
      • Difference between URDF and SDF and how to convert
  • Gazebo
    • Index
    • Terminology
    • GUI
    • World Frame and Axis
    • Cookbook
    • Page 1
  • Programming in Robotics
    • C++
      • CMake
    • Python
    • Rust
  • Mathematics in Robotics
    • Linear Algebra
    • Matrix Properties
    • Probability
      • Expectation-Maximization Algorithm
    • Multivariable Function and Derivatives
  • Physics in Robotics
  • Control of Dynamic Systems
    • Dynamic Response and Transfer Function
    • Block Diagram
    • PID Controller
  • Robot Modeling and Control
    • Rotation and Homogeneous Transformation
  • Probabilistic Robotics
    • Bayes Filter
    • Kalman Filter
    • Particle Filter
    • Discrete Bayes Filter
    • Motion Model
    • Perception Model
    • Localization
    • SLAM
  • Miscellany
  • Concept Index
    • Quaternions
Powered by GitBook
On this page
  1. ROS2
  2. IDE and CMake Setup

How to add additional include search path

PreviousIDE and CMake SetupNextROS2 Building Blocks

Last updated 1 year ago

When working on ROS2 projects in an IDE (e.g. Clion), it is important to understand that there are two build systems involved.

  • IDE's Build System: The IDE uses CmakeLists.txt file in each ROS2 project to resolve paths and variables.

  • ROS2's Build System: This is the build system used by ROS2 when you build the ROS2 workspace in the terminal. For instance, in ROS2 Humble, colcon command is used to build the package and ament commands are used in the CmakeLists.txt file.

Successfully building a ROS2 workspace in the terminal does not guarantee that the IDE will resolve all paths and variables. This issue becomes more apparent with custom message and service files, where the IDE might fail to locate certain header files.

To address this issue, we can add additional include search paths. However, it's crucial not to modify the CMakeLists.txt file directly to avoid introducing changes that could affect the ROS2 build system and lead to confusion. Instead, we should adjust the CMake configuration within the IDE by adding the following CMake option:

-DCMAKE_CXX_FLAGS="-I <additional-include-path>"

For example, in Clion, we can add this in Settings > Build, Execution, Deployment > Cmake > CMake options.