Difference between revisions of "Documentation/Nightly/Developers/Tutorials/BundleModulesIntoExtension"
m (Text replacement - "\[http:\/\/www\.slicer\.org\/slicerWiki\/images\/([^ ]+) ([^]]+)]" to "[http://www.slicer.org/w/img_auth.php/$1 $2]") |
|||
(2 intermediate revisions by one other user not shown) | |||
Line 139: | Line 139: | ||
#----------------------------------------------------------------------------- | #----------------------------------------------------------------------------- | ||
− | + | find_package(Slicer REQUIRED) | |
− | + | include(${Slicer_USE_FILE}) | |
− | |||
− | |||
[...] | [...] | ||
Line 182: | Line 180: | ||
#----------------------------------------------------------------------------- | #----------------------------------------------------------------------------- | ||
− | + | # Extension meta-information <- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - EXTENSION SPECIFIC | |
− | + | set(EXTENSION_NAME MyLoadableModuleExtension) <- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - EXTENSION SPECIFIC | |
− | + | set(EXTENSION_HOMEPAGE "http://www.slicer.org/slicerWiki/index.php/Documentation/4.1/Extensions/${MODULE_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 Qt loadable module built as an extension") <- - - - - - - - - - - - - - - - EXTENSION SPECIFIC | |
− | + | set(EXTENSION_ICONURL "http://viewvc.slicer.org/viewvc.cgi/Slicer4/trunk/Extensions/Testing/LoadableExtensionTemplate/Resources/Icons/LoadableExtensionTemplate.png?revision=19437&view=co") | |
− | |||
#----------------------------------------------------------------------------- | #----------------------------------------------------------------------------- | ||
Line 198: | Line 195: | ||
#----------------------------------------------------------------------------- | #----------------------------------------------------------------------------- | ||
− | + | find_package(Slicer REQUIRED) | |
− | + | include(${Slicer_USE_FILE}) | |
− | |||
− | |||
#----------------------------------------------------------------------------- | #----------------------------------------------------------------------------- | ||
Line 230: | Line 225: | ||
#----------------------------------------------------------------------------- | #----------------------------------------------------------------------------- | ||
− | + | include(${Slicer_EXTENSION_CPACK}) <- - - - - EXTENSION SPECIFIC | |
− | |||
− | |||
</pre> | </pre> | ||
--> | --> | ||
Line 239: | Line 232: | ||
* [[Documentation/{{documentation/version}}/Developers/Tutorials/BuildTestPackageDistributeExtensions|Step-by-step: How to create, publish and distribute an extension]] | * [[Documentation/{{documentation/version}}/Developers/Tutorials/BuildTestPackageDistributeExtensions|Step-by-step: How to create, publish and distribute an extension]] | ||
− | * [http://www.slicer.org/ | + | * [http://www.slicer.org/w/img_auth.php/a/a1/AHM-2011-SlicerExtensions-final.ppt AHM 2011 SlicerExtensions presentation] |
* Read [[Documentation/{{documentation/version}}/FAQ|FAQ]] | * Read [[Documentation/{{documentation/version}}/FAQ|FAQ]] |
Latest revision as of 12:39, 27 November 2019
Home < Documentation < Nightly < 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/slicerWiki/index.php/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}) [...]