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 (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.