Documentation/4.4/Developers/Tutorials/BundleModulesIntoExtension
|
For the latest Slicer documentation, visit the read-the-docs. |
Contents
Overview
Extensions are packaged against a specific version of Slicer, to be distributed and available for a revision X of Slicer, extensions have to be build against that same revision of Slicer. Otherwise, an extension will be considered as incompatible.
- If you are not familiar with the extension creation and contribution process, consider reading Step-by-step: How to create, publish and distribute an extension.
CMake variables
To create an extension, the following CMake variables should be defined:
List of partially supported CMake variables:
| CMake variable | Description |
|---|---|
EXTENSION_STATUS
|
Give people an idea what to expect from this code |
Project layout
The code should be organized as illustrated below:
MyExtension <- - - - - - - - - - - - - - - - - - - - - - Top-level folder of the extension project
|
|-- CMakeLists.txt
|
|-- MyExtension.png
|
|-- MyCLIModule
| |
| |-- CMakeLists.txt
| |
| |-- MyCLIModule.cxx
| |
| |-- MyCLIModule.xml
. .
. .
|
|-- MyLoadableModule
|
|-- CMakeLists.txt
|
|-- qSlicerMyLoadableModuleModule.cxx
|
|-- qSlicerMyLoadableModuleModule.h
.
.
Top-level CMakeLists.txt
The top-level CMakeLists.txt could be organized as reported below:
cmake_minimum_required(VERSION 2.8.9)
#-----------------------------------------------------------------------------
# Extension meta-information <- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - EXTENSION SPECIFIC
set(EXTENSION_NAME MyExtension) <- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - EXTENSION SPECIFIC
set(EXTENSION_HOMEPAGE "http://www.slicer.org/wiki/Documentation/4.1/Extensions/${EXTENSION_NAME}") <- - - - EXTENSION SPECIFIC
set(EXTENSION_CATEGORY "Examples") <- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - EXTENSION SPECIFIC
set(EXTENSION_CONTRIBUTORS "Jean-Christophe Fillion-Robin (Kitware)") <- - - - - - - - - - - - - - - - - - - - - - - - - - - EXTENSION SPECIFIC
set(EXTENSION_DESCRIPTION "This is an example of extension bundling a CLI, a loadable and a scripted module") <- - - - - - - EXTENSION SPECIFIC
set(EXTENSION_ICONURL "http://viewvc.slicer.org/viewvc.cgi/Slicer4/trunk/Extensions/Testing/LoadableExtensionTemplate/Resources/Icons/LoadableExtensionTemplate.png?revision=19437&view=co")
#-----------------------------------------------------------------------------
find_package(Slicer REQUIRED)
include(${Slicer_USE_FILE})
#-----------------------------------------------------------------------------
add_subdirectory(MyCLIModule)
add_subdirectory(MyLoadableModule)
[...]
#-----------------------------------------------------------------------------
include(${Slicer_EXTENSION_CPACK}) <- - - - - EXTENSION SPECIFIC
Possible tweak of Module level CMakeLists.txt
During the development process, it could be useful to be able to build each module against a given slicer build tree without having to build the complete extensions, to do so the CMakeLists.txt of each module could include find_package(Slicer REQUIRED).
For example, the CMakeLists.txt of MyCLIModule module that would be bundled into MyExtension could include the following code:
cmake_minimum_required(VERSION 2.8.9)
#-----------------------------------------------------------------------------
set(MODULE_NAME MyCLIModule) # Do not use 'project()'
#-----------------------------------------------------------------------------
find_package(Slicer REQUIRED)
include(${Slicer_USE_FILE})
[...]