AHM2012-Slicer-Extension
From NAMIC Wiki
Home < AHM2012-Slicer-Extension
Contents
Writing an s4ext file
- Extensions are described using a simple text file.
# # First token of each non-comment line is the keyword and the rest of the line # (including spaces) is the value. # - the value can be blank # # This is source code manager (i.e. svn) scm local scmurl Testing/LoadableExtensionTemplate # list dependencies # - These should be names of other modules that have .s4ext files # - The dependencies will be built first depends NA # homepage homepage https://www.slicer.org/wiki/Slicer4:Developers:Projects:QtSlicer/Tutorials/ExtensionWriting # Match category in the xml description of the module (where it shows up in Modules menu) category Examples # Give people an idea what to expect from this code # - Is it just a test or something you stand beind? status Beta # One line stating what the module does description This is an example of Qt loadable module built as an extension
- This file will be automatically generated using information specified within your CMakeLists.txt
Example of CMakeLists.txt
cmake_minimum_required(VERSION 2.8.4) set(EXTENSION_NAME LoadableExtensionTemplate) #----------------------------------------------------------------------------- # Prerequisites #----------------------------------------------------------------------------- if(NOT Slicer_SOURCE_DIR) set(EXTENSION_HOMEPAGE "https://www.slicer.org/wiki/Slicer4:Developers:Projects:QtSlicer/Tutorials/ExtensionWriting") set(EXTENSION_CATEGORY "Examples") set(EXTENSION_STATUS "Beta") set(EXTENSION_DESCRIPTION "This is an example of Qt loadable module built as an extension") set(EXTENSION_DEPENDS CLIExtensionTemplate) # Specified as a space separated list or 'NA' if any find_package(Slicer REQUIRED) # Additional C/CXX flags - Should be defined before including Slicer_USE_FILE set(ADDITIONAL_C_FLAGS "" CACHE STRING "Additional ${EXTENSION_NAME} C Flags") set(ADDITIONAL_CXX_FLAGS "" CACHE STRING "Additional ${EXTENSION_NAME} CXX Flags") include(${Slicer_USE_FILE}) set(EXTENSION_LICENSE_FILE ${Slicer_LICENSE_FILE}) set(EXTENSION_README_FILE ${Slicer_README_FILE}) include(SlicerEnableExtensionTesting) endif() # Add subdirectories add_subdirectory(Logic) #----------------------------------------------------------------------------- # Sources #----------------------------------------------------------------------------- set(qt_module_export_directive "Q_SLICER_QTMODULES_LOADABLEEXTENSIONTEMPLATE_EXPORT") # Additional includes - Current_{source,binary} and Slicer_{Libs,Base} already included set(qt_module_include_directories ${CMAKE_CURRENT_SOURCE_DIR}/Logic ${CMAKE_CURRENT_BINARY_DIR}/Logic ) # Source files set(qt_module_SRCS qSlicerLoadableExtensionTemplateModule.cxx qSlicerLoadableExtensionTemplateModule.h qSlicerLoadableExtensionTemplateModuleWidget.cxx qSlicerLoadableExtensionTemplateModuleWidget.h ) # Headers that should run through moc set(qt_module_MOC_SRCS qSlicerLoadableExtensionTemplateModule.h qSlicerLoadableExtensionTemplateModuleWidget.h ) # UI files set(qt_module_UI_SRCS Resources/UI/qSlicerLoadableExtensionTemplateModule.ui ) # Additional Target libraries set(qt_module_target_libraries vtkSlicerLoadableExtensionTemplateModuleLogic ) # Resources set(qt_module_resources Resources/qSlicerLoadableExtensionTemplateModule.qrc ) #----------------------------------------------------------------------------- # Build #----------------------------------------------------------------------------- slicerMacroBuildQtModule( NAME ${EXTENSION_NAME} EXPORT_DIRECTIVE ${qt_module_export_directive} INCLUDE_DIRECTORIES ${qt_module_include_directories} SRCS ${qt_module_SRCS} MOC_SRCS ${qt_module_MOC_SRCS} UI_SRCS ${qt_module_UI_SRCS} TARGET_LIBRARIES ${qt_module_target_libraries} RESOURCES ${qt_module_resources} ) #----------------------------------------------------------------------------- # Testing #----------------------------------------------------------------------------- if(BUILD_TESTING) add_subdirectory(Testing) endif() #----------------------------------------------------------------------------- # Generate extension description file '<EXTENSION_NAME>.s4ext' #----------------------------------------------------------------------------- if(NOT Slicer_SOURCE_DIR) include(SlicerFunctionGenerateExtensionDescription) slicerFunctionGenerateExtensionDescription( EXTENSION_NAME ${EXTENSION_NAME} EXTENSION_CATEGORY ${EXTENSION_CATEGORY} EXTENSION_STATUS ${EXTENSION_STATUS} EXTENSION_HOMEPAGE ${EXTENSION_HOMEPAGE} EXTENSION_DESCRIPTION ${EXTENSION_DESCRIPTION} EXTENSION_DEPENDS ${EXTENSION_DEPENDS} DESTINATION_DIR ${CMAKE_CURRENT_BINARY_DIR} SLICER_WC_REVISION ${Slicer_WC_REVISION} SLICER_WC_ROOT ${Slicer_WC_ROOT} ) endif() #----------------------------------------------------------------------------- # Packaging #----------------------------------------------------------------------------- if(NOT Slicer_SOURCE_DIR) include(${Slicer_EXTENSION_CPACK}) endif()
Testing your extension
- An extension is a container for one or more modules, writing test shouldn't be different.
How users will access your extension
- Two options:
- Extension manager within Slicer
- Download from http://slicer.kitware.com/midas3/slicerpackages
How to get started
- Look at the existing template living in Slicer/Extensions/Testing
- Use module wizard to create an extension
- Configure and build an extension
$ pwd /path/to/MyExtension $ cd .. $ mkdir MyExtension-build $ cd MyExtension-build $ cmake -DSlicer_DIR:PATH=/path/to/Slicer-build $ make -j4
- Test your extension and submit to CDash
$ make Experimental
- Test, submit to CDash and upload your extension on Midas
$ make ExperimentalUpload