59 #########################################################################
63 # * Use a macro to create the CMAKE variables according to the #
64 # provided options as input. #
66 #########################################################################
71 "NEEDS_CEP_LIBRARIESNEEDS_TOOLNEEDS_COMPONENT_EXTENSIONNEEDS_ACTION_EXTENSIONDEFINESCXX_FLAGSADDITIONAL_SOURCESCEP_NAMEDESCRIPTIONEXTERNAL_LIBRARIESINCLUDE_DIRECTORIESEXTRA_TRANSLATE_LANGUAGE" # possible lists
72 "DISABLEDNEEDS_QT_MODULESNEEDS_ITKNEEDS_QTXMLNEEDS_XSDNEEDS_XERCESCNEEDS_PYTHON" # possible options
78 #########################################################################
80 # CREATE CMAKE VARIABLES #
82 # * Create required and useful
CMake variables
for the macro #
84 #########################################################################
86 # CMAKE CACHE VARIABLE
87 #
if it is the first cmake run, create the application variable with a correct
initial value
88 if(NOT APPLICATION_${APPLICATION_NAME_CMAKE}_INTERNAL)
89 # add option to enable/disable
this extension and
set it to
true by
default
90 # Building the extension can be disabled by giving the argument DISABLED to the macro
91 # or by passing the flag -D${TYPE_EXTENSION_CMAKE}_${APPLICATION_NAME_CMAKE}_DISABLED:BOOL=TRUE
92 if(${APPLICATION_NAME_CMAKE}_DISABLED)
93 set(APPLICATION_${APPLICATION_NAME_CMAKE}_ENABLED FALSE)
95 set(APPLICATION_${APPLICATION_NAME_CMAKE}_ENABLED TRUE)
97 set(APPLICATION_${APPLICATION_NAME_CMAKE} ${APPLICATION_${APPLICATION_NAME_CMAKE}_ENABLED} CACHE BOOL
"Build application ${APPLICATION_NAME}")
98 set(APPLICATION_${APPLICATION_NAME_CMAKE}_INTERNAL TRUE CACHE INTERNAL
"Is variable APPLICATION_${APPLICATION_NAME} already created?")
101 # APPLICATION TARGET NAME
103 # NSIS requires that cpack component names do not feature space or "-" characters
104 set(APPLICATION_TARGET_NAME application_${APPLICATION_NAME})
106 set(APPLICATION_TARGET_NAME application-${APPLICATION_NAME})
111 # if this extension is enabled, do everything needed
112 # otherwise... do nothing
113 if (APPLICATION_${APPLICATION_NAME_CMAKE})
115 message(STATUS
"Building application ${APPLICATION_NAME}")
119 #########################################################################
121 # INCLUDE DIRECTORIES #
123 # * Include basic directories where to look header files #
124 # * Include also additional user provided directories #
125 # * These directories are used for compilation step #
127 #########################################################################
129 include_directories(${CAMITK_INCLUDE_DIRECTORIES})
130 include_directories(${CMAKE_CURRENT_BINARY_DIR})
131 include_directories(${CMAKE_CURRENT_SOURCE_DIR})
133 # USER INPUT DIRECTORIES
134 include_directories(${${APPLICATION_NAME_CMAKE}_INCLUDE_DIRECTORIES})
138 #########################################################################
140 # GATHER RESSOURCES #
142 # *
get all the headers (.h) and source files (.cpp) of the project
#
143 # * create the needed Qt files (using moc and uic) #
145 #########################################################################
147 # get all headers, sources and do what is needed for Qt
148 # one need to do this just before the add_library so that all defines, include directories and link directories
149 # are set properly (gather_headers_and_sources include the call to Qt moc and uic)
154 #########################################################################
156 # ADDITIONAL KNOWN LIBRARY DEPENDENCIES #
158 # * Look
for specific library needed #
159 # * Specific libraries are specified as option with the #
160 # NEEDS_LIBRARY syntax (see macro syntax
for more options)
#
161 # * Backward compatibility : Warn user if using old NEEDS_TOOL syntax #
163 #########################################################################
166 set(ITK_LIBRARIES
"")
167 if(${APPLICATION_NAME_CMAKE}_NEEDS_ITK)
168 find_package(ITK REQUIRED)
171 set(ITK_VERSION ${ITK_VERSION_MAJOR}.${ITK_VERSION_MINOR}.${ITK_VERSION_PATCH}) #ITK_VERSION is not always
set
172 message(STATUS
"${APPLICATION_TARGET_NAME}: Found ITK version ${ITK_VERSION}")
174 # Now select the ITK libraries according to the ITK version found.
175 # ITK 3.x.x (mostly 3.20.1)
176 if ((${ITK_VERSION} VERSION_GREATER
"3") AND (${ITK_VERSION} VERSION_LESS
"4"))
177 if (MSVC) # Visual Studio compilers
178 if(MSVC90 OR MSVC10) #ITK 3.x only works with VS 2008 / 2010
180 debug ITKAlgorithms${CAMITK_DEBUG_POSTFIX}
181 optimized ITKAlgorithms
182 debug ITKBasicFilters${CAMITK_DEBUG_POSTFIX}
183 optimized ITKBasicFilters
184 debug ITKCommon${CAMITK_DEBUG_POSTFIX}
186 debug ITKIO${CAMITK_DEBUG_POSTFIX}
188 debug ITKNrrdIO${CAMITK_DEBUG_POSTFIX}.lib
189 debug itkgdcm${CAMITK_DEBUG_POSTFIX}.lib
190 debug itkjpeg12${CAMITK_DEBUG_POSTFIX}.lib
191 debug itkjpeg16${CAMITK_DEBUG_POSTFIX}.lib
192 debug itkopenjpeg${CAMITK_DEBUG_POSTFIX}.lib
193 debug itkpng${CAMITK_DEBUG_POSTFIX}.lib
194 debug itktiff${CAMITK_DEBUG_POSTFIX}.lib
195 debug itkjpeg8${CAMITK_DEBUG_POSTFIX}.lib
196 debug ITKSpatialObject${CAMITK_DEBUG_POSTFIX}.lib
197 debug itkvnl_inst${CAMITK_DEBUG_POSTFIX}.lib
198 debug itkvnl_algo${CAMITK_DEBUG_POSTFIX}.lib
199 debug itkv3p_netlib${CAMITK_DEBUG_POSTFIX}.lib
200 debug itkvnl${CAMITK_DEBUG_POSTFIX}.lib
201 debug itkvcl${CAMITK_DEBUG_POSTFIX}.lib
202 debug itkv3p_lsqr${CAMITK_DEBUG_POSTFIX}.lib
203 debug ITKMetaIO${CAMITK_DEBUG_POSTFIX}.lib
204 debug itksys${CAMITK_DEBUG_POSTFIX}.lib
205 debug ITKDICOMParser${CAMITK_DEBUG_POSTFIX}.lib
206 debug ITKEXPAT${CAMITK_DEBUG_POSTFIX}.lib
207 debug ITKniftiio${CAMITK_DEBUG_POSTFIX}.lib
208 debug ITKznz${CAMITK_DEBUG_POSTFIX}.lib
209 debug itkzlib${CAMITK_DEBUG_POSTFIX}.lib
217 elseif(MSVC11 OR MSVC12)
# Visual Studion 2012/2013
218 message(FATAL_ERROR
"It seems you have ITK version 3.x installed. This one is not compatible with Visual Studio 2012 or 2013. Please install ITK 4.3.x or 4.5.x instead")
221 message(FATAL_ERROR "CamiTK does not support ITK 3.x libraries for MinGW. You may file a feature request: https:
222 else()
#APPLE OR UNIX
223 set(ITK_LIBRARIES ITKBasicFilters ITKCommon ITKIO ITKAlgorithms)
226 # ITK 4.3.x (mostly 4.3.2)
227 elseif((${ITK_VERSION} VERSION_GREATER
"4") AND (${ITK_VERSION} VERSION_LESS
"4.4"))
228 if (MSVC)
# Visual Studio compilers
229 if(MSVC90 OR MSVC10) #ITK 3.x only works with VS 2008 / 2010
230 message(FATAL_ERROR
"ITK version ${ITK_VERSION} is not compatible with Visual Studio 2008 or 2010. Please install ITK version 4.3.x or 4.5.x")
231 elseif(MSVC11 OR MSVC12)
# Visual Studion 2012/2013
232 link_directories(${ITK_DIR}/../..)
235 debug ITKCommon-4.3${CAMITK_DEBUG_POSTFIX}.lib
236 debug ITKNrrdIO-4.3${CAMITK_DEBUG_POSTFIX}.lib
237 debug itkgdcmCommon-4.3${CAMITK_DEBUG_POSTFIX}.lib
238 debug itkjpeg-4.3${CAMITK_DEBUG_POSTFIX}.lib
239 debug itkopenjpeg-4.3${CAMITK_DEBUG_POSTFIX}.lib
240 debug itkpng-4.3${CAMITK_DEBUG_POSTFIX}.lib
241 debug itktiff-4.3${CAMITK_DEBUG_POSTFIX}.lib
242 debug ITKSpatialObjects-4.3${CAMITK_DEBUG_POSTFIX}.lib
243 debug itkvnl_algo-4.3${CAMITK_DEBUG_POSTFIX}.lib
244 debug itkv3p_netlib-4.3${CAMITK_DEBUG_POSTFIX}.lib
245 debug itkvnl-4.3${CAMITK_DEBUG_POSTFIX}.lib
246 debug itkvcl-4.3${CAMITK_DEBUG_POSTFIX}.lib
247 debug itkv3p_lsqr-4.3${CAMITK_DEBUG_POSTFIX}.lib
248 debug ITKMetaIO-4.3${CAMITK_DEBUG_POSTFIX}.lib
249 debug itksys-4.3${CAMITK_DEBUG_POSTFIX}.lib
250 debug ITKDICOMParser-4.3${CAMITK_DEBUG_POSTFIX}.lib
251 debug ITKEXPAT-4.3${CAMITK_DEBUG_POSTFIX}.lib
252 debug ITKniftiio-4.3${CAMITK_DEBUG_POSTFIX}.lib
253 debug ITKznz-4.3${CAMITK_DEBUG_POSTFIX}.lib
254 debug itkzlib-4.3${CAMITK_DEBUG_POSTFIX}.lib
261 debug ITKIOGIPL-4.3${CAMITK_DEBUG_POSTFIX}.lib
262 debug ITKIONIFTI-4.3${CAMITK_DEBUG_POSTFIX}.lib
263 debug ITKIONRRD-4.3${CAMITK_DEBUG_POSTFIX}.lib
264 debug ITKIOPNG-4.3${CAMITK_DEBUG_POSTFIX}.lib
265 debug itkgdcmDICT-4.3${CAMITK_DEBUG_POSTFIX}.lib
266 debug itkgdcmDSED-4.3${CAMITK_DEBUG_POSTFIX}.lib
267 debug itkgdcmIOD-4.3${CAMITK_DEBUG_POSTFIX}.lib
268 debug itkgdcmjpeg8-4.3${CAMITK_DEBUG_POSTFIX}.lib
269 debug itkgdcmjpeg12-4.3${CAMITK_DEBUG_POSTFIX}.lib
270 debug itkgdcmjpeg16-4.3${CAMITK_DEBUG_POSTFIX}.lib
271 debug itkgdcmMSFF-4.3${CAMITK_DEBUG_POSTFIX}.lib
272 debug ITKgiftiio-4.3${CAMITK_DEBUG_POSTFIX}.lib
273 debug itkhdf5_cpp-4.3${CAMITK_DEBUG_POSTFIX}.lib
274 debug itkhdf5-4.3${CAMITK_DEBUG_POSTFIX}.lib
275 debug ITKMetaIO-4.3${CAMITK_DEBUG_POSTFIX}.lib
276 debug ITKIOBioRad-4.3${CAMITK_DEBUG_POSTFIX}.lib
277 debug ITKIOStimulate-4.3${CAMITK_DEBUG_POSTFIX}.lib
278 debug ITKIOTIFF-4.3${CAMITK_DEBUG_POSTFIX}.lib
279 debug ITKIOVTK-4.3${CAMITK_DEBUG_POSTFIX}.lib
280 debug ITKIOPNG-4.3${CAMITK_DEBUG_POSTFIX}.lib
281 debug ITKBiasCorrection-4.3${CAMITK_DEBUG_POSTFIX}.lib
282 debug ITKBioCell-4.3${CAMITK_DEBUG_POSTFIX}.lib
283 debug ITKFEM-4.3${CAMITK_DEBUG_POSTFIX}.lib
284 debug ITKIOBMP-4.3${CAMITK_DEBUG_POSTFIX}.lib
285 debug ITKIOCSV-4.3${CAMITK_DEBUG_POSTFIX}.lib
286 debug ITKIOGDCM-4.3${CAMITK_DEBUG_POSTFIX}.lib
287 debug ITKIOGE-4.3${CAMITK_DEBUG_POSTFIX}.lib
288 debug ITKIOGIPL-4.3${CAMITK_DEBUG_POSTFIX}.lib
289 debug ITKIOHDF5-4.3${CAMITK_DEBUG_POSTFIX}.lib
290 debug ITKIOImageBase-4.3${CAMITK_DEBUG_POSTFIX}.lib
291 debug ITKIOIPL-4.3${CAMITK_DEBUG_POSTFIX}.lib
292 debug ITKIOJPEG-4.3${CAMITK_DEBUG_POSTFIX}.lib
293 debug ITKIOLSM-4.3${CAMITK_DEBUG_POSTFIX}.lib
294 debug ITKIOMesh-4.3${CAMITK_DEBUG_POSTFIX}.lib
295 debug ITKIOMeta-4.3${CAMITK_DEBUG_POSTFIX}.lib
296 debug ITKIOSiemens-4.3${CAMITK_DEBUG_POSTFIX}.lib
297 debug ITKIOSpatialObjects-4.3${CAMITK_DEBUG_POSTFIX}.lib
298 debug ITKIOTransformBase-4.3${CAMITK_DEBUG_POSTFIX}.lib
299 debug ITKIOTransformHDF5-4.3${CAMITK_DEBUG_POSTFIX}.lib
300 debug ITKIOTransformInsightLegacy-4.3${CAMITK_DEBUG_POSTFIX}.lib
301 debug ITKIOTransformMatlab-4.3${CAMITK_DEBUG_POSTFIX}.lib
302 debug ITKIOXML-4.3${CAMITK_DEBUG_POSTFIX}.lib
303 debug ITKKLMRegionGrowing-4.3${CAMITK_DEBUG_POSTFIX}.lib
304 debug ITKLabelMap-4.3${CAMITK_DEBUG_POSTFIX}.lib
305 debug ITKMesh-4.3${CAMITK_DEBUG_POSTFIX}.lib
306 debug ITKMetaIO-4.3${CAMITK_DEBUG_POSTFIX}.lib
307 debug itkNetlibSlatec-4.3${CAMITK_DEBUG_POSTFIX}.lib
308 debug itkopenjpeg-4.3${CAMITK_DEBUG_POSTFIX}.lib
309 debug ITKOptimizers-4.3${CAMITK_DEBUG_POSTFIX}.lib
310 debug ITKOptimizersv4-4.3${CAMITK_DEBUG_POSTFIX}.lib
311 debug ITKPath-4.3${CAMITK_DEBUG_POSTFIX}.lib
312 debug itkpng-4.3${CAMITK_DEBUG_POSTFIX}.lib
313 debug ITKPolynomials-4.3${CAMITK_DEBUG_POSTFIX}.lib
314 debug ITKQuadEdgeMesh-4.3${CAMITK_DEBUG_POSTFIX}.lib
315 debug ITKReview-4.3${CAMITK_DEBUG_POSTFIX}.lib
316 debug ITKStatistics-4.3${CAMITK_DEBUG_POSTFIX}.lib
317 debug itkv3p_lsqr-4.3${CAMITK_DEBUG_POSTFIX}.lib
318 debug itkv3p_netlib-4.3${CAMITK_DEBUG_POSTFIX}.lib
319 debug itkvcl-4.3${CAMITK_DEBUG_POSTFIX}.lib
320 debug ITKVideoCore-4.3${CAMITK_DEBUG_POSTFIX}.lib
321 debug ITKVideoIO-4.3${CAMITK_DEBUG_POSTFIX}.lib
322 debug ITKVTK-4.3${CAMITK_DEBUG_POSTFIX}.lib
323 debug ITKVNLInstantiation-4.3${CAMITK_DEBUG_POSTFIX}.lib
324 debug ITKWatersheds-4.3${CAMITK_DEBUG_POSTFIX}.lib
325 # Release librariesdebug
326 optimized ITKCommon-4.3.lib
327 optimized ITKNrrdIO-4.3.lib
328 optimized itkgdcmCommon-4.3.lib
329 optimized itkjpeg-4.3.lib
330 optimized itkopenjpeg-4.3.lib
331 optimized itkpng-4.3.lib
332 optimized itktiff-4.3.lib
333 optimized ITKSpatialObjects-4.3.lib
334 optimized itkvnl_algo-4.3.lib
335 optimized itkv3p_netlib-4.3.lib
336 optimized itkvnl-4.3.lib
337 optimized itkvcl-4.3.lib
338 optimized itkv3p_lsqr-4.3.lib
339 optimized ITKMetaIO-4.3.lib
340 optimized itksys-4.3.lib
341 optimized ITKDICOMParser-4.3.lib
342 optimized ITKEXPAT-4.3.lib
343 optimized ITKniftiio-4.3.lib
344 optimized ITKznz-4.3.lib
345 optimized itkzlib-4.3.lib
346 optimized snmpapi.lib
349 optimized comctl32.lib
350 optimized wsock32.lib
351 optimized opengl32.lib
352 optimized ITKIOGIPL-4.3.lib
353 optimized ITKIONIFTI-4.3.lib
354 optimized ITKIONRRD-4.3.lib
355 optimized ITKIOPNG-4.3.lib
356 optimized itkgdcmDICT-4.3.lib
357 optimized itkgdcmDSED-4.3.lib
358 optimized itkgdcmIOD-4.3.lib
359 optimized itkgdcmjpeg8-4.3.lib
360 optimized itkgdcmjpeg12-4.3.lib
361 optimized itkgdcmjpeg16-4.3.lib
362 optimized itkgdcmMSFF-4.3.lib
363 optimized ITKgiftiio-4.3.lib
364 optimized itkhdf5_cpp-4.3.lib
365 optimized itkhdf5-4.3.lib
366 optimized ITKMetaIO-4.3.lib
367 optimized ITKIOBioRad-4.3.lib
368 optimized ITKIOStimulate-4.3.lib
369 optimized ITKIOTIFF-4.3.lib
370 optimized ITKIOVTK-4.3.lib
371 optimized ITKIOPNG-4.3.lib
372 optimized ITKBiasCorrection-4.3.lib
373 optimized ITKBioCell-4.3.lib
374 optimized ITKFEM-4.3.lib
375 optimized ITKIOBMP-4.3.lib
376 optimized ITKIOCSV-4.3.lib
377 optimized ITKIOGDCM-4.3.lib
378 optimized ITKIOGE-4.3.lib
379 optimized ITKIOGIPL-4.3.lib
380 optimized ITKIOHDF5-4.3.lib
381 optimized ITKIOImageBase-4.3.lib
382 optimized ITKIOIPL-4.3.lib
383 optimized ITKIOJPEG-4.3.lib
384 optimized ITKIOLSM-4.3.lib
385 optimized ITKIOMesh-4.3.lib
386 optimized ITKIOMeta-4.3.lib
387 optimized ITKIOSiemens-4.3.lib
388 optimized ITKIOSpatialObjects-4.3.lib
389 optimized ITKIOTransformBase-4.3.lib
390 optimized ITKIOTransformHDF5-4.3.lib
391 optimized ITKIOTransformInsightLegacy-4.3.lib
392 optimized ITKIOTransformMatlab-4.3.lib
393 optimized ITKIOXML-4.3.lib
394 optimized ITKKLMRegionGrowing-4.3.lib
395 optimized ITKLabelMap-4.3.lib
396 optimized ITKMesh-4.3.lib
397 optimized ITKMetaIO-4.3.lib
398 optimized itkNetlibSlatec-4.3.lib
399 optimized itkopenjpeg-4.3.lib
400 optimized ITKOptimizers-4.3.lib
401 optimized ITKOptimizersv4-4.3.lib
402 optimized ITKPath-4.3.lib
403 optimized itkpng-4.3.lib
404 optimized ITKPolynomials-4.3.lib
405 optimized ITKQuadEdgeMesh-4.3.lib
406 optimized ITKReview-4.3.lib
407 optimized ITKStatistics-4.3.lib
408 optimized itkv3p_lsqr-4.3.lib
409 optimized itkv3p_netlib-4.3.lib
410 optimized itkvcl-4.3.lib
411 optimized ITKVideoCore-4.3.lib
412 optimized ITKVideoIO-4.3.lib
413 optimized ITKVTK-4.3.lib
414 optimized ITKVNLInstantiation-4.3.lib
415 optimized ITKWatersheds-4.3.lib
418 elseif(MINGW OR APPLE)
419 link_directories(${ITK_DIR}/../..)
428 ITKSpatialObjects-4.3
467 ITKBiasCorrection-4.3
483 ITKIOSpatialObjects-4.3
484 ITKIOTransformBase-4.3
485 ITKIOTransformHDF5-4.3
486 ITKIOTransformInsightLegacy-4.3
487 ITKIOTransformMatlab-4.3
489 ITKKLMRegionGrowing-4.3
509 ITKVNLInstantiation-4.3
513 set(ITK_LIBRARIES ITKCommon-4.3)
516 # ITK 4.5.x (mostly 4.5.1)
517 elseif((${ITK_VERSION} VERSION_GREATER
"4.4") AND (${ITK_VERSION} VERSION_LESS
"4.7"))
519 message(FATAL_ERROR "ITK version 4.5.x is not supported yet on Visual Studio compiler. You may file a feature request: https:
521 message(FATAL_ERROR "ITK version 4.5.x is not supported yet for MinGW compiler. You may file a feature request: https:
530 ITKGPUAnisotropicSmoothing
532 ITKGPUFiniteDifference
533 ITKGPUImageFilterBase
559 ITKIOTransformInsightLegacy
601 message(FATAL_ERROR
"ITK version 4.5.x is not supported yet for Linux platform. You may file a feature request: https://bugzilla-timc.imag.fr/")
604 # ITK version > 4.6 (mostly ITK 5.x)
606 message(FATAL_ERROR
"CamiTK does not support yet ITK version 5.x. You may file a feature request: https://bugzilla-timc.imag.fr/")
612 set(XERCESC_LIBRARIES)
613 if(${APPLICATION_NAME_CMAKE}_NEEDS_XERCESC)
614 # XercesC is required
615 find_package(XercesC REQUIRED)
617 include_directories(${XERCESC_INCLUDE_DIR})
618 set(XERCESC_LIBRARIES ${XERCESC_LIBRARY})
620 # most probably win32 or crosscompiling
621 message(FATAL_ERROR
"${APPLICATION_NAME}: xerces-c required. Please provide Xerces-C path.")
626 if(${APPLICATION_NAME_CMAKE}_NEEDS_XSD)
627 # XercesC is required
628 find_package(XercesC REQUIRED)
630 include_directories(${XERCESC_INCLUDE_DIR})
631 set(XERCESC_LIBRARIES ${XERCESC_LIBRARY})
632 find_package(XSD REQUIRED)
633 include_directories(${XSD_INCLUDE_DIR})
635 # most probably win32 or crosscompiling
636 message(FATAL_ERROR
"${APPLICATION_NAME}: xerces-c required because of XSD cxx, please set XERCESC_INCLUDE_DIR")
641 set(PYTHON_LIBRARIES
"")
642 if(${APPLICATION_NAME_CMAKE}_NEEDS_PYTHON)
643 message(STATUS
"Python needed by ${APPLICATION_NAME}")
644 find_package(PythonLibs 2.7 REQUIRED)
646 message(STATUS "Python found (needed by ${APPLICATION_NAME})
")
647 include_directories(${PYTHON_INCLUDE_DIRS})
648 # PYTHON_LIRARIES is automatically and correctly set by find_package
650 message(FATAL_ERROR "Python (2.7 or above) is required by ${APPLICATION_NAME} : please add your python installation dir to your PATH environment variable
")
655 set(QT_MODULES_LIBRARIES)
656 if(${APPLICATION_NAME_CMAKE}_NEEDS_QT_MODULES)
657 find_package(Qt4 "4.7
" COMPONENTS QtCore QtGui QtXml QtXmlPatterns QtWebkit QtOpenGL QtScript QtSQL QtNetwork REQUIRED)
659 message(SEND_ERROR "${APPLICATION_NAME} : Failed to find
Qt 4.7 or greater. This is needed by CamiTK.
")
662 # CMake will add the Qt modules specific include directories
663 include(${QT_USE_FILE})
664 # Qt additional modules are required for linking
665 set(QT_MODULES_LIBRARIES ${QT_LIBRARIES})
669 set(EXTERNAL_LIBRARIES)
670 if(${APPLICATION_NAME_CMAKE}_EXTERNAL_LIBRARIES)
671 foreach(EXTERNAL_LIBRARY ${${APPLICATION_NAME_CMAKE}_EXTERNAL_LIBRARIES})
672 if (MSVC) # TODO We have to decide how to handle debug version of external libraries
673 set(EXTERNAL_LIBRARIES ${EXTERNAL_LIBRARIES}
674 debug ${EXTERNAL_LIBRARY}${CAMITK_DEBUG_POSTFIX}
675 optimized ${EXTERNAL_LIBRARY}
678 set(EXTERNAL_LIBRARIES ${EXTERNAL_LIBRARIES} ${EXTERNAL_LIBRARY})
683 # BACKWARD COMPATIBILITY
685 # TODO CAMITK_DEPRECATED. This option is marked as deprecated. It is to be removed in CamiTK 4.0
686 # check deprecated (and warn)
687 # TODO CAMITK_DEPRECATED. This option is marked as deprecated. It is to be removed in CamiTK 4.0
688 if(${APPLICATION_NAME_CMAKE}_NEEDS_TOOL)
689 message(WARNING "Warning: ${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt:
camitk_application macro option NEEDS_TOOL is deprecated, please use NEEDS_CEP_LIBRARIES instead..
")
690 set(CEP_LIBRARIES ${CEP_LIBRARIES} ${${APPLICATION_NAME_CMAKE}_NEEDS_TOOL})
695 #########################################################################
699 # * Link directories are used to indicate the compiler where #
700 # to look for folder containing libraries to link with. #
702 #########################################################################
703 # CAMITK BASIC LIB DIRECTORIES
704 link_directories(${CAMITK_LINK_DIRECTORIES})
708 #########################################################################
710 # TARGET COMPILATION DEFINITION #
712 # * Additional sources files to consider at compilation (.cpp) #
713 # * CMake project target definition #
715 #########################################################################
717 set(${APPLICATION_NAME}_SOURCES ${${APPLICATION_NAME}_SOURCES} ${${APPLICATION_NAME_CMAKE}_ADDITIONAL_SOURCES})
719 # APPLE BUNDLE DEFINITIONS
721 set(MACOSX_BUNDLE_INFO_STRING "${APPLICATION_TARGET_NAME} ${CAMITK_SHORT_VERSION_STRING}
")
722 set(MACOSX_BUNDLE_BUNDLE_VERSION "${APPLICATION_TARGET_NAME} ${CAMITK_SHORT_VERSION_STRING}
")
723 set(MACOSX_BUNDLE_LONG_VERSION_STRING "${APPLICATION_TARGET_NAME} ${CAMITK_SHORT_VERSION_STRING}
")
724 set(MACOSX_BUNDLE_SHORT_VERSION_STRING "${CAMITK_SHORT_VERSION_STRING}
")
725 set(MACOSX_BUNDLE_COPYRIGHT "2014 UJF
")
726 set(MACOSX_BUNDLE_ICON_FILE "${CMAKE_CURRENT_SOURCE_DIR}/resources/
camitk-${APPLICATION_NAME}.icns
")
727 set(MACOSX_BUNDLE_BUNDLE_NAME "${APPLICATION_TARGET_NAME}
")
729 set(MACOSX_BUNDLE_RESOURCES "${CMAKE_CURRENT_BINARY_DIR}/${APPLICATION_TARGET_NAME}.app/Contents/Resources
")
730 set(MACOSX_BUNDLE_ICON "${MACOSX_BUNDLE_ICON_FILE}
")
731 execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory ${MACOSX_BUNDLE_RESOURCES})
732 execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${MACOSX_BUNDLE_ICON} ${MACOSX_BUNDLE_RESOURCES})
735 # CMAKE TARGET DEFINITION
736 # add_executable(${APPLICATION_TARGET_NAME} MACOSX_BUNDLE ${${APPLICATION_NAME}_SOURCES})
737 add_executable(${APPLICATION_TARGET_NAME} ${${APPLICATION_NAME}_SOURCES})
741 #########################################################################
743 # CAMITK ACTION / COMPONENT / LIBRARIES DEPENDENCIES #
745 # * Look for action / component / libraries dependencies #
746 # * Specific actions / components / libraries are specified as option #
747 # with the NEEDS_ACTION/COMPONENT_EXTENSION/CEP_LIBRARIES syntax #
748 # * Add dependencies to library-camitkcore and the testing #
749 # action/component if test are runned on it #
751 #########################################################################
753 # 1st CAMITKCORE LIBRARY DEPENDENCY
754 add_dependencies(${APPLICATION_TARGET_NAME} ${CAMITK_CORE_TARGET_LIB_NAME})
756 # 2nd COMPONENTS DEPENDENCIES
757 if(${APPLICATION_NAME_CMAKE}_NEEDS_COMPONENT_EXTENSION)
758 set(COMPONENTS_DEPENDENCY_LIST "") #use for generating the project.xml file
759 foreach(COMPONENT_NEEDED ${${APPLICATION_NAME_CMAKE}_NEEDS_COMPONENT_EXTENSION})
760 # include directories from build, camitk (local or global install).
761 include_directories(${CAMITK_BUILD_INCLUDE_DIR}/components/${COMPONENT_NEEDED})
762 include_directories(${CAMITK_INCLUDE_DIR}/components/${COMPONENT_NEEDED})
765 set(COMPONENT_EXTENSION_LIBRARIES ${COMPONENT_EXTENSION_LIBRARIES}
766 debug ${CAMITK_BUILD_PRIVATE_LIB_DIR}/components/${COMPONENT_NEEDED}${CAMITK_DEBUG_POSTFIX}
767 optimized ${COMPONENT_NEEDED}
770 set(COMPONENT_EXTENSION_LIBRARIES ${COMPONENT_EXTENSION_LIBRARIES} ${COMPONENT_NEEDED})
772 # CMake / CDash dependencies
774 add_dependencies(${APPLICATION_TARGET_NAME} component_${COMPONENT_NEEDED})
776 add_dependencies(${APPLICATION_TARGET_NAME} component-${COMPONENT_NEEDED})
777 set(COMPONENTS_DEPENDENCY_LIST ${COMPONENTS_DEPENDENCY_LIST} component-${COMPONENT_NEEDED})
782 # 3rd ACTIONS DEPENDENCIES
783 if(${APPLICATION_NAME_CMAKE}_NEEDS_ACTION_EXTENSION)
784 set(ACTIONS_DEPENDENCY_LIST "") #use for generating the project.xml file
785 foreach(ACTION_NEEDED ${${APPLICATION_NAME_CMAKE}_NEEDS_ACTION_EXTENSION})
786 # include directories from build, camitk (local or global install).
787 include_directories(${CAMITK_BUILD_INCLUDE_DIR}/actions/${ACTION_NEEDED})
788 include_directories(${CAMITK_INCLUDE_DIR}/actions/${ACTION_NEEDED})
791 set(ACTION_EXTENSION_LIBRARIES ${ACTION_EXTENSION_LIBRARIES}
792 debug ${CAMITK_BUILD_PRIVATE_LIB_DIR}/actions/${ACTION_NEEDED}${CAMITK_DEBUG_POSTFIX}
793 optimized ${ACTION_NEEDED}
796 set(ACTION_EXTENSION_LIBRARIES ${ACTION_EXTENSION_LIBRARIES} ${ACTION_NEEDED})
798 # CMake / CDash dependencies
800 add_dependencies(${APPLICATION_TARGET_NAME} action_${ACTION_NEEDED})
802 add_dependencies(${APPLICATION_TARGET_NAME} action-${ACTION_NEEDED})
803 set(ACTIONS_DEPENDENCY_LIST ${ACTIONS_DEPENDENCY_LIST} action-${ACTION_NEEDED})
808 # 4th CEP LIBRARIES DEPENDENCIES
809 if(${APPLICATION_NAME_CMAKE}_NEEDS_CEP_LIBRARIES)
810 set(CEP_LIBRARIES_DEPENDENCY_LIST "") #use for generating the project.xml file
811 foreach(CEP_LIBRARY_NEEDED ${${APPLICATION_NAME_CMAKE}_NEEDS_CEP_LIBRARIES})
812 # include directories from build, camitk (local or global install).
813 include_directories(${CAMITK_BUILD_INCLUDE_DIR}/libraries/${CEP_LIBRARY_NEEDED})
814 include_directories(${CAMITK_INCLUDE_DIR}/libraries/${CEP_LIBRARY_NEEDED})
817 set(CEP_LIBRARIES ${CEP_LIBRARIES} debug ${CEP_LIBRARY_NEEDED}${CAMITK_DEBUG_POSTFIX}
818 optimized ${CEP_LIBRARY_NEEDED}
822 set(CEP_LIBRARIES ${CEP_LIBRARIES} ${CEP_LIBRARY_NEEDED})
824 set(CEP_LIBRARIES ${CEP_LIBRARIES} ${CEP_LIBRARY_NEEDED})
827 # CMake / CDash dependencies
829 add_dependencies(${APPLICATION_TARGET_NAME} library_${CEP_LIBRARY_NEEDED})
831 add_dependencies(${APPLICATION_TARGET_NAME} library-${CEP_LIBRARY_NEEDED})
832 set(CEP_LIBRARIES_DEPENDENCY_LIST ${CEP_LIBRARIES_DEPENDENCY_LIST} library-${CEP_LIBRARY_NEEDED})
839 #########################################################################
843 # * Flags are options to give to the compiler #
844 # * Add user input flags #
845 # * Add platform specific flags #
847 #########################################################################
849 # USER INPUT COMPILER FLAG
850 if(${APPLICATION_NAME_CMAKE}_DEFINES)
851 foreach (FLAG ${${APPLICATION_NAME_CMAKE}_DEFINES})
852 add_definitions(-D${FLAG})
856 # USER INPUT CUSTOM COMPILER FLAG
857 if(${APPLICATION_NAME_CMAKE}_CXX_FLAGS)
858 foreach (FLAG ${${APPLICATION_NAME_CMAKE}_CXX_FLAGS})
859 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${FLAG}
")
865 #########################################################################
869 # * Linking is the last stage of compilation #
870 # * Indicate what libraries to use for linking the target #
872 #########################################################################
874 target_link_libraries(${APPLICATION_TARGET_NAME} ${CAMITK_CORE_LIBRARIES} ${CAMITK_LIBRARIES} ${COMPONENT_EXTENSION_LIBRARIES} ${ACTION_EXTENSION_LIBRARIES} ${CEP_LIBRARIES} ${QT_MODULES_LIBRARIES} ${XERCESC_LIBRARY} ${ITK_LIBRARIES} ${PYTHON_LIBRARIES} ${EXTERNAL_LIBRARIES})
878 #########################################################################
882 # * Define the output directory (location and name) #
883 # * Define the output name of the library #
884 # * Add ${CAMITK_DEBUG_POSTFIX} suffix to Debug MSVC built libraries #
886 #########################################################################
890 set_target_properties(${APPLICATION_TARGET_NAME}
891 PROPERTIES OUTPUT_NAME camitk-${APPLICATION_NAME}
892 DEBUG_POSTFIX ${CAMITK_DEBUG_POSTFIX}
895 set_target_properties(${APPLICATION_TARGET_NAME}
896 PROPERTIES OUTPUT_NAME camitk-${APPLICATION_NAME}
900 # OUTPUT DIRECTORY LOCATION
901 # always in bin folder
902 set_target_properties(${APPLICATION_TARGET_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CAMITK_BUILD_BIN_DIR}
903 RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CAMITK_BUILD_BIN_DIR}
904 RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CAMITK_BUILD_BIN_DIR}
907 #########################################################################
911 # * When installing the project, header files (.h) and test data are #
912 # copied into a installation folder to determine. #
913 # * Indicate in this section, where to install your project and which #
914 # files to copy into that folder (during local/global installation) #
916 #########################################################################
918 # FOLDER INSTALLATION
919 # Indicate where to install the application
921 install(TARGETS ${APPLICATION_TARGET_NAME}
922 RUNTIME DESTINATION bin
923 COMPONENT ${APPLICATION_TARGET_NAME}
926 # set (PLUGINS QtCore QtGui QtXml QtXmlPatterns)
928 # install_qt4_executable("bin/
camitk-${APPLICATION_NAME}.app
" "${PLUGINS}
")
933 #########################################################################
935 # CDASH SUBPROJECT DESCRIPTION #
937 # * Update the XML descriton of the subprojects dependenicies #
940 #########################################################################
941 # CDASH XML SUBPROJECTS DESCRIPTION UPDATE
942 if(NOT ((APPLICATION_TARGET_NAME STREQUAL "application-testactions
") OR (APPLICATION_TARGET_NAME STREQUAL "application-testcomponents
")))
943 # We will add manually the CDash dependencies of the testing applications
944 # See CamiTKSubProjectValidate.cmake
945 camitk_sub_project_add(APPLICATION ${APPLICATION_TARGET_NAME} DEPENDENCIES library-camitkcore ${COMPONENTS_DEPENDENCY_LIST} ${ACTIONS_DEPENDENCY_LIST} ${CEP_LIBRARIES_DEPENDENCY_LIST})
950 #########################################################################
954 # * CAMITK_TRANSLATIONS contains the list of language to translate #
957 # * Create the translate.pro file which contains 4 sections: #
958 # - HEADERS: list of .h/.hpp files to look for tr("") QString#
959 # - SOURCES: list of .cpp files to look for tr("") QString #
960 # - FORMS: list of .ui files to look for tr("") QString #
961 # - TRANSLATIONS: list of .ts files which use CAMITK_TRANSLATIONS #
962 # to define each .ts file #
964 # * Execute lupdate program to update the .ts files with new QString #
967 # * Execute lrelease program to create .qm files (binary equivalent of#
970 # * Create translate.qrc which contains the list of .qm files. #
971 # * Create the flags.qrc file which contains the list of .png flags #
974 #########################################################################
975 if(${APPLICATION_NAME_CMAKE}_EXTRA_TRANSLATE_LANGUAGE)
976 camitk_translate(EXTRA_LANGUAGE ${${APPLICATION_NAME_CMAKE}_EXTRA_TRANSLATE_LANGUAGE})
982 #########################################################################
984 # PACKAGING CATEGORIZATION #
986 # * On Windows, when building a package (win32 installer), the #
987 # install shield wizard proposes you to select which component #
989 # * Each component to install has a short description following its #
990 # name to understand its role. #
991 # * This section deals with the categorization and the description #
992 # of the component in this installer. #
994 #########################################################################
996 # WINDOWS INSTALLER CATEGORIZATION
997 if(${APPLICATION_NAME_CMAKE}_CEP_NAME)
998 if (${APPLICATION_NAME_CMAKE}_CEP_NAME MATCHES "SDK
")
999 # The default SDK extensions are categorized as "required
" and are not "unselectable
" by the user at installation time
1000 cpack_add_component(${APPLICATION_TARGET_NAME}
1001 DISPLAY_NAME ${APPLICATION_TARGET_NAME}
1002 DESCRIPTION ${${APPLICATION_NAME_CMAKE}_DESCRIPTION}
1008 # Extension is selectable for installation in the wizard of the installer
1009 cpack_add_component(${APPLICATION_TARGET_NAME}
1010 DISPLAY_NAME ${APPLICATION_TARGET_NAME}
1011 DESCRIPTION ${${APPLICATION_NAME_CMAKE}_DESCRIPTION}
1012 GROUP ${${APPLICATION_NAME_CMAKE}_CEP_NAME}
1016 # Extension if not categorized for packaging presentation
1017 cpack_add_component(${APPLICATION_TARGET_NAME}
1018 DISPLAY_NAME ${APPLICATION_TARGET_NAME}
1019 DESCRIPTION ${${APPLICATION_NAME_CMAKE}_DESCRIPTION}
1024 # additional unix system files/resources
1026 # Man page installation
1027 set(${APPLICATION_NAME_CMAKE}_MAN_PAGE ${CMAKE_CURRENT_SOURCE_DIR}/resources/camitk-${APPLICATION_NAME}.1)
1028 if (EXISTS ${${APPLICATION_NAME_CMAKE}_MAN_PAGE})
1029 message(STATUS "Found man page
for ${APPLICATION_TARGET_NAME}
")
1030 install(FILES ${${APPLICATION_NAME_CMAKE}_MAN_PAGE}
1031 DESTINATION ${CAMITK_APPLICATION_MAN_INSTALL_DIR}
1034 # check if .in exists
1035 if (EXISTS ${${APPLICATION_NAME_CMAKE}_MAN_PAGE}.in)
1036 message(STATUS "Found man page configuration file
for ${APPLICATION_TARGET_NAME}
")
1037 install(CODE "message(STATUS \
"Updating ${APPLICATION_NAME} man page (version ${CAMITK_VERSION_MAJOR}.${CAMITK_VERSION_MINOR} as of ${CURRENT_DATE})\")")
1038 # set variable in sub-cmake shell
1039 install(CODE
"set(APPLICATION_NAME ${APPLICATION_NAME})")
1040 install(CODE "
set(CURRENT_DATE ${CURRENT_DATE})
")
1041 install(CODE "set(CAMITK_VERSION_MAJOR ${CAMITK_VERSION_MAJOR})
")
1042 install(CODE "set(CAMITK_VERSION_MINOR ${CAMITK_VERSION_MINOR})
")
1043 # remove previous version
1044 install(CODE "execute_process(COMMAND ${CMAKE_COMMAND} -E
remove -f ${CMAKE_CURRENT_BINARY_DIR}/
camitk-${APPLICATION_NAME}.1)
")
1045 # configure current version
1046 install(CODE "configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/
camitk-${APPLICATION_NAME}.1.in ${CMAKE_CURRENT_BINARY_DIR}/
camitk-${APPLICATION_NAME}.1 @ONLY)
")
1048 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/camitk-${APPLICATION_NAME}.1 DESTINATION ${CAMITK_APPLICATION_MAN_INSTALL_DIR})
1053 set(${APPLICATION_NAME_CMAKE}_DESKTOP ${CMAKE_CURRENT_SOURCE_DIR}/resources/camitk-${APPLICATION_NAME}.desktop)
1054 if (EXISTS ${${APPLICATION_NAME_CMAKE}_DESKTOP})
1055 message(STATUS "Found desktop file
for ${APPLICATION_TARGET_NAME}
")
1056 install(FILES ${${APPLICATION_NAME_CMAKE}_DESKTOP} DESTINATION ${CAMITK_APPLICATION_DESKTOP_INSTALL_DIR})
1059 # application pixmap
1060 set(${APPLICATION_NAME_CMAKE}_PIXMAP ${CMAKE_CURRENT_SOURCE_DIR}/resources/camitk-${APPLICATION_NAME}.xpm)
1061 if (EXISTS ${${APPLICATION_NAME_CMAKE}_PIXMAP})
1062 message(STATUS "Found pixmap
for ${APPLICATION_TARGET_NAME}
")
1063 install(FILES ${${APPLICATION_NAME_CMAKE}_PIXMAP} DESTINATION ${CAMITK_APPLICATION_PIXMAP_INSTALL_DIR})
1068 endif() #APPLICATION_${APPLICATION_NAME_CMAKE}
A pseudo-namespace used to group CMake macros and functions.
string initial
Definition: renError.cpp:126
OUTFILE execute_process(COMMAND ${CMAKE_COMMAND}-E remove-f ${CAMITK_TEST_COMMAND_OUTPUT_FILE}) set(CAMITK_TEST_COMMAND_ARG"$
Definition: CamiTKTestCompareFile.h:15
get_directory_name()
macro get_directory_name set the variable VariableName to the name of the last directory of FullPathD...
Definition: GetDirectoryName.h:14
Definition: Action.cpp:40
parse_arguments()
macro parse_arguments is a fork from CMakeMacroParseArguments see http://www.cmake.org/Wiki/CMakeMacroParseArguments for more information
Definition: ParseArguments.h:13
set(CAMITK_TEST_COMMAND_FILE ${CAMITK_TEST_OUTPUT_DIR}/command) set(CAMITK_TEST_COMMAND_RESULT_FILE $
This CMake file run a command and put the output in a given file.
Definition: CamiTKTestPassFile.h:11
gather_headers_and_sources()
macro gather_headers_and_sources find all headers, sources, including the qt ui, moc and resources an...
Definition: GatherHeadersAndSources.h:15
map< unsigned int, unsigned int >::iterator it
Definition: pml2wrl.cpp:50
static void include(QRect &r, const QRect &rect)
Definition: canvas_typed/qtcanvas.cpp:98
camitk_application()
macro camitk_application simplify writing a CMakeLists.txt for CamiTK application extension ...
Definition: CamiTKApplication.h:57