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

Is there a way to enable c++11 support for catkin packages?

asked 2014-04-12 08:40:40 -0600

INait gravatar image

updated 2014-04-12 08:40:52 -0600

I tried to use auto and lambda functions, but it isn't working by default.

And I wasn't able to find how to set compiler option -std=c++11.

Is there a way to do it?

edit retag flag offensive close merge delete

Comments

1

This is a very bad idea to use C++11 in ROS linked modules. There is no guarantee that C++03 and C++11 will stay ABI-compatible! It may break at anytime without prior notice because it only works ""by chance"" currently! http://stackoverflow.com/questions/12637699/c03-library-with-c11-source-code

Thomas gravatar image Thomas  ( 2014-04-14 22:16:52 -0600 )edit
1

I have had problems with C++11 and ROS in the past. If you have a robot with Ubuntu 12.04 preinstalled you are going to have a bad time using C++11, because the boost version in 12.04 is not compatible with C++11. I recommend using C++03 which is the standard: http://www.ros.org/reps/rep-0003.html

jespestana gravatar image jespestana  ( 2014-09-25 04:04:30 -0600 )edit

1 Answer

Sort by ยป oldest newest most voted
26

answered 2014-04-12 11:54:54 -0600

Hansg91 gravatar image

You should just be able to set the -std=c++11 flag in CMakeLists.txt of the package:

set(CMAKE_CXX_FLAGS "-std=c++0x ${CMAKE_CXX_FLAGS}")

If you want to enable it only when possible, I use this to do so:

# check c++11 / c++0x
include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)
if(COMPILER_SUPPORTS_CXX11)
    set(CMAKE_CXX_FLAGS "-std=c++11")
elseif(COMPILER_SUPPORTS_CXX0X)
    set(CMAKE_CXX_FLAGS "-std=c++0x")
else()
    message(FATAL_ERROR "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.")
endif()

If you don't want to stop when 11 or 0x is not detected, simply comment out those lines.

edit flag offensive delete link more

Comments

3

This is cool for local/experimental development, but do note that the catkin CMake style guide forbids altering CMAKE_CXX_FLAGS, cf. http://docs.ros.org/hydro/api/catkin/html/user_guide/standards.html .

mikepurvis gravatar image mikepurvis  ( 2014-04-12 13:18:23 -0600 )edit
2

The target platform for Hydro and Indigo is C++03, as noted here: http://www.ros.org/reps/rep-0003.html .

mikepurvis gravatar image mikepurvis  ( 2014-04-12 13:19:45 -0600 )edit

Great, thanks!

INait gravatar image INait  ( 2014-04-12 20:32:15 -0600 )edit

Is there a way to add this flag for an individual file and not the entire project?

vik748 gravatar image vik748  ( 2017-07-10 14:04:48 -0600 )edit

Question Tools

2 followers

Stats

Asked: 2014-04-12 08:40:40 -0600

Seen: 16,847 times

Last updated: Apr 12 '14