Pre- and Post-installation Disk Layout reference

Source directory

This page describes the intended layout of build and install folders, in particular with respect to the Filesystem Hierarchy standard (FHS).

e.g. for package ‘pkg’:

src/
   pkg/
      CMakeLists.txt
      package.xml  # contains inter-package and system dependencies
                   # as specified in `REP 127 <http://www.ros.org/reps/rep-0127.html>`_

      include/
         pkg/
            header.hpp
            otherheader.hpp
      msg/
         PkgMsg.msg
      src/
         pkg/
            __init__.py
            module.py

            CMakeLists.txt
            source.cpp
      srv/
         PkgSrv.srv

Todo

Mention what happens with a manifest.xml file for backward compatibility with rosbuild

Build directory

build/
   CATKIN_IGNORE               # an empty file to guide catkin to not search in subfolders for package.xml files
   CMakeCache.txt
   cmake_install.cmake
   Makefile

   devel/                      # the layout of that folder follows the (see install directory)

      .catkin                  # identifies folder as a catkin devel/install space
                               # it contains a semicolon separated list of source folders if the workspace is a devel space
      env.sh
      setup.bash
      setup.sh
      setup.zsh
      _setup_util.py           # functions for the setup shell scripts

      bin/                     # just "anointed" central binaries (i.e. rosrun)

      etc/                     # environment hooks, configuration files
         catkin/
            profile.d/
               10.ros.sh       # e.g. defining the ROS_MASTER_URI
         langs/                # to determine which message generators are available
            roscpp             # contains "C++"
            rospy              # contains "Python"

      include/                 # header files of generated code

      lib/                     # all compiled libraries go here
         pkgconfig/            # generated .pc files for all packages
         pythonX.Y/
            dist-packages/
               pkg/            # generated Python code
                  __init__.py  # generated file to relay imports into src directory of that package
         pkg/                  # compiled binaries of that package

      share/                   # all package-specific but architecture independent files
         pkg/                  # one folder per package
            cmake/             # generated pkgConfig.cmake and pkgConfig-version.cmake for find_package()

   CMakeFiles/


   pkgN/                       # the usual CMake-generated stuff
      catkin_generated/        # files generated by catkin
      cmake/
      CMakeFiles
      cmake_install.cmake
      installspace/            # files generated by catkin which will be installed
      Makefile
      ...

Install directory

The layout of the install directory follows the Filesystem Hierarchy Standard (FHS).

/opt/ros/groovy/           # defined by the CMAKE_INSTALL_PREFIX
                           # very similar to the devel space folder
                           # therefore in the following only the differences are mentioned

   .catkin                 # identifies folder as a catkin devel/install space
                           # the file is empty which indicates that it is an installspace

   lib/
      pythonX.Y/
         dist-packages/
            pkg/           # besides the generated Python code
                           # contains the Python source code of package

   include/                # besides the generated header files
                           # contains all header files from the source directories

   share/
      pkg/                 # further resources (i.e. icons) copied from source directory
         manifest.xml      # provide export information for legacy rosmake based stacks/packages
         action/
         msg/
            Foo.msg
            Bar.msg
         something.launch  # the rest is as the package installs it

   stacks/
      dry_stack1           # packages built via legacy rosmake
      dry_stack2           # packages built via legacy rosmake