64 #########################################################################
68 # * Use a macro to create the CMAKE variables according to the #
69 # provided options as input. #
71 #########################################################################
76 "SOURCESNEEDS_CEP_LIBRARIESEXTERNAL_LIBRARIESINCLUDE_DIRECTORIESLIBNAMEDEFINESLINK_DIRECTORIESHEADERS_TO_INSTALLCEP_NAMEDESCRIPTIONEXTRA_TRANSLATE_LANGUAGE" # possible lists
77 "SHAREDSTATICNEEDS_ITKNEEDS_LIBXML2NEEDS_XERCESCNEEDS_XSDNEEDS_QT_MODULESPUBLIC" # possible options
83 #########################################################################
85 # CREATE CMAKE VARIABLES #
87 # * Create required and useful
CMake variables
for the macro #
89 #########################################################################
92 # The target
name is composed of the following: library-
name
93 # * library is the suffix
94 # *
name is deduced from the input folder containing the calling CMakeLists.txt file of the extension.
95 #
"-" is replaced by
"_" if configuring
for packaging with NSIS, the program to create a Windows installer.
97 if (
"${${DEFAULT_LIBRARY_NAME_CMAKE}_LIBNAME}" STREQUAL
"")
98 set(LIBRARY_TARGET_NAME library_${DEFAULT_LIBRARY_NAME})
100 set(LIBRARY_TARGET_NAME library_${${DEFAULT_LIBRARY_NAME_CMAKE}_LIBNAME})
103 if (
"${${DEFAULT_LIBRARY_NAME_CMAKE}_LIBNAME}" STREQUAL
"")
104 set(LIBRARY_TARGET_NAME library-${DEFAULT_LIBRARY_NAME})
106 set(LIBRARY_TARGET_NAME library-${${DEFAULT_LIBRARY_NAME_CMAKE}_LIBNAME})
112 #########################################################################
114 # INCLUDE DIRECTORIES #
116 # * Include library directories where to look for header files #
117 # * Include also additional user provided directories #
118 # * These directories are used for compilation step #
120 #########################################################################
123 include_directories(${CAMITK_INCLUDE_DIRECTORIES})
124 include_directories(${CMAKE_CURRENT_SOURCE_DIR})
125 include_directories(${CMAKE_CURRENT_BINARY_DIR})
127 # USER PROVIDED ADDITIONAL DIRECTORIEs
128 include_directories(${${DEFAULT_LIBRARY_NAME_CMAKE}_INCLUDE_DIRECTORIES})
132 #########################################################################
134 # ADDITIONAL KNOWN LIBRARY DEPENDENCIES #
136 # * Look
for specific library needed #
137 # * Specific libraries are specified as option with the #
138 # NEEDS_LIBRARY syntax (see macro syntax
for more options)
#
139 # * Backward compatibility : Warn user if using old NEEDS_TOOL syntax #
141 #########################################################################
144 set(ITK_LIBRARIES
"")
145 if(${DEFAULT_LIBRARY_NAME_CMAKE}_NEEDS_ITK)
146 find_package(ITK REQUIRED)
149 set(ITK_VERSION ${ITK_VERSION_MAJOR}.${ITK_VERSION_MINOR}.${ITK_VERSION_PATCH}) #ITK_VERSION is not always
set
150 message(STATUS
"${${DEFAULT_LIBRARY_NAME_CMAKE}_TARGET_NAME}: Found ITK version ${ITK_VERSION}")
152 # Now select the ITK libraries according to the ITK version found.
153 # ITK 3.x.x (mostly 3.20.1)
154 if ((${ITK_VERSION} VERSION_GREATER
"3") AND (${ITK_VERSION} VERSION_LESS
"4"))
155 if (MSVC) # Visual Studio compilers
156 if(MSVC90 OR MSVC10) #ITK 3.x only works with VS 2008 / 2010
158 debug ITKAlgorithms${CAMITK_DEBUG_POSTFIX}
159 optimized ITKAlgorithms
160 debug ITKBasicFilters${CAMITK_DEBUG_POSTFIX}
161 optimized ITKBasicFilters
162 debug ITKCommon${CAMITK_DEBUG_POSTFIX}
164 debug ITKIO${CAMITK_DEBUG_POSTFIX}
166 debug ITKNrrdIO${CAMITK_DEBUG_POSTFIX}.lib
167 debug itkgdcm${CAMITK_DEBUG_POSTFIX}.lib
168 debug itkjpeg12${CAMITK_DEBUG_POSTFIX}.lib
169 debug itkjpeg16${CAMITK_DEBUG_POSTFIX}.lib
170 debug itkopenjpeg${CAMITK_DEBUG_POSTFIX}.lib
171 debug itkpng${CAMITK_DEBUG_POSTFIX}.lib
172 debug itktiff${CAMITK_DEBUG_POSTFIX}.lib
173 debug itkjpeg8${CAMITK_DEBUG_POSTFIX}.lib
174 debug ITKSpatialObject${CAMITK_DEBUG_POSTFIX}.lib
175 debug itkvnl_inst${CAMITK_DEBUG_POSTFIX}.lib
176 debug itkvnl_algo${CAMITK_DEBUG_POSTFIX}.lib
177 debug itkv3p_netlib${CAMITK_DEBUG_POSTFIX}.lib
178 debug itkvnl${CAMITK_DEBUG_POSTFIX}.lib
179 debug itkvcl${CAMITK_DEBUG_POSTFIX}.lib
180 debug itkv3p_lsqr${CAMITK_DEBUG_POSTFIX}.lib
181 debug ITKMetaIO${CAMITK_DEBUG_POSTFIX}.lib
182 debug itksys${CAMITK_DEBUG_POSTFIX}.lib
183 debug ITKDICOMParser${CAMITK_DEBUG_POSTFIX}.lib
184 debug ITKEXPAT${CAMITK_DEBUG_POSTFIX}.lib
185 debug ITKniftiio${CAMITK_DEBUG_POSTFIX}.lib
186 debug ITKznz${CAMITK_DEBUG_POSTFIX}.lib
187 debug itkzlib${CAMITK_DEBUG_POSTFIX}.lib
195 elseif(MSVC11 OR MSVC12)
# Visual Studion 2012/2013
196 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")
199 message(FATAL_ERROR
"CamiTK does not support ITK 3.x libraries for MinGW. You may file a feature request: https://bugzilla-timc.imag.fr/")
200 else() #APPLE OR UNIX
201 set(ITK_LIBRARIES ITKBasicFilters ITKCommon ITKIO ITKAlgorithms)
204 # ITK 4.3.x (mostly 4.3.2)
205 elseif((${ITK_VERSION} VERSION_GREATER
"4") AND (${ITK_VERSION} VERSION_LESS
"4.4"))
206 if (MSVC) # Visual Studio compilers
207 if(MSVC90 OR MSVC10) #ITK 3.x only works with VS 2008 / 2010
208 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")
209 elseif(MSVC11 OR MSVC12)
# Visual Studion 2012/2013
210 link_directories(${ITK_DIR}/../..)
213 debug ITKCommon-4.3${CAMITK_DEBUG_POSTFIX}.lib
214 debug ITKNrrdIO-4.3${CAMITK_DEBUG_POSTFIX}.lib
215 debug itkgdcmCommon-4.3${CAMITK_DEBUG_POSTFIX}.lib
216 debug itkjpeg-4.3${CAMITK_DEBUG_POSTFIX}.lib
217 debug itkopenjpeg-4.3${CAMITK_DEBUG_POSTFIX}.lib
218 debug itkpng-4.3${CAMITK_DEBUG_POSTFIX}.lib
219 debug itktiff-4.3${CAMITK_DEBUG_POSTFIX}.lib
220 debug ITKSpatialObjects-4.3${CAMITK_DEBUG_POSTFIX}.lib
221 debug itkvnl_algo-4.3${CAMITK_DEBUG_POSTFIX}.lib
222 debug itkv3p_netlib-4.3${CAMITK_DEBUG_POSTFIX}.lib
223 debug itkvnl-4.3${CAMITK_DEBUG_POSTFIX}.lib
224 debug itkvcl-4.3${CAMITK_DEBUG_POSTFIX}.lib
225 debug itkv3p_lsqr-4.3${CAMITK_DEBUG_POSTFIX}.lib
226 debug ITKMetaIO-4.3${CAMITK_DEBUG_POSTFIX}.lib
227 debug itksys-4.3${CAMITK_DEBUG_POSTFIX}.lib
228 debug ITKDICOMParser-4.3${CAMITK_DEBUG_POSTFIX}.lib
229 debug ITKEXPAT-4.3${CAMITK_DEBUG_POSTFIX}.lib
230 debug ITKniftiio-4.3${CAMITK_DEBUG_POSTFIX}.lib
231 debug ITKznz-4.3${CAMITK_DEBUG_POSTFIX}.lib
232 debug itkzlib-4.3${CAMITK_DEBUG_POSTFIX}.lib
239 debug ITKIOGIPL-4.3${CAMITK_DEBUG_POSTFIX}.lib
240 debug ITKIONIFTI-4.3${CAMITK_DEBUG_POSTFIX}.lib
241 debug ITKIONRRD-4.3${CAMITK_DEBUG_POSTFIX}.lib
242 debug ITKIOPNG-4.3${CAMITK_DEBUG_POSTFIX}.lib
243 debug itkgdcmDICT-4.3${CAMITK_DEBUG_POSTFIX}.lib
244 debug itkgdcmDSED-4.3${CAMITK_DEBUG_POSTFIX}.lib
245 debug itkgdcmIOD-4.3${CAMITK_DEBUG_POSTFIX}.lib
246 debug itkgdcmjpeg8-4.3${CAMITK_DEBUG_POSTFIX}.lib
247 debug itkgdcmjpeg12-4.3${CAMITK_DEBUG_POSTFIX}.lib
248 debug itkgdcmjpeg16-4.3${CAMITK_DEBUG_POSTFIX}.lib
249 debug itkgdcmMSFF-4.3${CAMITK_DEBUG_POSTFIX}.lib
250 debug ITKgiftiio-4.3${CAMITK_DEBUG_POSTFIX}.lib
251 debug itkhdf5_cpp-4.3${CAMITK_DEBUG_POSTFIX}.lib
252 debug itkhdf5-4.3${CAMITK_DEBUG_POSTFIX}.lib
253 debug ITKMetaIO-4.3${CAMITK_DEBUG_POSTFIX}.lib
254 debug ITKIOBioRad-4.3${CAMITK_DEBUG_POSTFIX}.lib
255 debug ITKIOStimulate-4.3${CAMITK_DEBUG_POSTFIX}.lib
256 debug ITKIOTIFF-4.3${CAMITK_DEBUG_POSTFIX}.lib
257 debug ITKIOVTK-4.3${CAMITK_DEBUG_POSTFIX}.lib
258 debug ITKIOPNG-4.3${CAMITK_DEBUG_POSTFIX}.lib
259 debug ITKBiasCorrection-4.3${CAMITK_DEBUG_POSTFIX}.lib
260 debug ITKBioCell-4.3${CAMITK_DEBUG_POSTFIX}.lib
261 debug ITKFEM-4.3${CAMITK_DEBUG_POSTFIX}.lib
262 debug ITKIOBMP-4.3${CAMITK_DEBUG_POSTFIX}.lib
263 debug ITKIOCSV-4.3${CAMITK_DEBUG_POSTFIX}.lib
264 debug ITKIOGDCM-4.3${CAMITK_DEBUG_POSTFIX}.lib
265 debug ITKIOGE-4.3${CAMITK_DEBUG_POSTFIX}.lib
266 debug ITKIOGIPL-4.3${CAMITK_DEBUG_POSTFIX}.lib
267 debug ITKIOHDF5-4.3${CAMITK_DEBUG_POSTFIX}.lib
268 debug ITKIOImageBase-4.3${CAMITK_DEBUG_POSTFIX}.lib
269 debug ITKIOIPL-4.3${CAMITK_DEBUG_POSTFIX}.lib
270 debug ITKIOJPEG-4.3${CAMITK_DEBUG_POSTFIX}.lib
271 debug ITKIOLSM-4.3${CAMITK_DEBUG_POSTFIX}.lib
272 debug ITKIOMesh-4.3${CAMITK_DEBUG_POSTFIX}.lib
273 debug ITKIOMeta-4.3${CAMITK_DEBUG_POSTFIX}.lib
274 debug ITKIOSiemens-4.3${CAMITK_DEBUG_POSTFIX}.lib
275 debug ITKIOSpatialObjects-4.3${CAMITK_DEBUG_POSTFIX}.lib
276 debug ITKIOTransformBase-4.3${CAMITK_DEBUG_POSTFIX}.lib
277 debug ITKIOTransformHDF5-4.3${CAMITK_DEBUG_POSTFIX}.lib
278 debug ITKIOTransformInsightLegacy-4.3${CAMITK_DEBUG_POSTFIX}.lib
279 debug ITKIOTransformMatlab-4.3${CAMITK_DEBUG_POSTFIX}.lib
280 debug ITKIOXML-4.3${CAMITK_DEBUG_POSTFIX}.lib
281 debug ITKKLMRegionGrowing-4.3${CAMITK_DEBUG_POSTFIX}.lib
282 debug ITKLabelMap-4.3${CAMITK_DEBUG_POSTFIX}.lib
283 debug ITKMesh-4.3${CAMITK_DEBUG_POSTFIX}.lib
284 debug ITKMetaIO-4.3${CAMITK_DEBUG_POSTFIX}.lib
285 debug itkNetlibSlatec-4.3${CAMITK_DEBUG_POSTFIX}.lib
286 debug itkopenjpeg-4.3${CAMITK_DEBUG_POSTFIX}.lib
287 debug ITKOptimizers-4.3${CAMITK_DEBUG_POSTFIX}.lib
288 debug ITKOptimizersv4-4.3${CAMITK_DEBUG_POSTFIX}.lib
289 debug ITKPath-4.3${CAMITK_DEBUG_POSTFIX}.lib
290 debug itkpng-4.3${CAMITK_DEBUG_POSTFIX}.lib
291 debug ITKPolynomials-4.3${CAMITK_DEBUG_POSTFIX}.lib
292 debug ITKQuadEdgeMesh-4.3${CAMITK_DEBUG_POSTFIX}.lib
293 debug ITKReview-4.3${CAMITK_DEBUG_POSTFIX}.lib
294 debug ITKStatistics-4.3${CAMITK_DEBUG_POSTFIX}.lib
295 debug itkv3p_lsqr-4.3${CAMITK_DEBUG_POSTFIX}.lib
296 debug itkv3p_netlib-4.3${CAMITK_DEBUG_POSTFIX}.lib
297 debug itkvcl-4.3${CAMITK_DEBUG_POSTFIX}.lib
298 debug ITKVideoCore-4.3${CAMITK_DEBUG_POSTFIX}.lib
299 debug ITKVideoIO-4.3${CAMITK_DEBUG_POSTFIX}.lib
300 debug ITKVTK-4.3${CAMITK_DEBUG_POSTFIX}.lib
301 debug ITKVNLInstantiation-4.3${CAMITK_DEBUG_POSTFIX}.lib
302 debug ITKWatersheds-4.3${CAMITK_DEBUG_POSTFIX}.lib
303 # Release librariesdebug
304 optimized ITKCommon-4.3.lib
305 optimized ITKNrrdIO-4.3.lib
306 optimized itkgdcmCommon-4.3.lib
307 optimized itkjpeg-4.3.lib
308 optimized itkopenjpeg-4.3.lib
309 optimized itkpng-4.3.lib
310 optimized itktiff-4.3.lib
311 optimized ITKSpatialObjects-4.3.lib
312 optimized itkvnl_algo-4.3.lib
313 optimized itkv3p_netlib-4.3.lib
314 optimized itkvnl-4.3.lib
315 optimized itkvcl-4.3.lib
316 optimized itkv3p_lsqr-4.3.lib
317 optimized ITKMetaIO-4.3.lib
318 optimized itksys-4.3.lib
319 optimized ITKDICOMParser-4.3.lib
320 optimized ITKEXPAT-4.3.lib
321 optimized ITKniftiio-4.3.lib
322 optimized ITKznz-4.3.lib
323 optimized itkzlib-4.3.lib
324 optimized snmpapi.lib
327 optimized comctl32.lib
328 optimized wsock32.lib
329 optimized opengl32.lib
330 optimized ITKIOGIPL-4.3.lib
331 optimized ITKIONIFTI-4.3.lib
332 optimized ITKIONRRD-4.3.lib
333 optimized ITKIOPNG-4.3.lib
334 optimized itkgdcmDICT-4.3.lib
335 optimized itkgdcmDSED-4.3.lib
336 optimized itkgdcmIOD-4.3.lib
337 optimized itkgdcmjpeg8-4.3.lib
338 optimized itkgdcmjpeg12-4.3.lib
339 optimized itkgdcmjpeg16-4.3.lib
340 optimized itkgdcmMSFF-4.3.lib
341 optimized ITKgiftiio-4.3.lib
342 optimized itkhdf5_cpp-4.3.lib
343 optimized itkhdf5-4.3.lib
344 optimized ITKMetaIO-4.3.lib
345 optimized ITKIOBioRad-4.3.lib
346 optimized ITKIOStimulate-4.3.lib
347 optimized ITKIOTIFF-4.3.lib
348 optimized ITKIOVTK-4.3.lib
349 optimized ITKIOPNG-4.3.lib
350 optimized ITKBiasCorrection-4.3.lib
351 optimized ITKBioCell-4.3.lib
352 optimized ITKFEM-4.3.lib
353 optimized ITKIOBMP-4.3.lib
354 optimized ITKIOCSV-4.3.lib
355 optimized ITKIOGDCM-4.3.lib
356 optimized ITKIOGE-4.3.lib
357 optimized ITKIOGIPL-4.3.lib
358 optimized ITKIOHDF5-4.3.lib
359 optimized ITKIOImageBase-4.3.lib
360 optimized ITKIOIPL-4.3.lib
361 optimized ITKIOJPEG-4.3.lib
362 optimized ITKIOLSM-4.3.lib
363 optimized ITKIOMesh-4.3.lib
364 optimized ITKIOMeta-4.3.lib
365 optimized ITKIOSiemens-4.3.lib
366 optimized ITKIOSpatialObjects-4.3.lib
367 optimized ITKIOTransformBase-4.3.lib
368 optimized ITKIOTransformHDF5-4.3.lib
369 optimized ITKIOTransformInsightLegacy-4.3.lib
370 optimized ITKIOTransformMatlab-4.3.lib
371 optimized ITKIOXML-4.3.lib
372 optimized ITKKLMRegionGrowing-4.3.lib
373 optimized ITKLabelMap-4.3.lib
374 optimized ITKMesh-4.3.lib
375 optimized ITKMetaIO-4.3.lib
376 optimized itkNetlibSlatec-4.3.lib
377 optimized itkopenjpeg-4.3.lib
378 optimized ITKOptimizers-4.3.lib
379 optimized ITKOptimizersv4-4.3.lib
380 optimized ITKPath-4.3.lib
381 optimized itkpng-4.3.lib
382 optimized ITKPolynomials-4.3.lib
383 optimized ITKQuadEdgeMesh-4.3.lib
384 optimized ITKReview-4.3.lib
385 optimized ITKStatistics-4.3.lib
386 optimized itkv3p_lsqr-4.3.lib
387 optimized itkv3p_netlib-4.3.lib
388 optimized itkvcl-4.3.lib
389 optimized ITKVideoCore-4.3.lib
390 optimized ITKVideoIO-4.3.lib
391 optimized ITKVTK-4.3.lib
392 optimized ITKVNLInstantiation-4.3.lib
393 optimized ITKWatersheds-4.3.lib
396 elseif(MINGW OR APPLE)
397 link_directories(${ITK_DIR}/../..)
406 ITKSpatialObjects-4.3
445 ITKBiasCorrection-4.3
461 ITKIOSpatialObjects-4.3
462 ITKIOTransformBase-4.3
463 ITKIOTransformHDF5-4.3
464 ITKIOTransformInsightLegacy-4.3
465 ITKIOTransformMatlab-4.3
467 ITKKLMRegionGrowing-4.3
487 ITKVNLInstantiation-4.3
491 set(ITK_LIBRARIES ITKCommon-4.3)
494 # ITK 4.5.x (mostly 4.5.1)
495 elseif((${ITK_VERSION} VERSION_GREATER
"4.4") AND (${ITK_VERSION} VERSION_LESS
"4.7"))
497 message(FATAL_ERROR
"ITK version 4.5.x is not supported yet on Visual Studio compiler. You may file a feature request: https://bugzilla-timc.imag.fr/")
499 message(FATAL_ERROR
"ITK version 4.5.x is not supported yet for MinGW compiler. You may file a feature request: https://bugzilla-timc.imag.fr/")
508 ITKGPUAnisotropicSmoothing
510 ITKGPUFiniteDifference
511 ITKGPUImageFilterBase
537 ITKIOTransformInsightLegacy
579 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/")
582 # ITK version > 4.6 (mostly ITK 5.x)
584 message(FATAL_ERROR
"CamiTK does not support yet ITK version 5.x. You may file a feature request: https://bugzilla-timc.imag.fr/")
590 set(LIBXML2_LIBRARY
"")
591 if(${DEFAULT_LIBRARY_NAME_CMAKE}_NEEDS_LIBXML2)
592 # LibXml2 is required
595 add_definitions(${LIBXML2_DEFINITIONS})
596 include_directories(${LIBXML2_INCLUDE_DIR})
597 set(LIBXML2_LIBRARY ${LIBXML2_LIBRARIES})
599 # most probably win32 or crosscompiling
600 message(WARNING
"${LIBRARY_TARGET_NAME}: libxml2 required")
605 set(XERCESC_LIBRARIES)
606 if(${DEFAULT_LIBRARY_NAME_CMAKE}_NEEDS_XERCESC)
607 # XercesC is required
608 find_package(XercesC REQUIRED)
610 include_directories(${XERCESC_INCLUDE_DIR})
611 set(XERCESC_LIBRARIES ${XERCESC_LIBRARY})
613 # most probably win32 or crosscompiling
614 message(FATAL_ERROR
"${DEFAULT_LIBRARY_NAME}: xerces-c required. Please provide Xerces-C path.")
619 if(${DEFAULT_LIBRARY_NAME_CMAKE}_NEEDS_XSD)
620 # XercesC is required
621 find_package(XercesC REQUIRED)
623 include_directories(${XERCESC_INCLUDE_DIR})
624 set(XERCESC_LIBRARIES ${XERCESC_LIBRARY})
625 find_package(XSD REQUIRED)
626 include_directories(${XSD_INCLUDE_DIR})
628 # most probably win32 or crosscompiling
629 message(FATAL_ERROR
"${LIBRARY_TARGET_NAME}: xerces-c required because of XSD cxx, please set XERCESC_INCLUDE_DIR")
633 # ADDITIONAL QT MODULES
634 set(QT_MODULES_LIBRARIES)
635 if(${DEFAULT_LIBRARY_NAME_CMAKE}_NEEDS_QT_MODULES)
636 find_package(Qt4
"4.7" COMPONENTS QtCore QtGui QtXml QtXmlPatterns QtWebkit QtOpenGL QtScript QtSQL QtNetwork REQUIRED)
638 message(SEND_ERROR
"${DEFAULT_LIBRARY_NAME} : Failed to find Qt 4.7 or greater. This is needed by CamiTK.")
641 # CMake will add the Qt modules specific include directories
644 #
Qt additional modules are required
for linking
645 set(QT_MODULES_LIBRARIES ${QT_LIBRARIES})
648 # EXTERNAL DEPENDENCIES
649 set(LINKER_EXTERNAL_LIBRARIES)
650 if(${DEFAULT_LIBRARY_NAME_CMAKE}_EXTERNAL_LIBRARIES)
651 foreach(EXTERNAL_LIBRARY ${${DEFAULT_LIBRARY_NAME_CMAKE}_EXTERNAL_LIBRARIES})
653 set(LINKER_EXTERNAL_LIBRARIES ${LINKER_EXTERNAL_LIBRARIES}
654 debug ${EXTERNAL_LIBRARY}${CAMITK_DEBUG_POSTFIX}
655 optimized ${EXTERNAL_LIBRARY}
657 message(STATUS
"LINKER_EXTERNAL_LIBRARIES = ${LINKER_EXTERNAL_LIBRARIES}")
659 set(LINKER_EXTERNAL_LIBRARIES ${LINKER_EXTERNAL_LIBRARIES} ${EXTERNAL_LIBRARY})
666 #########################################################################
670 # * Link directories are used to indicate the compiler where #
671 # to look for folder containing libraries to link with. #
672 # * Additional link directories provided by the user #
674 #########################################################################
675 # CAMITK BASIC LIB DIRECTORIES
676 link_directories(${CAMITK_LINK_DIRECTORIES})
678 # ADDITIONAL LINK DIRECTORIES
679 if (NOT
"${${DEFAULT_LIBRARY_NAME_CMAKE}_LINK_DIRECTORIES}" STREQUAL
"")
680 link_directories(${${DEFAULT_LIBRARY_NAME_CMAKE}_LINK_DIRECTORIES})
685 #########################################################################
687 # TARGET COMPILATION DEFINITION #
689 # * Additional sources files to consider at compilation (.cpp) #
690 # * CMake project target definition depending on library type #
693 #########################################################################
694 # CMAKE TARGET DEFINITION DEPENDENDING ON THE LIBRARY TYPE (SHARED or STATIC)
695 if (${DEFAULT_LIBRARY_NAME_CMAKE}_SHARED) # shared library
696 message(STATUS
"Adding shared library: ${LIBRARY_TARGET_NAME}")
697 add_library(${LIBRARY_TARGET_NAME} SHARED ${${DEFAULT_LIBRARY_NAME_CMAKE}_SOURCES})
698 # prepare the library specific info (SONAME...)
699 set(${LIBRARY_TARGET_NAME}_LIBRARY_PROPERTIES ${${LIBRARY_TARGET_NAME}_LIBRARY_PROPERTIES}
700 VERSION
"${CAMITK_VERSION_MAJOR}.${CAMITK_VERSION_MINOR}.${CAMITK_VERSION_PATCH}"
701 SOVERSION
"${CAMITK_VERSION_MAJOR}"
703 #
set the library specific info (SONAME...)
704 set_target_properties(${LIBRARY_TARGET_NAME} PROPERTIES ${${LIBRARY_TARGET_NAME}_LIBRARY_PROPERTIES} LINK_INTERFACE_LIBRARIES
"")
705 elseif (${DEFAULT_LIBRARY_NAME_CMAKE}_STATIC) #
static library
706 message(STATUS
"Adding static library: ${LIBRARY_TARGET_NAME}")
707 add_library(${LIBRARY_TARGET_NAME} STATIC ${${DEFAULT_LIBRARY_NAME_CMAKE}_SOURCES})
709 message(FATAL_ERROR
"In adding static library ${LIBRARY_TARGET_NAME}.\n Please specify the library type: SHARED or STATIC")
714 #########################################################################
716 # CAMITK LIBRARIES DEPENDENCIES #
718 # * Add in this section library dependencies to other camitk libraies #
719 # to keep a correct build order (NEEDS_CEP_LIBRARIES). #
721 #########################################################################
723 # CEP LIBRARIES DEPENDENCIES
725 set(LIBRARIES_DEPENDENCY_LIST
"")
#use for generating the project.xml file
726 if(${DEFAULT_LIBRARY_NAME_CMAKE}_NEEDS_CEP_LIBRARIES)
727 foreach(CEP_LIBRARY_NEEDED ${${DEFAULT_LIBRARY_NAME_CMAKE}_NEEDS_CEP_LIBRARIES})
728 #
include directories from build,
camitk (local or global install).
729 include_directories(${CAMITK_BUILD_INCLUDE_DIR}/libraries/${CEP_LIBRARY_NEEDED})
730 include_directories(${CAMITK_INCLUDE_DIR}/libraries/${CEP_LIBRARY_NEEDED})
733 set(CEP_LIBRARIES ${CEP_LIBRARIES} debug ${CEP_LIBRARY_NEEDED}${CAMITK_DEBUG_POSTFIX}
734 optimized ${CEP_LIBRARY_NEEDED}
738 set(CEP_LIBRARIES ${CEP_LIBRARIES} ${CEP_LIBRARY_NEEDED})
740 set(CEP_LIBRARIES ${CEP_LIBRARIES} ${CEP_LIBRARY_NEEDED})
743 # CMake / CDash dependencies
745 add_dependencies(${LIBRARY_TARGET_NAME} library_${CEP_LIBRARY_NEEDED})
747 add_dependencies(${LIBRARY_TARGET_NAME} library-${CEP_LIBRARY_NEEDED})
748 set(LIBRARIES_DEPENDENCY_LIST ${LIBRARIES_DEPENDENCY_LIST} library-${CEP_LIBRARY_NEEDED})
755 #########################################################################
759 # * Linking is the last stage of compilation #
760 # * Indicate what libraries to use for linking the target #
762 #########################################################################
764 target_link_libraries(${LIBRARY_TARGET_NAME} ${CEP_LIBRARIES} ${LINKER_EXTERNAL_LIBRARIES} ${LIBXML2_LIBRARY} ${ITK_LIBRARIES} ${QT_MODULES_LIBRARIES} ${XERCESC_LIBRARIES})
768 #########################################################################
772 # * Define the
output directory (location and
name)
#
773 # * Define the output name of the library #
774 # * Add ${CAMITK_DEBUG_POSTFIX} suffix to Debug MSVC built libraries #
776 #########################################################################
778 # OUTPUT DIRECTORY LOCATION and NAME depending on the type of the library (PUBLIC or PRIVATE)
779 # DEBGUG POSTFIX FOR MSVC
780 if (${DEFAULT_LIBRARY_NAME_CMAKE}_PUBLIC) # Public library => build in the bin folder
782 # With Visual Studio, public libraries are built in build\bin directory, else it's in build\lib
783 set_target_properties(${LIBRARY_TARGET_NAME} PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CAMITK_BUILD_BIN_DIR}
784 LIBRARY_OUTPUT_DIRECTORY_DEBUG ${CAMITK_BUILD_BIN_DIR}
785 LIBRARY_OUTPUT_DIRECTORY_RELEASE ${CAMITK_BUILD_BIN_DIR}
787 set_target_properties(${LIBRARY_TARGET_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CAMITK_BUILD_BIN_DIR}
788 RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CAMITK_BUILD_BIN_DIR}
789 RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CAMITK_BUILD_BIN_DIR}
791 set_target_properties(${LIBRARY_TARGET_NAME} PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${CAMITK_BUILD_BIN_DIR}
792 ARCHIVE_OUTPUT_DIRECTORY_DEBUG ${CAMITK_BUILD_BIN_DIR}
793 ARCHIVE_OUTPUT_DIRECTORY_RELEASE ${CAMITK_BUILD_BIN_DIR}
795 set_target_properties(${LIBRARY_TARGET_NAME} PROPERTIES DEBUG_POSTFIX ${CAMITK_DEBUG_POSTFIX})
797 # for xcode generation, the <CONFIG> postfix should also be used, but "a la" UNIX (lib in /lib etc...)
798 # no need to check the generator with if(CMAKE_GENERATOR STREQUAL Xcode), as the <CONFIG> postfix should
799 # not affect the other unix generators
800 set_target_properties(${LIBRARY_TARGET_NAME} PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CAMITK_BUILD_PUBLIC_LIB_DIR}
801 LIBRARY_OUTPUT_DIRECTORY_DEBUG ${CAMITK_BUILD_PUBLIC_LIB_DIR}
802 LIBRARY_OUTPUT_DIRECTORY_RELEASE ${CAMITK_BUILD_PUBLIC_LIB_DIR}
804 set_target_properties(${LIBRARY_TARGET_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CAMITK_BUILD_PUBLIC_LIB_DIR}
805 RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CAMITK_BUILD_PUBLIC_LIB_DIR}
806 RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CAMITK_BUILD_PUBLIC_LIB_DIR}
808 set_target_properties(${LIBRARY_TARGET_NAME} PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${CAMITK_BUILD_PUBLIC_LIB_DIR}
809 ARCHIVE_OUTPUT_DIRECTORY_DEBUG ${CAMITK_BUILD_PUBLIC_LIB_DIR}
810 ARCHIVE_OUTPUT_DIRECTORY_RELEASE ${CAMITK_BUILD_PUBLIC_LIB_DIR}
813 else() # Private library => build in lib folder
815 set_target_properties(${LIBRARY_TARGET_NAME} PROPERTIES DEBUG_POSTFIX ${CAMITK_DEBUG_POSTFIX})
817 set_target_properties(${LIBRARY_TARGET_NAME} PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CAMITK_BUILD_PRIVATE_LIB_DIR}
818 LIBRARY_OUTPUT_DIRECTORY_DEBUG ${CAMITK_BUILD_PRIVATE_LIB_DIR}
819 LIBRARY_OUTPUT_DIRECTORY_RELEASE ${CAMITK_BUILD_PRIVATE_LIB_DIR}
821 set_target_properties(${LIBRARY_TARGET_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CAMITK_BUILD_PRIVATE_LIB_DIR}
822 RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CAMITK_BUILD_PRIVATE_LIB_DIR}
823 RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CAMITK_BUILD_PRIVATE_LIB_DIR}
825 set_target_properties(${LIBRARY_TARGET_NAME} PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${CAMITK_BUILD_PRIVATE_LIB_DIR}
826 ARCHIVE_OUTPUT_DIRECTORY_DEBUG ${CAMITK_BUILD_PRIVATE_LIB_DIR}
827 ARCHIVE_OUTPUT_DIRECTORY_RELEASE ${CAMITK_BUILD_PRIVATE_LIB_DIR}
831 # OUTUPUT LIBRARY NAME (without the prefix "library-").
832 string(REGEX REPLACE
"^library_|^library-" "" LIBRARY_NAME ${LIBRARY_TARGET_NAME})
833 set_target_properties(${LIBRARY_TARGET_NAME}
834 PROPERTIES OUTPUT_NAME ${LIBRARY_NAME}
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(${DEFAULT_LIBRARY_NAME_CMAKE}_DEFINES)
851 foreach (FLAG ${${DEFAULT_LIBRARY_NAME_CMAKE}_DEFINES})
852 add_definitions(-D${FLAG})
856 # PLATFORM SPECIFIC COMPILER FLAG
857 # 64bits and other platform with relocation needs -fPIC
859 check_cxx_accepts_flag(-fPIC FPIC_FLAG_ACCEPTED)
860 # no need to add -fPIC on mingw, otherwise it generates a warning: -fPIC ignored for target (all code is position independent) [enabled by default]
861 # msvc is also accepting the flag, but then produce warning D9002 : ignoring unknown option '-fPIC' cl
862 if(FPIC_FLAG_ACCEPTED AND NOT WIN32)
863 set_property(TARGET ${LIBRARY_TARGET_NAME} APPEND PROPERTY COMPILE_FLAGS -fPIC)
868 #########################################################################
872 # * When installing the project, header files (.h) and test data are #
873 # copied into an installation folder to determine. #
874 # * Indicate in this section, where to install your project and which #
875 # files to copy into that folder (during local/global installation) #
877 #########################################################################
879 # FOLDER INSTALLATION
880 # Indicate where to install the library, dependending on its property (public / private)
881 if (${DEFAULT_LIBRARY_NAME_CMAKE}_PUBLIC) #
public library
883 # public library -> install in bin folder
884 install(TARGETS ${LIBRARY_TARGET_NAME}
885 RUNTIME DESTINATION bin
886 LIBRARY DESTINATION lib
887 ARCHIVE DESTINATION lib/${CAMITK_SHORT_VERSION_STRING}
888 COMPONENT ${LIBRARY_NAME_INSTALL}
891 # other public libraries -> install in lib folder
892 install(TARGETS ${LIBRARY_TARGET_NAME}
893 RUNTIME DESTINATION lib
894 LIBRARY DESTINATION lib
895 ARCHIVE DESTINATION lib
896 COMPONENT ${LIBRARY_NAME_INSTALL}
900 # private library -> install in lib/camitk-version folder
901 install(TARGETS ${LIBRARY_TARGET_NAME}
902 RUNTIME DESTINATION lib/${CAMITK_SHORT_VERSION_STRING}
903 LIBRARY DESTINATION lib/${CAMITK_SHORT_VERSION_STRING}
904 ARCHIVE DESTINATION lib/${CAMITK_SHORT_VERSION_STRING}
905 COMPONENT ${LIBRARY_NAME_INSTALL}
909 # HEADER FILES (.h) INSTALLATION
910 if(${DEFAULT_LIBRARY_NAME_CMAKE}_HEADERS_TO_INSTALL)
911 # If headers information provided
for installation => install them
912 export_headers(${${DEFAULT_LIBRARY_NAME_CMAKE}_HEADERS_TO_INSTALL} COMPONENT ${LIBRARY_TARGET_NAME} GROUP libraries)
914 # if not, install all headers (*.h) by default in the build/include/libraries/library-name directory
915 file(GLOB_RECURSE ${DEFAULT_LIBRARY_NAME_CMAKE}_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}
A pseudo-namespace used to group CMake macros and functions.
string name
Definition: select.cpp:111
get_directory_name()
macro get_directory_name set the variable VariableName to the name of the last directory of FullPathD...
Definition: GetDirectoryName.h:14
camitk_library()
macro camitk_library simplifies the declaration of a library inside CamiTK and is to be used for all ...
Definition: CamiTKLibrary.h:62
Definition: Action.cpp:40
string output
Definition: pml2csv.cpp:111
export_headers()
export_headers is a macro that install header files at build and install time
Definition: ExportHeaders.h: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
static void include(QRect &r, const QRect &rect)
Definition: canvas_typed/qtcanvas.cpp:98