ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange
Ask Your Question

Including ros into scons project

asked 2018-08-22 14:40:30 -0500

alsora gravatar image

updated 2018-08-23 13:38:07 -0500


I have built ros from sources (specifically ros2 bouncy bolson). The result is that I have a workspace containing all the header and lib files.

Now I would like to write a ros node inside a project which is built using Scons. How should I include and link properly all the required stuffs?

My program is just an hello world which includes the C++ client library

#include <iostream>
#include "rclcpp/rclcpp.hpp"

int main(int argc, char* argv[])
  std::cout<<"Hello World!"<<std::endl;
  return 0;

Sconstruct file

 env = Environment()
 env.Append(CXXFLAGS = ['-std=c++14'])
 env.Append(CPPPATH = ['<PATH_TO_ROS2_WS>/install/rclcpp/include', .....])
 env.Append(LIB_PATH=['<PATH_TO_ROS2_WS>/install/rclcpp/lib', ....])
 env.Program("hello_ros", ["hello_ros.cpp"])

I tried to manually append one by one to the environment the path to ROS2 include dirs and library locations.

UPDATE: I was getting an error due to the CXXFLAGS set to c++11, ROS2 requires C++14.

Is there a way to let Scons find the ROS2 include and library files, instead of having to manually specify them (they are a lot if I'm not using the --merge-install flag during the ros2 build)?


edit retag flag offensive close merge delete


When you say nothing is working, can you paste the error message? I guess it is a linkage error but maybe it is something different. You will need to include all libraries/includes from ROS2 (at least the one that RCLCPP depends on).

pokitoz gravatar image pokitoz  ( 2018-08-23 11:40:29 -0500 )edit

Hi, thanks for your help but I solved that error. I have still an issue due to the fact that I have to manually specify all the lib and include paths (they are a lot if I'm not using the --merge-install flag during the ros2 build)

alsora gravatar image alsora  ( 2018-08-23 12:34:27 -0500 )edit

I don't think there is another solution to adding all the lib/include paths to your build. (unfortunately :D)

pokitoz gravatar image pokitoz  ( 2018-08-24 05:27:28 -0500 )edit

1 Answer

Sort by ยป oldest newest most voted

answered 2018-08-24 11:20:25 -0500

Dirk Thomas gravatar image

I have no knowledge about scons, but the following might be helpful whatever you want to integrate ROS 2 packages into:

ament_cmake packages automatically generate CMake config files. You can query the information provided by those through the CMake command line tool.

The compiler arguments required to build against a specific ROS 2 can be queries with:


The linker arguments can be retrieved with a similar command:


If you depend on multiple package you will have to query the arguments for each of them.

edit flag offensive delete link more


Thanks! However it works with other packages (i.e. boost), but with rclcpp I get an error: Generator implementation error, all generators must specify this->FindMakeProgramFile CMake was unable to find a build program corresponding to "Generic" CMAKE_MAKE_PROGRAM is not set

alsora gravatar image alsora  ( 2018-08-24 11:36:48 -0500 )edit

The posted command lines do work for me on Ubuntu Bionic with a locally built workspace (haven't tried any other combinations but would expect them to work too).

Dirk Thomas gravatar image Dirk Thomas  ( 2018-08-24 11:38:43 -0500 )edit

Ok thank you. I tested it on a Bionic Docker container and it works. The error is on Ubuntu Xenial

alsora gravatar image alsora  ( 2018-08-24 11:47:12 -0500 )edit

Question Tools



Asked: 2018-08-22 14:40:30 -0500

Seen: 321 times

Last updated: Aug 24 '18