GPSTk Directory Structure

The core of the GPSTk is the library, and its source is located in the dev/src directory. This directory contains classes, algorithms, and data structures that are fundamental to GNSS processing. This the the heart of the GPSTk and contains the classes that serve as the foundation for developing GPS applications. The core library should compile on any system with a compiler that conforms to ISO-standard C++.

Often, however, the GPSTk contains code that could be useful in GNSS processing but do not fit this description. A number of such cases are present throughout the code base. The code could contain highly specialized algorithms or be related to the message format of a specific receiver. The code could require libraries or system functions that are broadly available but not part of the C++ standard. To preserve code of this nature while maintained the standardize nature of the base library, the GPSTk project isolates this type of code in the dev/lib directory which is know as the GPSTk auxiliary libraries.

Finally, the GPSTk project provides a number of applications that provide basic and advanced GPS processing. The GPSTk applications (which may be platform dependent) are organized in logical groupings in the dev/apps subdirectory. The GPSTk source directory structure is illustrated in the figure below. (Note that this is the structure in the Subversion repository. In a tar of a specific release, the dev directory is replaced by a release specific name like gpstk1.4.)

The guidelines for adding to the dev/lib and the dev/apps directory are similar. Anything that is related to GNSS is acceptable. The intent is to encourage experimentation and development of new ideas. No files are directly placed in dev/lib or dev/apps and subdirectories are created to group related items. Subdirectories can have dependencies upon third party libraries and platform specific extensions. These subdirectories of dev/lib may depend upon the core GPSTk library (in dev/src) but they may not depend upon anything in dev/apps. Subdirectories in dev/apps may depend on anything in the GPSTk. More importantly, nothing in the core GPSTk library may depend upon items in dev/lib or dev/apps. This last point is imperative to maintain the portability and broad support of the GPSTk core library.

While anything GNSS related can be added under the dev/lib or dev/apps directories, the same is not true of the build process. It should only include items that will generally compile. To facilitate compiling the items in the new directory, the build will recurse into dev/lib and dev/apps by default. Subdirectories that are listed in dev/lib or dev/apps Jamfile or Makefile.am will be built when the build is invoked from the dev directory. This also allows applications to be built and linked against the items under the dev/lib directory. While this guidance is somewhat vague, it does imply that the author is intending to keep the build from breaking under the common platforms that the GPSTk is used under (Solaris/gcc, Linux/gcc, OS X/gcc, Windows/Visual C++, and Windows/cygwin/gcc). While the default build process will not recurse into every directory in dev/lib and dev/apps, individual directories may be built and installed manually. This is how libraries and applications that are platform specific are built and installed.