Basic Tools

In order to ease certain tasks, the BASIS package also includes the following command-line tools:

basisproject Creates a new project or modifies an existing one in order to add or remove certain components of the template or to upgrade to a newer template.
basistest Implements automated software tests.
doxyfilter Doxygen filter for all supported languages.

CMake Modules

The CMake modules and corresponding auxiliary files are used by any BASIS project for the configuration of the CMake-based build system, so that many setup steps can be automated. These commands often replace the standard CMake commands. For example, the CMake function basis_add_executable() replaces CMake’s add_executable() command.

The main CMake modules are:

BasisProject.cmake File in every BASIS project defining basic project information.
BasisTools.cmake Defines CMake functions, macros, and variables.
BasisTest.cmake Replacement for the CTest.cmake module of CMake.
BasisPack.cmake Replacement for the CPack.cmake module of CMake.


For each supported programming language, BASIS provides a library of utility functions. Some of these utilities are project independent and thus built and installed as part of the CMake BASIS package itself. Other utility implementations are project dependent. Therefore, the BASIS installation contains only template files which are customized and built during the configuration and build, respectively, of the particular BASIS project. This customization is done by the functions implemented by the UtilitiesTools.cmake module which is included and utilized by the main BasisTools.cmake module.

The BASIS utilities address the following aspects of the software implementation standard:

Project Layout

A brief summary of the common project layout required by all projects that follow BASIS is given below. Project templates are supplied by the BASIS package to make it easy for projects to follow this BASIS Project Directory Layout and standard Project Template. How to create and use such template is explained in the Using and Customizing Templates guide. The basisproject command-line tool further automates and simplifies the creation of new projects based on a project template.

config/ Package configuration files.
data/ Data files required by the software.
doc/ Documentation source files.
example/ Example files for users to try out the software.
include/ Header files of the public API of libraries.
lib/ Module files for scripting languages.
modules/ Project Modules (i.e., subprojects).
src/ Source code files.
test/ Implementations of unit and regression tests.
AUTHORS (.txt|.md) A list of the people who contributed to this sofware.
BasisProject.cmake Calls basis_project() to set basic project information.
CMakeLists.txt Root CMake configuration file.
COPYING (.txt|.md) The copyright and license notices.
INSTALL (.txt|.md) Build and installation instructions.
README (.txt|.md) Basic summary and references to the documentation.

See also

The Project Template for a complete list of required and other standard project files. The CMake BASIS Package itself also serves as an example of a project following this standard layout.


Not all of the named subdirectories must exist in every project.