MRPT libraries tree layout
Note
This page describes the internal structure of MRPT sources, which is intended for MRPT developers/contributors. More often, users will be interested in writing their own programs that use MRPT, as described here:
1. Tree overview
The MRPT source tree looks like this:
MRPT
apps: Applications
libs: C++ libraries
…
The part of interest here is the “libs” directory, where there are a number of libraries or modules, all with a common structure, which is described here.
2. Name
The name of all the libraries must be “mrpt-<name>”, where <name> is a lowercase word describing the module. Examples are “slam”, “math”, or “vision”. Note that the directories under “MRPT/libs/” are named “<name>”, not “mrpt-<name>”, while the library itself to be generated after building will be mrpt-<name>.dll (or .so for UNIX systems).
3. Tree outline
Each “module” mrpt-<name> must have, at least, these files and directories:
MRPT
libs: C++ libraries
name
src
``precomp_hdr.cpp``(This file must only contain a: ``#include <mrpt/name.h> ``)
registerAllClasses.cpp (optional: used to register all ```CSerializable`` <http://www.mrpt.org/tutorials/programming/serialization/>`__objects so they can be de-serialized without knowing their type in advance)
(the rest of source files)
include
CMakeLists.txt
For template contents for each of the required files, please take a look
at some of the simplest libraries, like mrpt-topography
under MRPT/libs/topography
. Note that this structure keeps the
header files of each library separately, so the user of MRPT must
specify the dependencies in his/her CMake configuration file, as
described here: Using MRPT in your CMake project
4. The CMakeLists.txt file
If there are no complex conditional compiling options or any other
complications, declaring an MRPT library is as simple as writing just
the following in its CMakeListst.txt
file:
#---------------------------------------------
# Macro declared in "DeclareMRPTLib.cmake":
#---------------------------------------------
define_mrpt_lib(
# Lib name
name
# Dependencies
mrpt-math
....
)
Notice that files matching the patterns *_LIN.cpp
and *_WIN.cpp
are
automatically ignored when building under Windows or Linux/MacOS, respectively.
For the usage of more advanced features, please refer to DeclareMRPTLib.cmake or
the scripts for the existing libraries.
5. Unit testing
The MRPT CMake scripts automatically recognize those files under the src
directory with the pattern *_unittest.cpp
as files for unit testing.
MRPT uses the Google’s gtest library to perform these tests.
To see how to invoke the regular unit tests, or how to run them automatically
under gdb
or valgrind
, see: Unit testing in MRPT.
Note that the *_unittest.cpp
files are not included in the “mrpt-<name>”
library, but a new target test-<name>
is automatically created which is
invoked when doing make test
or make test_legacy
.
A typical content of a unit testing file is (see existing tests for more examples):
#include <mrpt/slam.h>
#include <gtest/gtest.h>
TEST(MyTestCaseName, ThisTestName)
{
double err;
// Do whatever...
EXPECT_EQ(0, err ) << "Differences were found when checking ...\n";
}