I've actually been using pkg-config from the exports with ParseConfig. If catkin provides pkg-config support this sounds even easier than extracting manifest exports. Thanks! On 01/17/2013 03:21 PM, Eric Perko wrote: > 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 > > 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 > >