scons does have support for automatically grabbing the appropriate include and link flags from pkg-config. See http://www.scons.org/wiki/UsingPkgConfig (specifically the ParseConfig command). I've not tried it with packages built via catkin, but I have used it successfully with e.g. PCL. - Eric On Thu, Jan 17, 2013 at 4:16 PM, William Woodall wrote: > Catkin also provides CMake find_package infrastructure and pkg-config > infrastructure for each package. I would think scons would support getting > build flags from pkg-config given its popularity in many dev libraries. > That is likely easier than extracting them from CMake and probably the > easiest method in general. > > -- > > > On Thu, Jan 17, 2013 at 12:59 PM, Brian Wightman < > brian.j.wightman@nasa.gov> wrote: > >> In rosbuild I was able to use rospkg to grab all of the [cflags, lflags] >> exports out of a given package's manifest. Is there a plan to add this >> functionality for catkin packages? >> >> My use-case may sound a bit odd: >> >> I have been using scons rather than cmake to build packages. The rospkg >> manifest.xml parsing makes this rather painless (20 lines of python to >> collect all the build flags). Now with the "exports" buried in cmake files, >> I don't have a convenient way to access them. >> >> In particular, I have code that forwards ROS messages between systems >> with separate roscore instances. I have to compile in a >> publisher/subscriber call for each message type so I've found it convenient >> to auto-generate the HPP/CPP files from a list of message-containing >> packages (std_msgs, sensor_msgs, etc.) using Python and rospkg. >> >> If anyone's curious, here's the scons build code I've been using: >> >> import os, rospkg >> def load_ros_deps(env): >> pkg_name = os.path.basename(Dir('.').**srcnode().abspath) >> depends = [] >> for d in map(repr, rospkg.RosPack().get_manifest(** >> pkg_name).depends): >> depends.append(d) >> # load exports >> manifest = rospkg.RosPack().get_manifest(**d) >> for f in [j for j in [manifest.get_export('cpp', i) for i in >> ['cflags', 'lflags']] if j]: >> allf = f[0].split('`') >> for conf in allf[1::2]: >> env.ParseConfig(conf) >> env.MergeFlags(env.ParseFlags(**' '.join(allf[0::2]))) >> pkg_path = os.path.dirname(manifest.**filename) >> msg_path = os.path.join(pkg_path, 'msg_gen', 'cpp', 'include') >> if os.path.exists(msg_path): >> env.MergeFlags(env.ParseFlags(**'-I{}'.format(msg_path))) >> >> env = Environment( >> ENV = {'PYTHONPATH': os.environ['PYTHONPATH'], # allow us to call >> rosboost-cfg >> 'PKG_CONFIG_PATH': os.environ['PKG_CONFIG_PATH']}**, >> ... >> ) >> >> Certainly I can achieve the same thing with CMake, but I find scons to be >> much nicer to work with. >> >> Thanks, >> Brian Wightman >> ______________________________**_________________ >> ros-users mailing list >> ros-users@code.ros.org >> https://code.ros.org/mailman/**listinfo/ros-users >> > > > > -- > William Woodall > Willow Garage - Software Engineer > wwoodall@willowgarage.com > > _______________________________________________ > ros-users mailing list > ros-users@code.ros.org > https://code.ros.org/mailman/listinfo/ros-users > >