Computer Assisted Medical Intervention Tool Kit  version 5.2
 
Loading...
Searching...
No Matches
CamiTKApplication.h
Go to the documentation of this file.
1
64
65 # Instruct CMake to run moc automatically when needed.
66 set(CMAKE_AUTOMOC ON)
67
68 #########################################################################
69 # #
70 # ARGUMENTS PARSING #
71 # #
72 # * Use a macro to create the CMAKE variables according to the #
73 # provided options as input. #
74 # #
75 #########################################################################
76
77 get_directory_name(${CMAKE_CURRENT_SOURCE_DIR} APPLICATION_NAME)
78
79 set(options DISABLED NO_GUI NEEDS_ITK NEEDS_XSD NEEDS_XERCESC NEEDS_PYTHON)
80 set(oneValueArgs "")
81 set(multiValueArgs NEEDS_CEP_LIBRARIES NEEDS_TOOL NEEDS_COMPONENT_EXTENSION NEEDS_ACTION_EXTENSION NEEDS_VIEWER_EXTENSION DEFINES CXX_FLAGS ADDITIONAL_SOURCES CEP_NAME DESCRIPTION EXTERNAL_LIBRARIES INCLUDE_DIRECTORIES EXTRA_TRANSLATE_LANGUAGE)
82 cmake_parse_arguments(${APPLICATION_NAME_CMAKE} "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} )
83
84
85
86 #########################################################################
87 # #
88 # CREATE CMAKE VARIABLES #
89 # #
90 # * Create required and useful CMake variables for the macro #
91 # #
92 #########################################################################
93
94 # CMAKE CACHE VARIABLE
95 # if it is the first cmake run, create the application variable with a correct initial value
96 if(NOT APPLICATION_${APPLICATION_NAME_CMAKE}_INTERNAL)
97 # add option to enable/disable this extension and set it to true by default
98 # Building the extension can be disabled by giving the argument DISABLED to the macro
99 # or by passing the flag -D${TYPE_EXTENSION_CMAKE}_${APPLICATION_NAME_CMAKE}_DISABLED:BOOL=TRUE
100 if(${APPLICATION_NAME_CMAKE}_DISABLED)
101 set(APPLICATION_${APPLICATION_NAME_CMAKE}_ENABLED FALSE)
102 else()
103 set(APPLICATION_${APPLICATION_NAME_CMAKE}_ENABLED TRUE)
104 endif()
105 set(APPLICATION_${APPLICATION_NAME_CMAKE} ${APPLICATION_${APPLICATION_NAME_CMAKE}_ENABLED} CACHE BOOL "Build application ${APPLICATION_NAME}")
106 set(APPLICATION_${APPLICATION_NAME_CMAKE}_INTERNAL TRUE CACHE INTERNAL "Is variable APPLICATION_${APPLICATION_NAME} already created?")
107 endif()
108
109 # APPLICATION TARGET NAME
110 if (PACKAGING_NSIS)
111 # NSIS requires that cpack component names do not feature space or "-" characters
112 set(APPLICATION_TARGET_NAME application_${APPLICATION_NAME})
113 else()
114 set(APPLICATION_TARGET_NAME application-${APPLICATION_NAME})
115 endif()
116
117
118
119 # if this extension is enabled, do everything needed
120 # otherwise... do nothing
121 if (APPLICATION_${APPLICATION_NAME_CMAKE})
122
123 message(STATUS "Building application ${APPLICATION_NAME}")
124
125
126
127 #########################################################################
128 # #
129 # INCLUDE DIRECTORIES #
130 # #
131 # * Include basic directories where to look header files #
132 # * Include also additional user provided directories #
133 # * These directories are used for compilation step #
134 # #
135 #########################################################################
136 # BASIC DIRECTORIES
137 include_directories(${CMAKE_CURRENT_SOURCE_DIR})
138 include_directories(${CMAKE_CURRENT_BINARY_DIR})
139 include_directories(${CAMITK_INCLUDE_DIRECTORIES})
140
141 # USER INPUT DIRECTORIES
142 include_directories(${${APPLICATION_NAME_CMAKE}_INCLUDE_DIRECTORIES})
143
144
145
146 #########################################################################
147 # #
148 # GATHER RESOURCES #
149 # #
150 # * get all the headers (.h) and source files (.cpp) of the project #
151 # * create the needed Qt files (using moc and uic) #
152 # * On Windows, Visual Studio, group .moc and .ui files #
153 # in subdirectories #
154 # #
155 #########################################################################
156
157 # get all headers, sources and do what is needed for Qt
158 # one need to do this just before the add_library so that all defines, include directories and link directories
159 # are set properly (gather_headers_and_sources include the call to Qt moc and uic)
160 gather_headers_and_sources(${APPLICATION_NAME})
161
162
163
164 #########################################################################
165 # #
166 # TARGET COMPILATION DEFINITION #
167 # #
168 # * Additional sources files to consider at compilation (.cpp) #
169 # * CMake project target definition #
170 # #
171 #########################################################################
172 # EXTERNAL SOURCES
173 set(${APPLICATION_NAME}_SOURCES ${${APPLICATION_NAME}_SOURCES} ${${APPLICATION_NAME_CMAKE}_ADDITIONAL_SOURCES})
174
175 # APPLE BUNDLE DEFINITIONS
176 if(APPLE)
177 set(MACOSX_BUNDLE_INFO_STRING "${APPLICATION_TARGET_NAME} ${CAMITK_SHORT_VERSION_STRING}")
178 set(MACOSX_BUNDLE_BUNDLE_VERSION "${APPLICATION_TARGET_NAME} ${CAMITK_SHORT_VERSION_STRING}")
179 set(MACOSX_BUNDLE_LONG_VERSION_STRING "${APPLICATION_TARGET_NAME} ${CAMITK_SHORT_VERSION_STRING}")
180 set(MACOSX_BUNDLE_SHORT_VERSION_STRING "${CAMITK_SHORT_VERSION_STRING}")
181 set(MACOSX_BUNDLE_COPYRIGHT "Univ. Grenoble Alpes")
182 set(MACOSX_BUNDLE_ICON_FILE "${CMAKE_CURRENT_SOURCE_DIR}/resources/camitk-${APPLICATION_NAME}.icns")
183 set(MACOSX_BUNDLE_BUNDLE_NAME "${APPLICATION_TARGET_NAME}")
184
185 set(MACOSX_BUNDLE_RESOURCES "${CMAKE_CURRENT_BINARY_DIR}/${APPLICATION_TARGET_NAME}.app/Contents/Resources")
186 set(MACOSX_BUNDLE_ICON "${MACOSX_BUNDLE_ICON_FILE}")
187 execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory ${MACOSX_BUNDLE_RESOURCES})
188 execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${MACOSX_BUNDLE_ICON} ${MACOSX_BUNDLE_RESOURCES})
189 endif()
190
191
192
193 #########################################################################
194 # #
195 # ADDITIONAL KNOWN LIBRARY DEPENDENCIES #
196 # #
197 # * Look for specific library needed #
198 # * Specific libraries are specified as option with the #
199 # NEEDS_LIBRARY syntax (see macro syntax for more options) #
200 # * Backward compatibility : Warn user if using old NEEDS_TOOL syntax #
201 # #
202 #########################################################################
203
204 # Looking for ITK
205 set(ITK_LIBRARIES "")
206 if(${APPLICATION_NAME_CMAKE}_NEEDS_ITK)
207 find_package(ITK REQUIRED)
208 if(ITK_FOUND)
209 include(${ITK_USE_FILE})
210 set(ITK_VERSION ${ITK_VERSION_MAJOR}.${ITK_VERSION_MINOR}.${ITK_VERSION_PATCH}) #ITK_VERSION is not always set
211 set(CAMITK_ITK_VERSION ${ITK_VERSION_MAJOR}.${ITK_VERSION_MINOR})
212 message(STATUS "${APPLICATION_TARGET_NAME}: Found ITK version ${ITK_VERSION}")
213
214 if ((${ITK_VERSION} VERSION_GREATER "4")) # ITK 4.9 on Windows, maybe a lesser version for Linux.
215 if(MSVC)
216 set(ITK_DIR ${ITK_DIR}/../..)
217 # Construct list of ITK libraries for linking = CAMITK_ITK_LIBRARIES
218 foreach(ITK_LIBRARY ${ITK_LIBRARIES})
219 string(SUBSTRING ${ITK_LIBRARY} 0 3 ${ITK_LIBRARY}_PREFIX)
220 # Some libraries have not the expected 'itk' prefix. Add it then
221 if((NOT ${${ITK_LIBRARY}_PREFIX} STREQUAL "itk") AND (NOT ${${ITK_LIBRARY}_PREFIX} STREQUAL "ITK"))
222 set(ITK_LIBRARY itk${ITK_LIBRARY})
223 endif()
224 set(CAMITK_ITK_LIBRARIES ${CAMITK_ITK_LIBRARIES} debug ${ITK_DIR}/${ITK_LIBRARY}-${CAMITK_ITK_VERSION}${CAMITK_DEBUG_POSTFIX}.lib optimized ${ITK_DIR}/${ITK_LIBRARY}-${CAMITK_ITK_VERSION}.lib)
225 endforeach()
226 elseif(UNIX)
227 set(CAMITK_ITK_LIBRARIES ${ITK_LIBRARIES})
228 elseif(APPLE)
229 message(WARNING "CamiTKExtension.cmake: ITK LIBRARY NOT SET FOR APPLE")
230 endif()
231 else()
232 message(FATAL_ERROR "Wrong version of ITK : ${ITK_VERSION}. Required is at least 4.x")
233 endif()
234 else()
235 message(FATAL_ERROR "ITK not found but required for ${APPLICATION_TARGET_NAME}")
236 endif()
237 endif()
238
239 # XERCES-C
240 set(XERCESC_LIBRARIES)
241 if(${APPLICATION_NAME_CMAKE}_NEEDS_XERCESC)
242 # XercesC is required
243 find_package(XercesC REQUIRED)
244 if (XERCESC_FOUND)
245 include_directories(${XERCESC_INCLUDE_DIR})
246 set(XERCESC_LIBRARIES ${XERCESC_LIBRARY})
247 else()
248 # most probably win32 or crosscompiling
249 message(FATAL_ERROR "${APPLICATION_NAME}: xerces-c required. Please provide Xerces-C path.")
250 endif()
251 endif()
252
253 # XSD
254 if(${APPLICATION_NAME_CMAKE}_NEEDS_XSD)
255 # XercesC is required
256 find_package(XercesC REQUIRED)
257 if (XERCESC_FOUND)
258 include_directories(${XERCESC_INCLUDE_DIR})
259 set(XERCESC_LIBRARIES ${XERCESC_LIBRARY})
260 find_package(XSD REQUIRED)
261 include_directories(${XSD_INCLUDE_DIR})
262 else()
263 # most probably win32 or crosscompiling
264 message(FATAL_ERROR "${APPLICATION_NAME}: xerces-c required because of XSD cxx, please set XERCESC_INCLUDE_DIR")
265 endif()
266 endif()
267
268 # PYTHON
269 set(PYTHON_LIBRARIES "")
270 if(${APPLICATION_NAME_CMAKE}_NEEDS_PYTHON)
271 message(STATUS "Python needed by ${APPLICATION_NAME}")
272 find_package(PythonLibs 2.7 REQUIRED)
273 if(PYTHONLIBS_FOUND)
274 message(STATUS "Python found (needed by ${APPLICATION_NAME})")
275 include_directories(${PYTHON_INCLUDE_DIRS})
276 # PYTHON_LIBRARIES is automatically and correctly set by find_package
277 else()
278 message(FATAL_ERROR "Python (2.7 or above) is required by ${APPLICATION_NAME} : please add your python installation dir to your PATH environment variable")
279 endif()
280 endif()
281
282 # EXTERNAL LIBRARIES
283 set(EXTERNAL_LIBRARIES)
284 if(${APPLICATION_NAME_CMAKE}_EXTERNAL_LIBRARIES)
285 foreach(EXTERNAL_LIBRARY ${${APPLICATION_NAME_CMAKE}_EXTERNAL_LIBRARIES})
286 if (MSVC) # TODO We have to decide how to handle debug version of external libraries
287 set(EXTERNAL_LIBRARIES ${EXTERNAL_LIBRARIES}
288 debug ${EXTERNAL_LIBRARY}${CAMITK_DEBUG_POSTFIX}.lib
289 optimized ${EXTERNAL_LIBRARY}.lib
290 )
291 else()
292 set(EXTERNAL_LIBRARIES ${EXTERNAL_LIBRARIES} ${EXTERNAL_LIBRARY})
293 endif()
294 endforeach()
295 endif()
296
297
298
299 #########################################################################
300 # #
301 # LINK DIRECTORIES #
302 # #
303 # * Link directories are used to indicate the compiler where #
304 # to look for folder containing libraries to link with. #
305 # #
306 #########################################################################
307 # CAMITK BASIC LIB DIRECTORIES
308 link_directories(${CAMITK_LINK_DIRECTORIES})
309
310
311
312 #########################################################################
313 # #
314 # TARGET COMPILATION DEFINITION #
315 # #
316 # * Additional sources files to consider at compilation (.cpp) #
317 # * CMake project target definition #
318 # #
319 #########################################################################
320 # CMAKE TARGET DEFINITION
321 # add_executable(${APPLICATION_TARGET_NAME} ${${APPLICATION_NAME}_SOURCES})
322 if(WIN32 AND (NOT ${APPLICATION_NAME_CMAKE}_NO_GUI))
323 add_executable(${APPLICATION_TARGET_NAME} WIN32 ${${APPLICATION_NAME}_SOURCES})
324 else()
325 add_executable(${APPLICATION_TARGET_NAME} ${${APPLICATION_NAME}_SOURCES})
326 endif()
327
328 #########################################################################
329 # #
330 # QT LINKING LIBRARIES #
331 # #
332 # * Set at linking the Qt5 libraries #
333 # #
334 #########################################################################
335 target_link_libraries(${APPLICATION_TARGET_NAME} ${CAMITK_QT_LIBRARIES})
336
337
338
339 #########################################################################
340 # #
341 # CAMITK ACTION / COMPONENT / LIBRARIES DEPENDENCIES #
342 # #
343 # * Look for action / component / libraries dependencies #
344 # * Specific actions / components / libraries are specified as option #
345 # with the NEEDS_ACTION/COMPONENT_EXTENSION/CEP_LIBRARIES syntax #
346 # * Add dependencies to library-camitkcore and the testing #
347 # action/component if test are runned on it #
348 # #
349 #########################################################################
350
351 # 1) CAMITKCORE LIBRARY DEPENDENCY
352 # add the target dependency (i.e., enable proper parallelization of the build process
353 # only if inside the sdk build
354 if(CAMITK_COMMUNITY_EDITION_BUILD)
355 add_dependencies(${APPLICATION_TARGET_NAME} ${CAMITK_CORE_TARGET_LIB_NAME})
356 # add the dependency to the core automoc target
357 set_property(TARGET ${APPLICATION_TARGET_NAME} APPEND PROPERTY AUTOGEN_TARGET_DEPENDS ${CAMITK_CORE_TARGET_LIB_NAME})
358 endif()
359
360 # 2) COMPONENTS DEPENDENCIES
361 if(${APPLICATION_NAME_CMAKE}_NEEDS_COMPONENT_EXTENSION)
362 set(COMPONENTS_DEPENDENCY_LIST "") #use for generating the project.xml file
363 foreach(COMPONENT_NEEDED ${${APPLICATION_NAME_CMAKE}_NEEDS_COMPONENT_EXTENSION})
364 # include directories from build, camitk (local or global install).
365 include_directories(${CAMITK_BUILD_INCLUDE_DIR}/components/${COMPONENT_NEEDED})
366 include_directories(${CAMITK_INCLUDE_DIR}/components/${COMPONENT_NEEDED})
367 # file dependency
368 if (MSVC)
369 list(APPEND COMPONENT_EXTENSION_LIBRARIES
370 debug ${CAMITK_BUILD_PRIVATE_LIB_DIR}/components/${COMPONENT_NEEDED}${CAMITK_DEBUG_POSTFIX}.lib
371 optimized ${COMPONENT_NEEDED}
372 )
373 else()
374 list(APPEND COMPONENT_EXTENSION_LIBRARIES ${COMPONENT_NEEDED})
375 endif()
376 # CMake / CDash dependencies
377 if(PACKAGING_NSIS)
378 add_dependencies(${APPLICATION_TARGET_NAME} component_${COMPONENT_NEEDED})
379 # add the dependency to the component automoc target
380 set_property(TARGET ${APPLICATION_TARGET_NAME} APPEND PROPERTY AUTOGEN_TARGET_DEPENDS component_${COMPONENT_NEEDED})
381 else()
382 add_dependencies(${APPLICATION_TARGET_NAME} component-${COMPONENT_NEEDED})
383 list(APPEND COMPONENTS_DEPENDENCY_LIST component-${COMPONENT_NEEDED})
384 # add the dependency to the component automoc target
385 set_property(TARGET ${APPLICATION_TARGET_NAME} APPEND PROPERTY AUTOGEN_TARGET_DEPENDS component-${COMPONENT_NEEDED})
386 endif()
387 endforeach()
388 endif()
389
390 # 3) ACTIONS DEPENDENCIES
391 if(${APPLICATION_NAME_CMAKE}_NEEDS_ACTION_EXTENSION)
392 set(ACTIONS_DEPENDENCY_LIST "") #use for generating the project.xml file
393 foreach(ACTION_NEEDED ${${APPLICATION_NAME_CMAKE}_NEEDS_ACTION_EXTENSION})
394 # include directories from build, camitk (local or global install).
395 include_directories(${CAMITK_BUILD_INCLUDE_DIR}/actions/${ACTION_NEEDED})
396 include_directories(${CAMITK_INCLUDE_DIR}/actions/${ACTION_NEEDED})
397 # file dependency
398 if (MSVC)
399 list(APPEND ACTION_EXTENSION_LIBRARIES
400 debug ${CAMITK_BUILD_PRIVATE_LIB_DIR}/actions/${ACTION_NEEDED}${CAMITK_DEBUG_POSTFIX}.lib
401 optimized ${ACTION_NEEDED}
402 )
403 else()
404 list(APPEND ACTION_EXTENSION_LIBRARIES ${ACTION_NEEDED})
405 endif()
406 # CMake / CDash dependencies
407 if (PACKAGING_NSIS)
408 add_dependencies(${APPLICATION_TARGET_NAME} action_${ACTION_NEEDED})
409 # add the dependency to the action automoc target
410 set_property(TARGET ${APPLICATION_TARGET_NAME} APPEND PROPERTY AUTOGEN_TARGET_DEPENDS action_${ACTION_NEEDED})
411 else()
412 add_dependencies(${APPLICATION_TARGET_NAME} action-${ACTION_NEEDED})
413 list(APPEND ACTIONS_DEPENDENCY_LIST action-${ACTION_NEEDED})
414 # add the dependency to the action automoc target
415 set_property(TARGET ${APPLICATION_TARGET_NAME} APPEND PROPERTY AUTOGEN_TARGET_DEPENDS action-${ACTION_NEEDED})
416 endif()
417 endforeach()
418 endif()
419
420 # 4) VIEWERS DEPENDENCIES
421 # differentiate SDK from other applications
422 if(${APPLICATION_NAME_CMAKE}_NEEDS_VIEWER_EXTENSION)
423 set(VIEWERS_DEPENDENCY_LIST "") #use for generating the project.xml file
424 foreach(VIEWER_NEEDED ${${APPLICATION_NAME_CMAKE}_NEEDS_VIEWER_EXTENSION})
425 # include directories from build, camitk (local or global install).
426 include_directories(${CAMITK_BUILD_INCLUDE_DIR}/viewers/${VIEWER_NEEDED})
427 include_directories(${CAMITK_INCLUDE_DIR}/viewers/${VIEWER_NEEDED})
428 # library dependency
429 if (MSVC)
430 list(APPEND VIEWER_EXTENSION_LIBRARIES
431 debug ${CAMITK_BUILD_PRIVATE_LIB_DIR}/viewers/${VIEWER_NEEDED}${CAMITK_DEBUG_POSTFIX}.lib
432 optimized ${VIEWER_NEEDED}
433 )
434 else()
435 list(APPEND VIEWER_EXTENSION_LIBRARIES ${VIEWER_NEEDED})
436 endif()
437 # CMake / CDash dependencies
438 if (PACKAGING_NSIS)
439 add_dependencies(${APPLICATION_TARGET_NAME} viewer_${VIEWER_NEEDED})
440 # add the dependency to the viewer automoc target
441 set_property(TARGET ${APPLICATION_TARGET_NAME} APPEND PROPERTY AUTOGEN_TARGET_DEPENDS viewer_${VIEWER_NEEDED})
442 else()
443 add_dependencies(${APPLICATION_TARGET_NAME} viewer-${VIEWER_NEEDED})
444 list(APPEND VIEWERS_DEPENDENCY_LIST viewer-${VIEWER_NEEDED})
445 # add the dependency to the viewer automoc target
446 set_property(TARGET ${APPLICATION_TARGET_NAME} APPEND PROPERTY AUTOGEN_TARGET_DEPENDS viewer-${VIEWER_NEEDED})
447 endif()
448 endforeach()
449 endif()
450
451 # 5) CEP LIBRARIES DEPENDENCIES
452 if(${APPLICATION_NAME_CMAKE}_NEEDS_CEP_LIBRARIES)
453 set(CEP_LIBRARIES_DEPENDENCY_LIST "") #use for generating the project.xml file
454 foreach(CEP_LIBRARY_NEEDED ${${APPLICATION_NAME_CMAKE}_NEEDS_CEP_LIBRARIES})
455 # include directories from build, camitk (local or global install).
456 include_directories(${CAMITK_BUILD_INCLUDE_DIR}/libraries/${CEP_LIBRARY_NEEDED})
457 include_directories(${CAMITK_INCLUDE_DIR}/libraries/${CEP_LIBRARY_NEEDED})
458 # file dependency
459 if (MSVC)
460 list(APPEND CEP_LIBRARIES debug ${CEP_LIBRARY_NEEDED}${CAMITK_DEBUG_POSTFIX}.lib
461 optimized ${CEP_LIBRARY_NEEDED}
462 )
463 else()
464 list(APPEND CEP_LIBRARIES ${CEP_LIBRARY_NEEDED})
465 endif()
466 # CMake / CDash dependencies
467 if (PACKAGING_NSIS)
468 add_dependencies(${APPLICATION_TARGET_NAME} library_${CEP_LIBRARY_NEEDED})
469 # add the dependency to the library automoc target
470 set_property(TARGET ${APPLICATION_TARGET_NAME} APPEND PROPERTY AUTOGEN_TARGET_DEPENDS library_${CEP_LIBRARY_NEEDED})
471 else()
472 add_dependencies(${APPLICATION_TARGET_NAME} library-${CEP_LIBRARY_NEEDED})
473 list(APPEND CEP_LIBRARIES_DEPENDENCY_LIST library-${CEP_LIBRARY_NEEDED})
474 # add the dependency to the library automoc target
475 set_property(TARGET ${APPLICATION_TARGET_NAME} APPEND PROPERTY AUTOGEN_TARGET_DEPENDS library-${CEP_LIBRARY_NEEDED})
476 endif()
477 endforeach()
478 endif()
479
480
481
482 #########################################################################
483 # #
484 # COMPILATION FLAG #
485 # #
486 # * Flags are options to give to the compiler #
487 # * Add user input flags #
488 # * Add platform specific flags #
489 # #
490 #########################################################################
491
492 # USER INPUT COMPILER FLAG
493 if(${APPLICATION_NAME_CMAKE}_DEFINES)
494 foreach (FLAG ${${APPLICATION_NAME_CMAKE}_DEFINES})
495 add_definitions(-D${FLAG})
496 endforeach()
497 endif()
498
499 # USER INPUT CUSTOM COMPILER FLAG
500 if(${APPLICATION_NAME_CMAKE}_CXX_FLAGS)
501 foreach (FLAG ${${APPLICATION_NAME_CMAKE}_CXX_FLAGS})
502 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${FLAG}")
503 endforeach()
504 endif()
505
506
507
508 #########################################################################
509 # #
510 # LINKING #
511 # #
512 # * Linking is the last stage of compilation #
513 # * Indicate what libraries to use for linking the target #
514 # #
515 #########################################################################
516 # LINKING LIBRARIES
517 target_link_libraries(${APPLICATION_TARGET_NAME} ${CAMITK_CORE_LIBRARIES} ${CAMITK_LIBRARIES} ${COMPONENT_EXTENSION_LIBRARIES} ${ACTION_EXTENSION_LIBRARIES} ${VIEWER_EXTENSION_LIBRARIES} ${CEP_LIBRARIES} ${XERCESC_LIBRARY} ${CAMITK_ITK_LIBRARIES} ${PYTHON_LIBRARIES} ${EXTERNAL_LIBRARIES})
518
519
520
521 #########################################################################
522 # #
523 # OUTPUT #
524 # #
525 # * Define the output directory (location and name) #
526 # * Define the output name of the library #
527 # * Add ${CAMITK_DEBUG_POSTFIX} suffix to Debug MSVC built libraries #
528 # #
529 #########################################################################
530
531 # OUTPUT NAME
532 if (MSVC)
533 set_target_properties(${APPLICATION_TARGET_NAME}
534 PROPERTIES OUTPUT_NAME camitk-${APPLICATION_NAME}
535 DEBUG_POSTFIX ${CAMITK_DEBUG_POSTFIX}
536 )
537 else()
538 set_target_properties(${APPLICATION_TARGET_NAME}
539 PROPERTIES OUTPUT_NAME camitk-${APPLICATION_NAME}
540 )
541 endif()
542
543 # OUTPUT DIRECTORY LOCATION
544 # always in bin folder
545 set_target_properties(${APPLICATION_TARGET_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CAMITK_BUILD_BIN_DIR}
546 RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CAMITK_BUILD_BIN_DIR}
547 RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CAMITK_BUILD_BIN_DIR}
548 )
549
550 #########################################################################
551 # #
552 # INSTALLATION #
553 # #
554 # * When installing the project, header files (.h) and test data are #
555 # copied into a installation folder to determine. #
556 # * Indicate in this section, where to install your project and which #
557 # files to copy into that folder (during local/global installation) #
558 # #
559 #########################################################################
560
561 # FOLDER INSTALLATION
562 message(STATUS "Installing application ${APPLICATION_TARGET_NAME} in ${CMAKE_INSTALL_BINDIR}")
563 install(TARGETS ${APPLICATION_TARGET_NAME}
564 RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
565 COMPONENT ${APPLICATION_TARGET_NAME}
566 )
567
568
569
570 #########################################################################
571 # #
572 # CDASH SUBPROJECT DESCRIPTION #
573 # #
574 # * Update the XML descriton of the subprojects dependenicies #
575 # for CDash. #
576 # #
577 #########################################################################
578 # CDASH XML SUBPROJECTS DESCRIPTION UPDATE
579# if(NOT ((APPLICATION_TARGET_NAME STREQUAL "application-testactions") OR (APPLICATION_TARGET_NAME STREQUAL "application-testcomponents")))
580 # We will add manually the CDash dependencies of the testing applications
581 # See CamiTKCDashPublishSubProject.cmake
582 camitk_register_subproject(APPLICATION ${APPLICATION_TARGET_NAME} DEPENDENCIES library-camitkcore ${COMPONENTS_DEPENDENCY_LIST} ${ACTIONS_DEPENDENCY_LIST} ${VIEWERS_DEPENDENCY_LIST} ${CEP_LIBRARIES_DEPENDENCY_LIST})
583# endif()
584
585 #####################################################################################
586 # #
587 # TRANSLATION #
588 # #
589 # * CAMITK_TRANSLATIONS contains the list of language to translate #
590 # the QString to. #
591 # #
592 # * Create the translate.pro file which contains 4 sections: #
593 # - HEADERS: list of .h/.hpp files to look for tr("") QString #
594 # - SOURCES: list of .cpp files to look for tr("") QString #
595 # - FORMS: list of .ui files to look for tr("") QString #
596 # - TRANSLATIONS: list of .ts files which use CAMITK_TRANSLATIONS #
597 # to define each .ts file #
598 # #
599 # * Execute lupdate program to update the .ts files with new QString #
600 # found. #
601 # #
602 # * Execute lrelease program to create .qm files (binary equivalent of #
603 # .ts files #
604 # #
605 # * Create translate.qrc which contains the list of .qm files. #
606 # * Create the flags.qrc file which contains the list of .png flags #
607 # images #
608 # #
609 #####################################################################################
610 if(CAMITK_TRANSLATE)
611 if(${APPLICATION_NAME_CMAKE}_EXTRA_TRANSLATE_LANGUAGE)
612 camitk_translate(EXTRA_LANGUAGE ${${APPLICATION_NAME_CMAKE}_EXTRA_TRANSLATE_LANGUAGE})
613 else()
614 camitk_translate()
615 endif()
616 endif()
617
618
619 #########################################################################
620 # #
621 # PACKAGING CATEGORIZATION #
622 # #
623 # * On Windows, when building a package (win32 installer), the #
624 # install shield wizard proposes you to select which component #
625 # to install. #
626 # * Each component to install has a short description following its #
627 # name to understand its role. #
628 # * This section deals with the categorization and the description #
629 # of the component in this installer. #
630 # #
631 #########################################################################
632
633 # WINDOWS INSTALLER CATEGORIZATION
634 if(${APPLICATION_NAME_CMAKE}_CEP_NAME)
635 if (${APPLICATION_NAME_CMAKE}_CEP_NAME MATCHES "SDK")
636 # The default SDK extensions are categorized as "required" and are not "unselectable" by the user at installation time
637 cpack_add_component(${APPLICATION_TARGET_NAME}
638 DISPLAY_NAME ${APPLICATION_TARGET_NAME}
639 DESCRIPTION ${${APPLICATION_NAME_CMAKE}_DESCRIPTION}
640 REQUIRED
641 GROUP SDK
642 )
643
644 else()
645 # Extension is selectable for installation in the wizard of the installer
646 cpack_add_component(${APPLICATION_TARGET_NAME}
647 DISPLAY_NAME ${APPLICATION_TARGET_NAME}
648 DESCRIPTION ${${APPLICATION_NAME_CMAKE}_DESCRIPTION}
649 GROUP ${${APPLICATION_NAME_CMAKE}_CEP_NAME}
650 )
651 endif()
652 else()
653 # Extension if not categorized for packaging presentation
654 cpack_add_component(${APPLICATION_TARGET_NAME}
655 DISPLAY_NAME ${APPLICATION_TARGET_NAME}
656 DESCRIPTION ${${APPLICATION_NAME_CMAKE}_DESCRIPTION}
657 )
658
659 endif()
660
661 # additional unix system files/resources
662 if(UNIX)
663 # Man page installation
664 set(${APPLICATION_NAME_CMAKE}_MAN_PAGE ${CMAKE_CURRENT_SOURCE_DIR}/resources/camitk-${APPLICATION_NAME}.1)
665 if (EXISTS ${${APPLICATION_NAME_CMAKE}_MAN_PAGE})
666 message(STATUS "Found man page for ${APPLICATION_TARGET_NAME}")
667 install(FILES ${${APPLICATION_NAME_CMAKE}_MAN_PAGE}
668 DESTINATION ${CAMITK_APPLICATION_MAN_INSTALL_DIR}
669 )
670 else()
671 # check if .in exists
672 if (EXISTS "${${APPLICATION_NAME_CMAKE}_MAN_PAGE}.in")
673 message(STATUS "Found man page configuration file for ${APPLICATION_TARGET_NAME}")
674 install(CODE "message(STATUS \"Updating ${APPLICATION_NAME} man page (version ${CAMITK_VERSION_MAJOR}.${CAMITK_VERSION_MINOR} as of ${CURRENT_DATE})\")")
675 # set variable in sub-cmake shell
676 install(CODE "set(APPLICATION_NAME ${APPLICATION_NAME})")
677 install(CODE "set(CURRENT_DATE ${CURRENT_DATE})")
678 install(CODE "set(CAMITK_VERSION_MAJOR ${CAMITK_VERSION_MAJOR})")
679 install(CODE "set(CAMITK_VERSION_MINOR ${CAMITK_VERSION_MINOR})")
680 # remove previous version
681 install(CODE "execute_process(COMMAND ${CMAKE_COMMAND} -E remove -f ${CMAKE_CURRENT_BINARY_DIR}/camitk-${APPLICATION_NAME}.1)")
682 # configure current version
683 install(CODE "configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/camitk-${APPLICATION_NAME}.1.in ${CMAKE_CURRENT_BINARY_DIR}/camitk-${APPLICATION_NAME}.1 @ONLY)")
684 # install file
685 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/camitk-${APPLICATION_NAME}.1 DESTINATION ${CAMITK_APPLICATION_MAN_INSTALL_DIR})
686 endif()
687 endif()
688
689 # Desktop file
690 set(${APPLICATION_NAME_CMAKE}_DESKTOP ${CMAKE_CURRENT_SOURCE_DIR}/resources/camitk-${APPLICATION_NAME}.desktop)
691 if (EXISTS ${${APPLICATION_NAME_CMAKE}_DESKTOP})
692 message(STATUS "Found desktop file for ${APPLICATION_TARGET_NAME}")
693 install(FILES ${${APPLICATION_NAME_CMAKE}_DESKTOP} DESTINATION ${CAMITK_APPLICATION_DESKTOP_INSTALL_DIR})
694 endif()
695
696 # application pixmap
697 set(${APPLICATION_NAME_CMAKE}_PIXMAP ${CMAKE_CURRENT_SOURCE_DIR}/resources/camitk-${APPLICATION_NAME}.xpm)
698 if (EXISTS ${${APPLICATION_NAME_CMAKE}_PIXMAP})
699 message(STATUS "Found pixmap for ${APPLICATION_TARGET_NAME}")
700 install(FILES ${${APPLICATION_NAME_CMAKE}_PIXMAP} DESTINATION ${CAMITK_APPLICATION_PIXMAP_INSTALL_DIR})
701 endif()
702
703 endif()
704
705 endif() #APPLICATION_${APPLICATION_NAME_CMAKE}
706
707end(){)
cmake modules macros camitk test endif() add_custom_target(camitk-ce-iwyu COMMAND $
Definition CamiTKIncludeWhatYouUse.h:37
#define a
iwyu out CACHE PATH Output filename for include what you use set(CMAKE_CXX_INCLUDE_WHAT_YOU_USE ${IWYU_EXECUTABLE}) if(NOT EXISTS $
Definition CamiTKIncludeWhatYouUse.h:22
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:21
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:63
get_directory_name()
macro get_directory_name set the variable VariableName to the name of the last directory of FullPathD...
Definition GetDirectoryName.h:14
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
Definition Action.cpp:36