<<TableOfContents(4)>> == Goal == ''Configure a regular ros package to be ready for a mingw cross compile.'' Even if you're looking to create qt apps, this is still necessary if your msg/srv packages are kept separate (recommended). You may however want to skip to the [[mingw_cross/Tutorials/Mingw Packages|qt tutorial]] and come back to this one. == Create the Package == Set up your package as you would usually do for rosbuild1 somewhere in your source tree, e.g. {{{ > roscreate-pkg foo }}} Confirm that you can build natively (rosbuild1 style) with the usual `make` command. == Configuring for Rosbuild2 == The next step is to make the package rosbuild2 compatible. === Manifest === This involves adding a small excerpt to your `manifest.xml` which deals with: * ros package dependencies * system dependencies (rosdeps) * msg/srv exports An example (from [[qt_tutorials]]): {{{ <rosbuild2> <!-- private dependencies --> <depend package="qt_build"/> <!-- ros dependencies --> <depend package="roscpp"/> <depend package="std_msgs"/> <!-- system dependencies --> <rosdep name="qt4"/> <!-- msg/srv's --> <srvs>srv/TwoInts.srv</srvs> </rosbuild2> }}} === CMake === You'll need an alternative CMakeLists.txt for when your project detects rosbuild2. The usual method is to insert an alternative call at the top of your `CMakeLists.txt`: {{{ if(ROSBUILD) # This is the rosbuild2 path include(rosbuild.cmake OPTIONAL) return() endif() # CMake for rosbuild1 should follow this as normal. }}} In `rosbuild.cmake` put the rosbuild2 compatible cmake. Most of the function calls are essentially the same - the only really big difference is that msg and srv generation is no longer needed in the cmake itself - it's automatic. Most of the fundamental ros packages have this embedded already - browse the `CMakeLists.txt` and `rosbuild.cmake` in packages such as cpp_common, rostime, roscpp for examples. Keep in mind that the cmake for rosbuild2 is stored in the cmake stack, not rosbuild. == Building == If everything is all ok, you should be able to build a native version in the source tree (rosbuild1) {{{ > roscd foo > make }}} and a mingw compiled version in the rosbuild2 parallel build directory (refer to the [[mingw_cross/Tutorials/Mingw Build Environment|mingw build environment tutorial]]. {{{ > cd ~/mingwros/build > cmake . # cmake has to rerun to discover your new package > cd foo > make -j5 # -jx for number of parallel jobs }}}