/**
\page NewModulePage How to create a new MITK Module

\section NewModulePageCreateFolder Create a Folder for your Module

First, create a folder for your module within /Modules  e.g. 'NewModule'.
You need to add the new folder to the ModuleList.cmake file in the Module directory as well.
Open /Modules/ModuleList.cmake, append the folder to the MITK_MODULES list.

\code
set(MITK_MODULES
    ...
    NewModule
)
\endcode

A simple example module is provided in the MITK/Examples/FirstSteps/NewModule directory, it includes a new data type
(more information at \ref NewDataTypePage) and adds a MiniApp for that data type (more information at \ref MiniAppCommandLineToolHowToPage).

Within the module we recommend using a Unix like directory structure. This helps others finding their way around your code.
Depending on your use case you might not need every directory.

\code
NewModule/
  autoload/
  cmdapps/
  doc/
  include/
  resource/
  src/
  test/
\endcode

Subsequently a quick description of what each directory contains.

\subsection NewModulePageCreateFolderAutoload autoload

This directory should not directly contain files. Instead it contains further directories each of which is its own module.

These modules provide functionality which should be available at application start, but will not be included by other modules.
Examples would be a module registering readers/writers or providing an interface for specific hardware.

For an example of an autoload module take a look at NewModule/autoload/IO.

\subsection NewModulePageCreateFolderCmdApps cmdapps

This directory contains all cmdapps (command line tools) related to your module. For more information see \ref MiniAppCommandLineToolHowToPage.

\subsection NewModulePageCreateFolderDoc doc

This directory contains the documentation for your module.

\subsection NewModulePageCreateFolderInclude include

This directory contains all header files which might be included by other modules.

\subsection NewModulePageCreateFolderResource resource

This directory contains resources needed by your module, such as xmls, images or similar.

\subsection NewModulePageCreateFolderSrc src

This directory contains source and header files which should not be included by other modules. Further subdivision can help keeping it organized.
(e.g. src/DataManagement src/Algorithms)

\subsection NewModulePageCreateFolderTest test

This directory contains all tests for your module.


\section NewModulePageCreateCMakeLists Create CMakeLists.txt

Within your module create a CMakeLists.txt using the MITK_CREATE_MODULE macro:

An example:

\include Examples/FirstSteps/NewModule/CMakeLists.txt

If you do not choose a module name, one will be generated based on the folder name (In this case the resulting name will be MitkNewModule).
This name has to be unique across the entire project in order to avoid collisions. It should only contain Letters (both upper- and lowercase),
no numbers, no underscores etc.

An example of an autoload module that sets its own name is:

\include Examples/FirstSteps/NewModule/autoload/IO/CMakeLists.txt

the resulting name is MitkNewModuleIO.

\note For more information about the parameters of the new module macro see mitkFunctionCreateModule.cmake

\section NewModulePageCreatefilesdotcmake Create files.cmake

Next, create a new file and name it files.cmake, containing the files of your module.

An example:

\include Examples/FirstSteps/NewModule/autoload/IO/files.cmake

If you do not add a source file here it will not be compiled, unless it is included elsewhere.

\section NewModulePageCreateTestingEnvironment Set up the Test environment

Providing tests for your code is a very good way to save yourself a lot of debugging time and ensure
consistency. An example of a small test environment is provided in the NewModule example.

Again you need a CMakeLists.txt, e.g.:

\include Examples/FirstSteps/NewModule/test/CMakeLists.txt

a files.cmake, e.g.:

\include Examples/FirstSteps/NewModule/test/files.cmake

and an actual test, e.g.:

\include Examples/FirstSteps/NewModule/test/mitkExampleDataStructureTest.cpp

For more information regarding tests please refer to \ref AboutTestingPage.

That's it! Enjoy your new module!

*/
