57 #########################################################################
61 # * Use a macro to create the CMAKE variables according to the #
62 # provided options as input. #
64 #########################################################################
69 "NEEDS_CEP_LIBRARIESNEEDS_TOOLNEEDS_COMPONENT_EXTENSIONNEEDS_ACTION_EXTENSIONDEFINESCXX_FLAGSADDITIONAL_SOURCESCEP_NAMEDESCRIPTIONEXTERNAL_LIBRARIESINCLUDE_DIRECTORIES" # possible lists
70 "DISABLEDNEEDS_QT_MODULESNEEDS_ITKNEEDS_QTXMLNEEDS_XSDNEEDS_XERCESCNEEDS_PYTHON" # possible options
76 #########################################################################
78 # CREATE CMAKE VARIABLES #
80 # * Create required and usefull
CMake variables
for the macro #
82 #########################################################################
84 # CMAKE CACHE VARIABLE
85 #
if it is the first cmake run, create the application variable with a correct initial value
86 if(NOT APPLICATION_${APPLICATION_NAME_CMAKE}_INTERNAL)
87 # add option to enable/disable
this extension and
set it to
true by
default
88 # Building the extension can be disabled by giving the argument DISABLED to the macro
89 # or by passing the flag -D${TYPE_EXTENSION_CMAKE}_${APPLICATION_NAME_CMAKE}_DISABLED:BOOL=TRUE
90 if(${APPLICATION_NAME_CMAKE}_DISABLED)
91 set(APPLICATION_${APPLICATION_NAME_CMAKE}_ENABLED FALSE)
93 set(APPLICATION_${APPLICATION_NAME_CMAKE}_ENABLED TRUE)
95 set(APPLICATION_${APPLICATION_NAME_CMAKE} ${APPLICATION_${APPLICATION_NAME_CMAKE}_ENABLED} CACHE BOOL
"Build application ${APPLICATION_NAME}")
96 set(APPLICATION_${APPLICATION_NAME_CMAKE}_INTERNAL TRUE CACHE INTERNAL
"Is variable APPLICATION_${APPLICATION_NAME} already created?")
99 # APPLICATION TARGET NAME
101 # NSIS requires that cpack component names do not feature space or "-" characters
102 set(APPLICATION_TARGET_NAME application_${APPLICATION_NAME})
104 set(APPLICATION_TARGET_NAME application-${APPLICATION_NAME})
109 # if this extension is enabled, do everything needed
110 # otherwise... do nothing
111 if (APPLICATION_${APPLICATION_NAME_CMAKE})
113 message(STATUS
"Building application ${APPLICATION_NAME}")
117 #########################################################################
119 # INCLUDE DIRECTORIES #
121 # * Include basic directories where to look header files #
122 # * Include also additional user provided directories #
123 # * These directories are used for compilation step #
125 #########################################################################
127 include_directories(${CAMITK_INCLUDE_DIRECTORIES})
128 include_directories(${CMAKE_CURRENT_BINARY_DIR})
129 include_directories(${CMAKE_CURRENT_SOURCE_DIR})
131 # USER INPUT DIRECTORIES
132 include_directories(${${APPLICATION_NAME_CMAKE}_INCLUDE_DIRECTORIES})
136 #########################################################################
138 # GATHER RESSOURCES #
140 # *
get all the headers (.h) and source files (.cpp) of the project
#
141 # * create the needed Qt files (using moc and uic) #
143 #########################################################################
145 # get all headers, sources and do what is needed for Qt
146 # one need to do this just before the add_library so that all defines, include directories and link directories
147 # are set properly (gather_headers_and_sources include the call to Qt moc and uic)
152 #########################################################################
154 # ADDITIONAL KNOWN LIBRARY DEPENDENCIES #
156 # * Look
for specific library needed #
157 # * Specific libraries are specified as option with the #
158 # NEEDS_LIBRARY syntax (see macro syntax
for more options)
#
159 # * Backward compatibility : Warn user if using old NEEDS_TOOL syntax #
161 #########################################################################
164 set(ITK_LIBRARIES
"")
165 if(${APPLICATION_NAME_CMAKE}_NEEDS_ITK) # ITK is required
166 if (MSVC)
# Visual Studio compiler
168 find_package(ITK REQUIRED)
170 message(STATUS
"${${TYPE_EXTENSION_CMAKE}_TARGET_NAME} : Found suitable version of ITK : ${ITK_VERSION} (required is 3.20.1)")
171 include(${ITK_USE_FILE})
173 debug ITKAlgorithms${CAMITK_DEBUG_POSTFIX}
174 optimized ITKAlgorithms
175 debug ITKBasicFilters${CAMITK_DEBUG_POSTFIX}
176 optimized ITKBasicFilters
177 debug ITKCommon${CAMITK_DEBUG_POSTFIX}
179 debug ITKIO${CAMITK_DEBUG_POSTFIX}
181 debug ITKNrrdIO${CAMITK_DEBUG_POSTFIX}.lib
182 debug itkgdcm${CAMITK_DEBUG_POSTFIX}.lib
183 debug itkjpeg12${CAMITK_DEBUG_POSTFIX}.lib
184 debug itkjpeg16${CAMITK_DEBUG_POSTFIX}.lib
185 debug itkopenjpeg${CAMITK_DEBUG_POSTFIX}.lib
186 debug itkpng${CAMITK_DEBUG_POSTFIX}.lib
187 debug itktiff${CAMITK_DEBUG_POSTFIX}.lib
188 debug itkjpeg8${CAMITK_DEBUG_POSTFIX}.lib
189 debug ITKSpatialObject${CAMITK_DEBUG_POSTFIX}.lib
190 debug itkvnl_inst${CAMITK_DEBUG_POSTFIX}.lib
191 debug itkvnl_algo${CAMITK_DEBUG_POSTFIX}.lib
192 debug itkv3p_netlib${CAMITK_DEBUG_POSTFIX}.lib
193 debug itkvnl${CAMITK_DEBUG_POSTFIX}.lib
194 debug itkvcl${CAMITK_DEBUG_POSTFIX}.lib
195 debug itkv3p_lsqr${CAMITK_DEBUG_POSTFIX}.lib
196 debug ITKMetaIO${CAMITK_DEBUG_POSTFIX}.lib
197 debug itksys${CAMITK_DEBUG_POSTFIX}.lib
198 debug ITKDICOMParser${CAMITK_DEBUG_POSTFIX}.lib
199 debug ITKEXPAT${CAMITK_DEBUG_POSTFIX}.lib
200 debug ITKniftiio${CAMITK_DEBUG_POSTFIX}.lib
201 debug ITKznz${CAMITK_DEBUG_POSTFIX}.lib
202 debug itkzlib${CAMITK_DEBUG_POSTFIX}.lib
211 message(FATAL_ERROR "ITK ( >= 3.20.1) is required by ${${TYPE_EXTENSION_CMAKE}_TARGET_NAME}
")
213 elseif(MSVC11 OR MSVC12) # Visual Studion 2012 /2013 => use ITK 4.3.2 at least
214 find_package(ITK 4.3.2 REQUIRED)
216 message(STATUS "${${TYPE_EXTENSION_CMAKE}_TARGET_NAME} : Found suitable version of ITK : ${ITK_VERSION} (required is 4.3.2)
")
217 include(${ITK_USE_FILE})
218 link_directories(${ITK_DIR}/../..)
221 debug ITKAlgorithms-4.3${CAMITK_DEBUG_POSTFIX}.lib
222 debug ITKCommon-4.3${CAMITK_DEBUG_POSTFIX}.lib
223 debug ITKNrrdIO-4.3${CAMITK_DEBUG_POSTFIX}.lib
224 debug itkgdcmCommon-4.3${CAMITK_DEBUG_POSTFIX}.lib
225 debug itkjpeg-4.3${CAMITK_DEBUG_POSTFIX}.lib
226 debug itkopenjpeg-4.3${CAMITK_DEBUG_POSTFIX}.lib
227 debug itkpng-4.3${CAMITK_DEBUG_POSTFIX}.lib
228 debug itktiff-4.3${CAMITK_DEBUG_POSTFIX}.lib
229 debug ITKSpatialObjects-4.3${CAMITK_DEBUG_POSTFIX}.lib
230 debug itkvnl_algo-4.3${CAMITK_DEBUG_POSTFIX}.lib
231 debug itkv3p_netlib-4.3${CAMITK_DEBUG_POSTFIX}.lib
232 debug itkvnl-4.3${CAMITK_DEBUG_POSTFIX}.lib
233 debug itkvcl-4.3${CAMITK_DEBUG_POSTFIX}.lib
234 debug itkv3p_lsqr-4.3${CAMITK_DEBUG_POSTFIX}.lib
235 debug ITKMetaIO-4.3${CAMITK_DEBUG_POSTFIX}.lib
236 debug itksys-4.3${CAMITK_DEBUG_POSTFIX}.lib
237 debug ITKDICOMParser-4.3${CAMITK_DEBUG_POSTFIX}.lib
238 debug ITKEXPAT-4.3${CAMITK_DEBUG_POSTFIX}.lib
239 debug ITKniftiio-4.3${CAMITK_DEBUG_POSTFIX}.lib
240 debug ITKznz-4.3${CAMITK_DEBUG_POSTFIX}.lib
241 debug itkzlib-4.3${CAMITK_DEBUG_POSTFIX}.lib
248 debug ITKIOGIPL-4.3${CAMITK_DEBUG_POSTFIX}.lib
249 debug ITKIONIFTI-4.3${CAMITK_DEBUG_POSTFIX}.lib
250 debug ITKIONRRD-4.3${CAMITK_DEBUG_POSTFIX}.lib
251 debug ITKIOPNG-4.3${CAMITK_DEBUG_POSTFIX}.lib
252 debug itkgdcmDICT-4.3${CAMITK_DEBUG_POSTFIX}.lib
253 debug itkgdcmDSED-4.3${CAMITK_DEBUG_POSTFIX}.lib
254 debug itkgdcmIOD-4.3${CAMITK_DEBUG_POSTFIX}.lib
255 debug itkgdcmjpeg8-4.3${CAMITK_DEBUG_POSTFIX}.lib
256 debug itkgdcmjpeg12-4.3${CAMITK_DEBUG_POSTFIX}.lib
257 debug itkgdcmjpeg16-4.3${CAMITK_DEBUG_POSTFIX}.lib
258 debug itkgdcmMSFF-4.3${CAMITK_DEBUG_POSTFIX}.lib
259 debug ITKgiftiio-4.3${CAMITK_DEBUG_POSTFIX}.lib
260 debug itkhdf5_cpp-4.3${CAMITK_DEBUG_POSTFIX}.lib
261 debug itkhdf5-4.3${CAMITK_DEBUG_POSTFIX}.lib
262 debug ITKMetaIO-4.3${CAMITK_DEBUG_POSTFIX}.lib
263 debug ITKIOBioRad-4.3${CAMITK_DEBUG_POSTFIX}.lib
264 debug ITKIOStimulate-4.3${CAMITK_DEBUG_POSTFIX}.lib
265 debug ITKIOTIFF-4.3${CAMITK_DEBUG_POSTFIX}.lib
266 debug ITKIOVTK-4.3${CAMITK_DEBUG_POSTFIX}.lib
267 debug ITKIOPNG-4.3${CAMITK_DEBUG_POSTFIX}.lib
268 debug ITKBiasCorrection-4.3${CAMITK_DEBUG_POSTFIX}.lib
269 debug ITKBioCell-4.3${CAMITK_DEBUG_POSTFIX}.lib
270 debug ITKFEM-4.3${CAMITK_DEBUG_POSTFIX}.lib
271 debug ITKIOBMP-4.3${CAMITK_DEBUG_POSTFIX}.lib
272 debug ITKIOCSV-4.3${CAMITK_DEBUG_POSTFIX}.lib
273 debug ITKIOGDCM-4.3${CAMITK_DEBUG_POSTFIX}.lib
274 debug ITKIOGE-4.3${CAMITK_DEBUG_POSTFIX}.lib
275 debug ITKIOGIPL-4.3${CAMITK_DEBUG_POSTFIX}.lib
276 debug ITKIOHDF5-4.3${CAMITK_DEBUG_POSTFIX}.lib
277 debug ITKIOImageBase-4.3${CAMITK_DEBUG_POSTFIX}.lib
278 debug ITKIOIPL-4.3${CAMITK_DEBUG_POSTFIX}.lib
279 debug ITKIOJPEG-4.3${CAMITK_DEBUG_POSTFIX}.lib
280 debug ITKIOLSM-4.3${CAMITK_DEBUG_POSTFIX}.lib
281 debug ITKIOMesh-4.3${CAMITK_DEBUG_POSTFIX}.lib
282 debug ITKIOMeta-4.3${CAMITK_DEBUG_POSTFIX}.lib
283 debug ITKIOSiemens-4.3${CAMITK_DEBUG_POSTFIX}.lib
284 debug ITKIOSpatialObjects-4.3${CAMITK_DEBUG_POSTFIX}.lib
285 debug ITKIOTransformBase-4.3${CAMITK_DEBUG_POSTFIX}.lib
286 debug ITKIOTransformHDF5-4.3${CAMITK_DEBUG_POSTFIX}.lib
287 debug ITKIOTransformInsightLegacy-4.3${CAMITK_DEBUG_POSTFIX}.lib
288 debug ITKIOTransformMatlab-4.3${CAMITK_DEBUG_POSTFIX}.lib
289 debug ITKIOXML-4.3${CAMITK_DEBUG_POSTFIX}.lib
290 debug ITKKLMRegionGrowing-4.3${CAMITK_DEBUG_POSTFIX}.lib
291 debug ITKLabelMap-4.3${CAMITK_DEBUG_POSTFIX}.lib
292 debug ITKMesh-4.3${CAMITK_DEBUG_POSTFIX}.lib
293 debug ITKMetaIO-4.3${CAMITK_DEBUG_POSTFIX}.lib
294 debug itkNetlibSlatec-4.3${CAMITK_DEBUG_POSTFIX}.lib
295 debug itkopenjpeg-4.3${CAMITK_DEBUG_POSTFIX}.lib
296 debug ITKOptimizers-4.3${CAMITK_DEBUG_POSTFIX}.lib
297 debug ITKOptimizersv4-4.3${CAMITK_DEBUG_POSTFIX}.lib
298 debug ITKPath-4.3${CAMITK_DEBUG_POSTFIX}.lib
299 debug itkpng-4.3${CAMITK_DEBUG_POSTFIX}.lib
300 debug ITKPolynomials-4.3${CAMITK_DEBUG_POSTFIX}.lib
301 debug ITKQuadEdgeMesh-4.3${CAMITK_DEBUG_POSTFIX}.lib
302 debug ITKReview-4.3${CAMITK_DEBUG_POSTFIX}.lib
303 debug ITKStatistics-4.3${CAMITK_DEBUG_POSTFIX}.lib
304 debug itkv3p_lsqr-4.3${CAMITK_DEBUG_POSTFIX}.lib
305 debug itkv3p_netlib-4.3${CAMITK_DEBUG_POSTFIX}.lib
306 debug itkvcl-4.3${CAMITK_DEBUG_POSTFIX}.lib
307 debug ITKVideoCore-4.3${CAMITK_DEBUG_POSTFIX}.lib
308 debug ITKVideoIO-4.3${CAMITK_DEBUG_POSTFIX}.lib
309 debug ITKVTK-4.3${CAMITK_DEBUG_POSTFIX}.lib
310 debug ITKVNLInstantiation-4.3${CAMITK_DEBUG_POSTFIX}.lib
311 debug ITKWatersheds-4.3${CAMITK_DEBUG_POSTFIX}.lib
312 # Release librariesdebug
313 optimized ITKAlgorithms-4.3.lib
314 optimized ITKCommon-4.3.lib
315 optimized ITKNrrdIO-4.3.lib
316 optimized itkgdcmCommon-4.3.lib
317 optimized itkjpeg-4.3.lib
318 optimized itkopenjpeg-4.3.lib
319 optimized itkpng-4.3.lib
320 optimized itktiff-4.3.lib
321 optimized ITKSpatialObjects-4.3.lib
322 optimized itkvnl_algo-4.3.lib
323 optimized itkv3p_netlib-4.3.lib
324 optimized itkvnl-4.3.lib
325 optimized itkvcl-4.3.lib
326 optimized itkv3p_lsqr-4.3.lib
327 optimized ITKMetaIO-4.3.lib
328 optimized itksys-4.3.lib
329 optimized ITKDICOMParser-4.3.lib
330 optimized ITKEXPAT-4.3.lib
331 optimized ITKniftiio-4.3.lib
332 optimized ITKznz-4.3.lib
333 optimized itkzlib-4.3.lib
334 optimized snmpapi.lib
337 optimized comctl32.lib
338 optimized wsock32.lib
339 optimized opengl32.lib
340 optimized ITKIOGIPL-4.3.lib
341 optimized ITKIONIFTI-4.3.lib
342 optimized ITKIONRRD-4.3.lib
343 optimized ITKIOPNG-4.3.lib
344 optimized itkgdcmDICT-4.3.lib
345 optimized itkgdcmDSED-4.3.lib
346 optimized itkgdcmIOD-4.3.lib
347 optimized itkgdcmjpeg8-4.3.lib
348 optimized itkgdcmjpeg12-4.3.lib
349 optimized itkgdcmjpeg16-4.3.lib
350 optimized itkgdcmMSFF-4.3.lib
351 optimized ITKgiftiio-4.3.lib
352 optimized itkhdf5_cpp-4.3.lib
353 optimized itkhdf5-4.3.lib
354 optimized ITKMetaIO-4.3.lib
355 optimized ITKIOBioRad-4.3.lib
356 optimized ITKIOStimulate-4.3.lib
357 optimized ITKIOTIFF-4.3.lib
358 optimized ITKIOVTK-4.3.lib
359 optimized ITKIOPNG-4.3.lib
360 optimized ITKBiasCorrection-4.3.lib
361 optimized ITKBioCell-4.3.lib
362 optimized ITKFEM-4.3.lib
363 optimized ITKIOBMP-4.3.lib
364 optimized ITKIOCSV-4.3.lib
365 optimized ITKIOGDCM-4.3.lib
366 optimized ITKIOGE-4.3.lib
367 optimized ITKIOGIPL-4.3.lib
368 optimized ITKIOHDF5-4.3.lib
369 optimized ITKIOImageBase-4.3.lib
370 optimized ITKIOIPL-4.3.lib
371 optimized ITKIOJPEG-4.3.lib
372 optimized ITKIOLSM-4.3.lib
373 optimized ITKIOMesh-4.3.lib
374 optimized ITKIOMeta-4.3.lib
375 optimized ITKIOSiemens-4.3.lib
376 optimized ITKIOSpatialObjects-4.3.lib
377 optimized ITKIOTransformBase-4.3.lib
378 optimized ITKIOTransformHDF5-4.3.lib
379 optimized ITKIOTransformInsightLegacy-4.3.lib
380 optimized ITKIOTransformMatlab-4.3.lib
381 optimized ITKIOXML-4.3.lib
382 optimized ITKKLMRegionGrowing-4.3.lib
383 optimized ITKLabelMap-4.3.lib
384 optimized ITKMesh-4.3.lib
385 optimized ITKMetaIO-4.3.lib
386 optimized itkNetlibSlatec-4.3.lib
387 optimized itkopenjpeg-4.3.lib
388 optimized ITKOptimizers-4.3.lib
389 optimized ITKOptimizersv4-4.3.lib
390 optimized ITKPath-4.3.lib
391 optimized itkpng-4.3.lib
392 optimized ITKPolynomials-4.3.lib
393 optimized ITKQuadEdgeMesh-4.3.lib
394 optimized ITKReview-4.3.lib
395 optimized ITKStatistics-4.3.lib
396 optimized itkv3p_lsqr-4.3.lib
397 optimized itkv3p_netlib-4.3.lib
398 optimized itkvcl-4.3.lib
399 optimized ITKVideoCore-4.3.lib
400 optimized ITKVideoIO-4.3.lib
401 optimized ITKVTK-4.3.lib
402 optimized ITKVNLInstantiation-4.3.lib
403 optimized ITKWatersheds-4.3.lib
406 message(FATAL_ERROR "ITK ( >= 4.3.2) is required by ${${TYPE_EXTENSION_CMAKE}_TARGET_NAME}
")
408 else() # New version of VS compiler not supported yet
409 message(FATAL_ERROR "ITK : Unsupported version of Visual Studio compiler. Please update CamiTK, downgrade your VS version to 2008/2010/2012 or contact CamiTK team support.
")
412 if (MINGW) # MinGW compiler
413 find_package(ITK 4.3.2 REQUIRED)
415 message(STATUS "${${TYPE_EXTENSION_CMAKE}_TARGET_NAME} : Found suitable version of ITK : ${ITK_VERSION} (required is 4.3.2)
")
416 include(${ITK_USE_FILE})
417 link_directories(${ITK_DIR}/../..)
427 ITKSpatialObjects-4.3
466 ITKBiasCorrection-4.3
482 ITKIOSpatialObjects-4.3
483 ITKIOTransformBase-4.3
484 ITKIOTransformHDF5-4.3
485 ITKIOTransformInsightLegacy-4.3
486 ITKIOTransformMatlab-4.3
488 ITKKLMRegionGrowing-4.3
508 ITKVNLInstantiation-4.3
512 message(FATAL_ERROR "ITK ( >= 4.3.2) is required by ${${TYPE_EXTENSION_CMAKE}_TARGET_NAME}
")
514 else() # Linux / MacOS compilers
515 find_package(ITK REQUIRED)
517 message(STATUS "${${TYPE_EXTENSION_CMAKE}_TARGET_NAME} : Found suitable version of ITK : ${ITK_VERSION} (required is 3.20.1)
")
518 include(${ITK_USE_FILE})
519 set(ITK_LIBRARIES ITKBasicFilters ITKCommon ITKIO)
521 message(FATAL_ERROR "ITK ( >= 3.20.1) is required by ${${TYPE_EXTENSION_CMAKE}_TARGET_NAME}
")
528 set(XERCESC_LIBRARIES)
529 if(${APPLICATION_NAME_CMAKE}_NEEDS_XERCESC)
530 # XercesC is required
531 find_package(XercesC REQUIRED)
533 include_directories(${XERCESC_INCLUDE_DIR})
534 set(XERCESC_LIBRARIES ${XERCESC_LIBRARY})
536 # most probably win32 or crosscompiling
537 message(FATAL_ERROR "${APPLICATION_NAME}: xerces-c required. Please provide Xerces-C path.
")
542 if(${APPLICATION_NAME_CMAKE}_NEEDS_XSD)
543 # XercesC is required
544 find_package(XercesC REQUIRED)
546 include_directories(${XERCESC_INCLUDE_DIR})
547 set(XERCESC_LIBRARIES ${XERCESC_LIBRARY})
548 find_package(XSD REQUIRED)
549 include_directories(${XSD_INCLUDE_DIR})
551 # most probably win32 or crosscompiling
552 message(FATAL_ERROR "${APPLICATION_NAME}: xerces-c required because of XSD cxx, please
set XERCESC_INCLUDE_DIR
")
557 set(PYTHON_LIBRARIES "")
558 if(${APPLICATION_NAME_CMAKE}_NEEDS_PYTHON)
559 message(STATUS "Python needed by ${APPLICATION_NAME}
")
560 find_package(PythonLibs 2.7 REQUIRED)
562 message(STATUS "Python found (needed by ${APPLICATION_NAME})
")
563 include_directories(${PYTHON_INCLUDE_DIRS})
564 # PYTHON_LIRARIES is automatically and correctly set by find_package
566 message(FATAL_ERROR "Python (2.7 or above) is required by ${APPLICATION_NAME} : please add your python installation dir to your PATH environment variable
")
571 set(QT_MODULES_LIBRARIES)
572 if(${APPLICATION_NAME_CMAKE}_NEEDS_QT_MODULES)
573 find_package(Qt4 "4.7
" COMPONENTS QtCore QtGui QtXml QtXmlPatterns QtWebkit QtOpenGL QtScript QtSQL QtNetwork REQUIRED)
575 message(SEND_ERROR "${APPLICATION_NAME} : Failed to find Qt 4.7 or greater. This is needed by CamiTK.
")
578 # CMake will add the Qt modules specific include directories
579 include(${QT_USE_FILE})
580 # Qt additional modules are required for linking
581 set(QT_MODULES_LIBRARIES ${QT_LIBRARIES})
585 if(${APPLICATION_NAME_CMAKE}_NEEDS_CEP_LIBRARIES)
586 foreach(CEP_LIBRARY_NEEDED ${${APPLICATION_NAME_CMAKE}_NEEDS_CEP_LIBRARIES})
587 message(STATUS "${CEP_LIBRARY_NEEDED} required by application ${APPLICATION_NAME}
")
588 string(TOUPPER ${CEP_LIBRARY_NEEDED} ${CEP_LIBRARY_NEEDED}_INTERNAL)
589 set(LIBRARY_${${CEP_LIBRARY_NEEDED}_INTERNAL} ON CACHE BOOL "Required by application ${APPLICATION_NAME}
" FORCE )
591 # Add the libraries to link against according to the dependencies
593 set(CEP_LIBRARIES ${CEP_LIBRARIES} debug ${CEP_LIBRARY_NEEDED}${CAMITK_DEBUG_POSTFIX}
594 optimized ${CEP_LIBRARY_NEEDED}
598 set(CEP_LIBRARIES ${CEP_LIBRARIES} library_${CEP_LIBRARY_NEEDED})
600 set(CEP_LIBRARIES ${CEP_LIBRARIES} library-${CEP_LIBRARY_NEEDED})
603 include_directories(${CAMITK_INCLUDE_DIR}/libraries/${CEP_LIBRARY_NEEDED})
604 include_directories(${CAMITK_USER_INCLUDE_DIR}/libraries/${CEP_LIBRARY_NEEDED})
605 include_directories(${CAMITK_BUILD_INCLUDE_DIR}/libraries/${CEP_LIBRARY_NEEDED})
606 include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../../libraries/${CEP_LIBRARY_NEEDED})
611 set(EXTERNAL_LIBRARIES)
612 if(${APPLICATION_NAME_CMAKE}_EXTERNAL_LIBRARIES)
613 foreach(EXTERNAL_LIBRARY ${${APPLICATION_NAME_CMAKE}_EXTERNAL_LIBRARIES})
614 if (MSVC) # TODO We have to decide how to handle debug version of external libraries
615 set(EXTERNAL_LIBRARIES ${EXTERNAL_LIBRARIES}
616 debug ${EXTERNAL_LIBRARY}${CAMITK_DEBUG_POSTFIX}
617 optimized ${EXTERNAL_LIBRARY}
620 set(EXTERNAL_LIBRARIES ${EXTERNAL_LIBRARIES} ${EXTERNAL_LIBRARY})
625 # BACKWARD COMPATIBILITY
627 # TODO CAMITK_DEPRECATED. This option is marked as deprecated. It is to be removed in CamiTK 4.0
628 # check deprecated (and warn)
629 # TODO CAMITK_DEPRECATED. This option is marked as deprecated. It is to be removed in CamiTK 4.0
630 if(${APPLICATION_NAME_CMAKE}_NEEDS_TOOL)
631 message(WARNING "Warning: ${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt:
camitk_application macro option NEEDS_TOOL is deprecated, please use NEEDS_CEP_LIBRARIES instead..
")
632 set(CEP_LIBRARIES ${CEP_LIBRARIES} ${${APPLICATION_NAME_CMAKE}_NEEDS_TOOL})
637 #########################################################################
639 # CAMITK ACTION / COMPONENT DEPENDENCIES #
641 # * Look for action / component dependencies #
642 # * Specific actions / components are specified as option with the #
643 # NEEDS_ACTION/COMPONENT_EXTENSION syntax #
645 #########################################################################
647 # COMPONENT EXTENSION DEPENDENCIES
648 set(COMPONENT_EXTENSION_LIBRARIES)
649 if(${APPLICATION_NAME_CMAKE}_NEEDS_COMPONENT_EXTENSION)
650 foreach(COMPONENT_NEEDED ${${APPLICATION_NAME_CMAKE}_NEEDS_COMPONENT_EXTENSION})
651 string(TOUPPER ${COMPONENT_NEEDED} ${COMPONENT_NEEDED}_INTERNAL)
652 set(COMPONENT_${${COMPONENT_NEEDED}_INTERNAL} ON CACHE BOOL "Required by application ${APPLICATION_NAME}
" FORCE )
654 set(COMPONENT_EXTENSION_LIBRARIES ${COMPONENT_EXTENSION_LIBRARIES}
655 debug ${CAMITK_BUILD_PRIVATE_LIB_DIR}/components/${COMPONENT_NEEDED}${CAMITK_DEBUG_POSTFIX}
656 optimized ${COMPONENT_NEEDED}
659 set(COMPONENT_EXTENSION_LIBRARIES ${COMPONENT_EXTENSION_LIBRARIES} ${COMPONENT_NEEDED})
661 include_directories(${CAMITK_INCLUDE_DIR}/components/${COMPONENT_NEEDED})
662 include_directories(${CAMITK_USER_INCLUDE_DIR}/components/${COMPONENT_NEEDED})
663 include_directories(${CAMITK_BUILD_INCLUDE_DIR}/components/${COMPONENT_NEEDED})
667 # ACTION EXTENSION DEPENDENCIES
668 set(ACTION_EXTENSION_LIBRARIES)
669 if(${APPLICATION_NAME_CMAKE}_NEEDS_ACTION_EXTENSION)
670 foreach(ACTION_NEEDED ${${APPLICATION_NAME_CMAKE}_NEEDS_ACTION_EXTENSION})
671 string(TOUPPER ${ACTION_NEEDED} ${ACTION_NEEDED}_INTERNAL)
672 set(ACTION_${${ACTION_NEEDED}_INTERNAL} ON CACHE BOOL "Required by extension ${APPLICATION_NAME}
" FORCE )
674 set(ACTION_EXTENSION_LIBRARIES ${ACTION_EXTENSION_LIBRARIES}
675 debug ${CAMITK_BUILD_PRIVATE_LIB_DIR}/actions/${ACTION_NEEDED}${CAMITK_DEBUG_POSTFIX}
676 optimized ${ACTION_NEEDED}
679 set(ACTION_EXTENSION_LIBRARIES ${ACTION_EXTENSION_LIBRARIES} ${ACTION_NEEDED})
681 include_directories(${CAMITK_INCLUDE_DIR}/actions/${ACTION_NEEDED})
682 include_directories(${CAMITK_USER_INCLUDE_DIR}/actions/${ACTION_NEEDED})
683 include_directories(${CAMITK_BUILD_INCLUDE_DIR}/actions/${ACTION_NEEDED})
689 #########################################################################
693 # * Link directories are used to indicate the compiler where #
694 # to look for folder containing libraries to link with. #
696 #########################################################################
697 # CAMITK BASIC LIB DIRECTORIES
698 link_directories(${CAMITK_LINK_DIRECTORIES})
702 #########################################################################
704 # TARGET COMPILATION DEFINITION #
706 # * Additional sources files to consider at compilation (.cpp) #
707 # * CMake project target definition #
709 #########################################################################
711 set(${APPLICATION_NAME}_SOURCES ${${APPLICATION_NAME}_SOURCES} ${${APPLICATION_NAME_CMAKE}_ADDITIONAL_SOURCES})
713 # CMAKE TARGET DEFINITION
714 add_executable(${APPLICATION_TARGET_NAME} ${${APPLICATION_NAME}_SOURCES})
718 #########################################################################
722 # * Flags are options to give to the compiler #
723 # * Add user input flags #
724 # * Add platform specific flags #
726 #########################################################################
728 # USER INPUT COMPILER FLAG
729 if(${APPLICATION_NAME_CMAKE}_DEFINES)
730 foreach (FLAG ${${APPLICATION_NAME_CMAKE}_DEFINES})
731 add_definitions(-D${FLAG})
735 # USER INPUT CUSTOM COMPILER FLAG
736 if(${APPLICATION_NAME_CMAKE}_CXX_FLAGS)
737 foreach (FLAG ${${APPLICATION_NAME_CMAKE}_CXX_FLAGS})
738 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${FLAG}
")
744 #########################################################################
748 # * Linking is the last stage of compilation #
749 # * Indicate what libraries to use for linking the target #
751 #########################################################################
753 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})
757 #########################################################################
761 # * Define the output directory (location and name) #
762 # * Define the output name of the library #
763 # * Add ${CAMITK_DEBUG_POSTFIX} suffix to Debug MSVC built libraries #
765 #########################################################################
769 set_target_properties(${APPLICATION_TARGET_NAME}
770 PROPERTIES OUTPUT_NAME camitk-${APPLICATION_NAME}
771 DEBUG_POSTFIX ${CAMITK_DEBUG_POSTFIX}
774 set_target_properties(${APPLICATION_TARGET_NAME}
775 PROPERTIES OUTPUT_NAME camitk-${APPLICATION_NAME}
779 # OUTPUT DIRECTORY LOCATION
780 # always in bin folder
781 set_target_properties(${APPLICATION_TARGET_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CAMITK_BUILD_BIN_DIR}
782 RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CAMITK_BUILD_BIN_DIR}
783 RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CAMITK_BUILD_BIN_DIR}
786 #########################################################################
790 # * When installing the project, header files (.h) and test data are #
791 # copied into a installation folder to determine. #
792 # * Indicate in this section, where to install your project and which #
793 # files to copy into that folder (during local/global installation) #
795 #########################################################################
797 # FOLDER INSTALLATION
798 # Indicate where to install the application
799 install(TARGETS ${APPLICATION_TARGET_NAME}
800 RUNTIME DESTINATION bin
801 COMPONENT ${APPLICATION_TARGET_NAME}
806 #########################################################################
808 # PROJECT DEPENDENCIES #
810 # * Add in this section library dependencies to other camitk projects #
811 # to keep a correct build order. #
813 #########################################################################
815 # CAMITKCORE LIBRARY DEPENDENCY
816 add_dependencies(${APPLICATION_TARGET_NAME} ${CAMITK_CORE_TARGET_LIB_NAME})
818 # COMPONENTS DEPENDENCIES
819 if(${APPLICATION_NAME_CMAKE}_NEEDS_COMPONENT_EXTENSION)
820 foreach(COMPONENT_NEEDED ${${APPLICATION_NAME_CMAKE}_NEEDS_COMPONENT_EXTENSION})
821 string(TOUPPER ${COMPONENT_NEEDED} COMPONENT_NEEDED_CMAKE)
822 # if this is not true, then the dependencies is from an external build, do not use add_dependencies
823 if (APPLICATION_${APPLICATION_NAME_CMAKE}_INTERNAL)
825 add_dependencies(${APPLICATION_TARGET_NAME} component-${COMPONENT_NEEDED})
830 # ACTIONS DEPENDENCIES
831 if(${APPLICATION_NAME_CMAKE}_NEEDS_ACTION_EXTENSION)
832 foreach(ACTION_NEEDED ${${APPLICATION_NAME_CMAKE}_NEEDS_ACTION_EXTENSION})
833 string(TOUPPER ${ACTION_NEEDED} ACTION_NEEDED_CMAKE)
834 # if this is not true, then the dependencies is from an external build, do not use add_dependencies
835 if (APPLICATION_${APPLICATION_NAME_CMAKE}_INTERNAL)
837 add_dependencies(${APPLICATION_TARGET_NAME} action-${ACTION_NEEDED})
842 # CEP LIBRARIES DEPENDENCIES
843 if(${APPLICATION_NAME_CMAKE}_NEEDS_CEP_LIBRARIES)
844 foreach(CEP_LIBRARY_NEEDED ${${APPLICATION_NAME_CMAKE}_NEEDS_CEP_LIBRARIES})
846 add_dependencies(${APPLICATION_TARGET_NAME} ${CEP_LIBRARY_NEEDED})
848 add_dependencies(${APPLICATION_TARGET_NAME} ${CEP_LIBRARY_NEEDED})
855 #########################################################################
857 # CDASH SUBPROJECT DESCRIPTION #
859 # * Update the XML descriton of the subprojects dependenicies #
862 #########################################################################
863 # CDASH XML SUBPROJECTS DESCRIPTION UPDATE
864 camitk_sub_project_add(APPLICATION ${APPLICATION_TARGET_NAME} DEPENDENCIES ${COMPONENT_EXTENSION_LIBRARIES} ${ACTION_EXTENSION_LIBRARIES} ${CAMITK_CORE_LIB_NAME} ${CEP_LIBRARIES})
868 #########################################################################
870 # PACKAGING CATEGORIZATION #
872 # * On Windows, when building a package (win32 installer), the #
873 # install shield wizard proposes you to select which component #
875 # * Each component to install has a short description following its #
876 # name to understand its role. #
877 # * This section deals with the categorization and the description #
878 # of the component in this installer. #
880 #########################################################################
882 # WINDOWS INSTALLER CATEGORIZATION
883 if(${APPLICATION_NAME_CMAKE}_CEP_NAME)
884 if (${APPLICATION_NAME_CMAKE}_CEP_NAME MATCHES "SDK
")
885 # The default SDK extensions are categorized as "required
" and are not "unselectable
" by the user at installation time
886 cpack_add_component(${APPLICATION_TARGET_NAME}
887 DISPLAY_NAME ${APPLICATION_TARGET_NAME}
888 DESCRIPTION ${${APPLICATION_NAME_CMAKE}_DESCRIPTION}
894 # Extension is selectable for installation in the wizard of the installer
895 cpack_add_component(${APPLICATION_TARGET_NAME}
896 DISPLAY_NAME ${APPLICATION_TARGET_NAME}
897 DESCRIPTION ${${APPLICATION_NAME_CMAKE}_DESCRIPTION}
898 GROUP ${${APPLICATION_NAME_CMAKE}_CEP_NAME}
902 # Extension if not categorized for packaging presentation
903 cpack_add_component(${APPLICATION_TARGET_NAME}
904 DISPLAY_NAME ${APPLICATION_TARGET_NAME}
905 DESCRIPTION ${${APPLICATION_NAME_CMAKE}_DESCRIPTION}
910 # additional unix system files/resources
912 # Man page installation
913 set(${APPLICATION_NAME_CMAKE}_MAN_PAGE ${CMAKE_CURRENT_SOURCE_DIR}/resources/camitk-${APPLICATION_NAME}.1)
914 if (EXISTS ${${APPLICATION_NAME_CMAKE}_MAN_PAGE})
915 message(STATUS "Found man page
for ${APPLICATION_TARGET_NAME}
")
916 install(FILES ${${APPLICATION_NAME_CMAKE}_MAN_PAGE}
917 DESTINATION ${CAMITK_APPLICATION_MAN_INSTALL_DIR}
920 # check if .in exists
921 if (EXISTS ${${APPLICATION_NAME_CMAKE}_MAN_PAGE}.in)
922 message(STATUS "Found man page configuration file
for ${APPLICATION_TARGET_NAME}
")
923 install(CODE "message(STATUS \
"Updating ${APPLICATION_NAME} man page (version ${CAMITK_VERSION_MAJOR}.${CAMITK_VERSION_MINOR} as of ${CURRENT_DATE})\")")
924 # set variable in sub-cmake shell
925 install(CODE
"set(APPLICATION_NAME ${APPLICATION_NAME})")
926 install(CODE "
set(CURRENT_DATE ${CURRENT_DATE})
")
927 install(CODE "set(CAMITK_VERSION_MAJOR ${CAMITK_VERSION_MAJOR})
")
928 install(CODE "set(CAMITK_VERSION_MINOR ${CAMITK_VERSION_MINOR})
")
929 # remove previous version
930 install(CODE "execute_process(COMMAND ${CMAKE_COMMAND} -E
remove -f ${CMAKE_CURRENT_BINARY_DIR}/
camitk-${APPLICATION_NAME}.1)
")
931 # configure current version
932 install(CODE "configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/
camitk-${APPLICATION_NAME}.1.in ${CMAKE_CURRENT_BINARY_DIR}/
camitk-${APPLICATION_NAME}.1 @ONLY)
")
934 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/camitk-${APPLICATION_NAME}.1 DESTINATION ${CAMITK_APPLICATION_MAN_INSTALL_DIR})
939 set(${APPLICATION_NAME_CMAKE}_DESKTOP ${CMAKE_CURRENT_SOURCE_DIR}/resources/camitk-${APPLICATION_NAME}.desktop)
940 if (EXISTS ${${APPLICATION_NAME_CMAKE}_DESKTOP})
941 message(STATUS "Found desktop file
for ${APPLICATION_TARGET_NAME}
")
942 install(FILES ${${APPLICATION_NAME_CMAKE}_DESKTOP} DESTINATION ${CAMITK_APPLICATION_DESKTOP_INSTALL_DIR})
946 set(${APPLICATION_NAME_CMAKE}_PIXMAP ${CMAKE_CURRENT_SOURCE_DIR}/resources/camitk-${APPLICATION_NAME}.xpm)
947 if (EXISTS ${${APPLICATION_NAME_CMAKE}_PIXMAP})
948 message(STATUS "Found pixmap
for ${APPLICATION_TARGET_NAME}
")
949 install(FILES ${${APPLICATION_NAME_CMAKE}_PIXMAP} DESTINATION ${CAMITK_APPLICATION_PIXMAP_INSTALL_DIR})
954 endif() #APPLICATION_${APPLICATION_NAME_CMAKE}
A pseudo-namespace used to group CMake macros and functions.
get_directory_name()
macro get_directory_name set the variable VariableName to the name of the last directory of FullPathD...
Definition: GetDirectoryName.h:14
test result execute_process(COMMAND ${CMAKE_COMMAND}-E remove-f ${CAMITK_TEST_COMMAND_FILE}${CAMITK_TEST_COMMAND_RESULT_FILE}${CAMITK_TEST_COMMAND_OUTPUT_FILE}${CAMITK_TEST_PASS_FILE_COMMAND_FILE}${CAMITK_TEST_PASS_FILE_OUTPUT_FILE}${CAMITK_TEST_PASS_FILE_RESULT_FILE}) file(WRITE $
Definition: CamiTKTestPassFile.h:19
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
camitk_application()
macro camitk_application simplify writing a CMakeLists.txt for CamiTK application extension ...
Definition: CamiTKApplication.h:55