[ros-users] Ros as a Build Environment

Daniel Stonier d.stonier at gmail.com
Fri Apr 2 10:43:44 UTC 2010

Hi all,

I don't know if other people are finding the same thing, but we're
finding the ros as a nice cmake enabled build environment...fullstop.
Quite apart from the robot specific, runtime capabilities it has,
we're currently using it to manage other projects that never actually
depend on roscpp (or the python variant).

One is a simple ubuntu .deb build farm using cmake/cpack. Another is
used to cross-compile and manage a group of libraries/programs for an
embedded product - the ros build environment takes care of
dependencies, cflags and linking automatically, which greatly reduces
management effort.

Are there many others having the same experience?

Which brings me to some points which seem a bit rough around the
edges, especially for cross-compiling. Or maybe I'm just attacking it
the wrong way. Either way, it would be good to hear some different
opinions about best practice.

1) When not depending on any ros package:

Running rosmake will still try and build some 13 extra packages
(roscpp, rosout, rostest, ...). Is there a reason for this? I can't
find any way around preventing them compiling apart from putting a
ROS_NOBUILD in each package directory.

2) What is the most convenient way to do something like a custom target?

Often I'd like to run a custom target built into some of our packages
with rosmake - e.g. for downloading, packaging or installation to
something like a cross-compiled filesystem root for an embedded board.
However, even if the custom target is specified in your packages,
they'll still run into problems when trying to compile those 13
packages (above).

3) Extracting Packages to be Installed

Another situation currently developing is one for which we're now
considering supporting multiple robots. Our list of packages is
getting rather large (not even including official ros stacks) and any
single robot's compile is usually managed by a simple meta-package.
With rosmake, life's great - it automatically does things so it only
compiles a small fraction of all installed packages. However, when it
comes time to set the system up on the robot, what's the usual
procedure? I don't wish to copy (if cross compiling) or rebuild the
whole development tree - that's an increasing amount of space being
taken up by unused packages. Secondly I really only need the binary
files - all those dev files take up alot of space. Thirdly, the other
option I can think of is having a very customised rosinstall for each
robot which seems a bit awkward - it's manually doing the job of
intelligently finding what's needed that rosmake is already doing.

One way to do it that I can think of would be to use a custom target
for install. However that has issues (above) and needs extra
consideration on how to standardise variables like install location,

Daniel Stonier.

Phone : +82-10-5400-3296 (010-5400-3296)
Home: http://snorriheim.dnsdojo.com/
Yujin Robot: http://www.yujinrobot.com/
Embedded Control Libraries: http://snorriheim.dnsdojo.com/redmine/wiki/ecl

More information about the ros-users mailing list