ivp-extend
We start in the ivp-extend directory of the hovergroup svn. The svn can be viewed or checked out by anyone at https://code.google.com/p/hovergroup/.
↓hovergroup ↓ivp-extend →base →josh →missions →trunk
The missions
directory contains all of the configuration files used to run a MOOS mission on the vehicles. For more information check out Mission File Organization. Ignore the project_files
directories and any files located immediately in the ivp-extend
directory.
The remaining directories are all for source code. trunk
contains the majority of the hovergroup applications and libraries. Individuals also have their own directories for programs that are specific to their experiments. The base
directory can be copied and renamed to create new individual directories.
ivp-extend -> base
Let's look at the basic structure of one of these directories.
↓hovergroup ↓ivp-extend ↓base →bin →build →data →docs →lib →missions →scripts →src build_proto.sh CMakeLists.txt
Here's what you should know:
bin
- Where built executables are placed.
data
- If you need to associate some sort of data file with your program that doesn't depend on the mission, this might be the place for it.
docs
- For documentation, though usually the wiki is preferred.
lib
- Where built libraries are placed.
missions
- You can use this directory for testing mission files, but actual missions should use the ivp-extend/missions
directory.
scripts
- For command line scripts, which we'll come back to.
src
- The source code itself.
build_proto.sh
and CMakeLists.txt
are both part of the build process, which we'll also come back to.
Within the src
directory you'll see that each library or application has its own folder, and within those folder are header and source files. Folders for libraries are prefixed with lib_
. Almost every folder also contains a CMakeLists.txt
.
Building
Let's switch to ivp-extend/trunk
now to look at how the code gets built. make
is responsible for building the c++ source code into an executable, but it needs a Makefile
to tell it what to do. We use cmake
to create these Makefiles
.
Cmake is run in the top directory (ivp-extend/trunk
) using the command
cmake .
or
ccmake .
if you need a user interface. It drills down through the source tree looking at every CMakeLists.txt
file on the way. The CMake files at different levels do different things:
ivp-extend/trunk/CMakeLists.txt
- This is the most complicated file, responsible for finding various dependencies. Typically you should not need to change this file.
ivp-extend/trunk/src/CMakeLists.txt
- This file simply tells cmake which directories to look in. You'll need to add a line here for each new program or library.
ivp-extend/trunk/src/iHoverKayak/CmakeLists.txt
- The last level contains instructions for how to build that specific application or library. Any libraries your program needs to link must be defined here.
Running cmake will create some new files and directories as well as the makefiles. Once you've run cmake you can simply run make
to build everything. None of the files created by cmake or make should be added to the svn.