YARP
Yet Another Robot Platform
How to install files for the ResourceFinder

Introduction

In previous tutorials (The ResourceFinder Class (basic) and The ResourceFinder Class (advanced)) we showed how you can employ the yarp::os::ResourceFinder to locate files on your machine. In those tutorials, the files were manually created inside the user's "local" directory; here, we show how to install those files within a project, so that you can provide default configuration files for modules or even complete applications.

Files to be installed

The module from The ResourceFinder Class (basic) required the "robot","part", and "joint" initialization parameters. Default values were provided in a file config.ini:

robot icub
part head
joint 0

We saved this file into a subdirectory of our source tree; we chose the "randomMotion" subdirectory, in our <YARP_SOURCE_CODE>/examples/resourceFinder directory.

We defined a default initialization context, i.e., "randomMotion", for the module to locate files; this means that in the source code, the ResourceFinder was configured like this:

ResourceFinder rf;
rf.setDefaultConfigFile("config.ini");
rf.setDefaultContext("randomMotion");
rf.configure(argc, argv);

We'll see now how to setup installation rules so that after compilation the configuration files for the module will be available without manual copies.

CMake to the rescue

The minimal CMake file that allows to build our tutorial modules is this (this CMake file actually builds the two Resource Finder tutorials):

cmake_minimum_required(VERSION 3.12)
project(resourceFinder)
find_package(YARP REQUIRED COMPONENTS os)
add_executable(rf_basic)
target_sources(rf_basic PRIVATE tutorial_rf_basic.cpp)
target_link_libraries(rf_basic PRIVATE YARP::YARP_os YARP::YARP_init)
add_executable(rf_advanced)
target_sources(rf_advanced PRIVATE tutorial_rf_advanced.cpp)
target_link_libraries(rf_advanced PRIVATE YARP::YARP_os YARP::YARP_init)

The yarp_install macro is loaded automatically with find_package(YARP):

Now, we add:

set(conf randomMotion/config.ini)

to tell CMake which files to install, and

yarp_install(FILES ${conf} DESTINATION ${YARP_CONTEXTS_INSTALL_DIR}/randomMotion)

to tell CMake where to install those files.

Notes

Keep in mind that the ${YARP_CONTEXTS_INSTALL_DIR} variable expands to a relative path that will be appended to the installation prefix chosen by the user; the user should be warned to use the same installation directory as YARP, or to configure their system as explained 3rd party packages (for developers) here.

Remember that you can always inspect the state of contexts on your machine, and customize installed configuration files, using the yarp-config: the yarp-config tool utility.

Code

See code in: example/resourceFinder/CMakeLists.txt