From 0a52abe97479b527d8e3ebe609da004fbb902572 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Wed, 14 Jan 2026 15:56:26 +0000 Subject: [PATCH 1/7] ENH: Remove unneeded check for empty list before sort --- CMake/ITKModuleMacros.cmake | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/CMake/ITKModuleMacros.cmake b/CMake/ITKModuleMacros.cmake index 58fbfe792bf..22c68751b67 100644 --- a/CMake/ITKModuleMacros.cmake +++ b/CMake/ITKModuleMacros.cmake @@ -122,14 +122,10 @@ macro(itk_module _name) ) unset(ITK_MODULE_${itk-module}_COMPILE_DEPENDS) list(SORT ITK_MODULE_${itk-module}_DEPENDS) # Deterministic order. - if(ITK_MODULE_${itk-module}_TRANSITIVE_DEPENDS) # Don't sort an empty list - list(SORT ITK_MODULE_${itk-module}_TRANSITIVE_DEPENDS) # Deterministic order. - endif() + list(SORT ITK_MODULE_${itk-module}_TRANSITIVE_DEPENDS) # Deterministic order. list(SORT ITK_MODULE_${itk-module}_PRIVATE_DEPENDS) # Deterministic order. list(SORT ITK_MODULE_${itk-module-test}_DEPENDS) # Deterministic order. - if(ITK_MODULE_${itk-module}_FACTORY_NAMES) # Don't sort an empty list - list(SORT ITK_MODULE_${itk-module}_FACTORY_NAMES) # Deterministic order. - endif() + list(SORT ITK_MODULE_${itk-module}_FACTORY_NAMES) # Deterministic order. endmacro() macro(itk_module_check_name _name) From a64f7627298647eb4495df35a32bbac9c785b287 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Wed, 7 Jan 2026 14:38:42 -0500 Subject: [PATCH 2/7] ENH: Use target-based includes for ITK modules Replace directory-level include_directories() with target-based include properties to enable modern CMake practices and support proper transitive include propagation. Changes: 1. Created ${itk-module}_INCLUDE2_DIRS and ${itk-module}_SYSTEM_INCLUDE2_DIRS - Use generator expressions for BUILD_INTERFACE and INSTALL_INTERFACE paths - Variables produced in each module's CMake configuration file - Enables proper include path handling in build and install trees 2. Modified itk_module_add_library() to apply target properties - Uses target_include_directories() instead of directory-level includes - Uses target_link_directories() for system library directories - Ensures proper PUBLIC include propagation 3. Updated ITKModuleHeaderTest.cmake - Added module include directories to header test targets - Fixes compilation errors for header-only modules 4. Fixed specific module CMakeLists.txt - IO/MINC, IO/TransformMINC: Removed directory-level includes - Nonunit/Review: Updated for target-based includes - ThirdParty modules: Added necessary include_directories where needed Compatibility Notes: - Modules not using itk_module_add_library() may need directory-level include_directories() added explicitly - External modules should update to use itk_module_add_library() --- CMake/ITKModuleHeaderTest.cmake | 15 +++++ CMake/ITKModuleMacros.cmake | 62 +++++++++++++++++--- Modules/ThirdParty/HDF5/CMakeLists.txt | 1 + Modules/ThirdParty/MetaIO/src/CMakeLists.txt | 1 + 4 files changed, 70 insertions(+), 9 deletions(-) diff --git a/CMake/ITKModuleHeaderTest.cmake b/CMake/ITKModuleHeaderTest.cmake index f2b848c227c..4f7c7052f75 100644 --- a/CMake/ITKModuleHeaderTest.cmake +++ b/CMake/ITKModuleHeaderTest.cmake @@ -126,6 +126,21 @@ macro(itk_module_headertest _name) ${${_name}_LIBRARIES} itksys ) + + # Add module include directories to target + target_include_directories( + ${_test_name} + PRIVATE + ${${_name}_GENEX_INCLUDE_DIRS} + ) + + # Add module system include directories to target + target_include_directories( + ${_test_name} + PRIVATE + ${${_name}_GENEX_SYSTEM_INCLUDE_DIRS} + ) + target_link_options( ${_test_name} PRIVATE diff --git a/CMake/ITKModuleMacros.cmake b/CMake/ITKModuleMacros.cmake index 22c68751b67..f8886d7958d 100644 --- a/CMake/ITKModuleMacros.cmake +++ b/CMake/ITKModuleMacros.cmake @@ -194,16 +194,32 @@ macro(itk_module_impl) list(APPEND ${itk-module}_INCLUDE_DIRS ${${itk-module}_BINARY_DIR}/include) endif() - if(${itk-module}_INCLUDE_DIRS) - include_directories(${${itk-module}_INCLUDE_DIRS}) - endif() - if(${itk-module}_SYSTEM_INCLUDE_DIRS) - # _SYSTEM_INCLUDE_DIRS should searched after internal _INCLUDE_DIRS - include_directories(AFTER ${${itk-module}_SYSTEM_INCLUDE_DIRS}) - endif() + # Prepare include directories with generator expressions for use in targets + set(${itk-module}_GENEX_INCLUDE_DIRS "") + foreach(_dir ${${itk-module}_INCLUDE_DIRS}) + list(APPEND ${itk-module}_GENEX_INCLUDE_DIRS "$") + endforeach() + list( + APPEND + ${itk-module}_GENEX_INCLUDE_DIRS + "$/${${itk-module}_INSTALL_INCLUDE_DIR}>" + ) - if(${itk-module}_SYSTEM_LIBRARY_DIRS) - link_directories(${${itk-module}_SYSTEM_LIBRARY_DIRS}) + # Prepare system include directories with generator expressions + set(${itk-module}_SYSTEM_GENEX_INCLUDE_DIRS "") + if(${itk-module}_SYSTEM_INCLUDE_DIRS) + foreach(_dir ${${itk-module}_SYSTEM_INCLUDE_DIRS}) + list( + APPEND + ${itk-module}_SYSTEM_GENEX_INCLUDE_DIRS + "$" + ) + list( + APPEND + ${itk-module}_SYSTEM_GENEX_INCLUDE_DIRS + "$" + ) + endforeach() endif() if(${itk-module}_THIRD_PARTY) @@ -371,6 +387,12 @@ macro(itk_module_impl) "${itk-module-RUNTIME_LIBRARY_DIRS-build}" ) set(itk-module-INCLUDE_DIRS "${itk-module-INCLUDE_DIRS-build}") + # set itk-module-GENEX_INCLUDE_DIRS so that includes both install interface and build interface path in appropriate generator expressions + set(itk-module-GENEX_INCLUDE_DIRS "") + foreach(_dir ${itk-module-INCLUDE_DIRS-build}) + list(APPEND itk-module-GENEX_INCLUDE_DIRS "$") + endforeach() + set(itk-module-EXPORT_CODE "${itk-module-EXPORT_CODE-build}") set(itk-module-TARGETS_FILE "${itk-module-TARGETS_FILE-build}") configure_file( @@ -626,6 +648,28 @@ macro(itk_module_add_library _name) ${ARGN} ) target_compile_features(${_name} PUBLIC cxx_std_${CMAKE_CXX_STANDARD}) + + # Add module include directories to target + target_include_directories( + ${_name} + PUBLIC + ${${itk-module}_GENEX_INCLUDE_DIRS} + ) + + #message(STATUS "Adding ${itk-module} include dirs to ${_name} target") + #message(STATUS " ${${itk-module}_INCLUDE2_DIRS}") + + # Add module system include directories to target + target_include_directories( + ${_name} + SYSTEM + PUBLIC + ${${itk-module}_SYSTEM_GENEX_INCLUDE_DIRS} + ) + + # Add module library directories to target + target_link_directories(${_name} PUBLIC ${${itk-module}_SYSTEM_LIBRARY_DIRS}) + target_link_options( ${_name} PUBLIC diff --git a/Modules/ThirdParty/HDF5/CMakeLists.txt b/Modules/ThirdParty/HDF5/CMakeLists.txt index ba0334fa9d9..5046811ca3d 100644 --- a/Modules/ThirdParty/HDF5/CMakeLists.txt +++ b/Modules/ThirdParty/HDF5/CMakeLists.txt @@ -80,6 +80,7 @@ endif() configure_file(src/itk_hdf5.h.in src/itk_hdf5.h) configure_file(src/itk_H5Cpp.h.in src/itk_H5Cpp.h) list(APPEND ITK_LIBRARY_PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS FALSE) +include_directories(${ITKHDF5_INCLUDE_DIRS}) itk_module_impl() install(FILES ${ITKHDF5_BINARY_DIR}/src/itk_hdf5.h diff --git a/Modules/ThirdParty/MetaIO/src/CMakeLists.txt b/Modules/ThirdParty/MetaIO/src/CMakeLists.txt index 2e58e5bb061..2a9dc7359be 100644 --- a/Modules/ThirdParty/MetaIO/src/CMakeLists.txt +++ b/Modules/ThirdParty/MetaIO/src/CMakeLists.txt @@ -14,5 +14,6 @@ set(METAIO_INSTALL_ARCHIVE_DIR ${ITKMetaIO_INSTALL_ARCHIVE_DIR}) set(METAIO_INSTALL_NO_LIBRARIES FALSE) set(METAIO_INSTALL_NO_DEVELOPMENT FALSE) set(METAIO_LIBRARY_PROPERTIES ${ITK_LIBRARY_PROPERTIES}) +include_directories(${ITKMetaIO_INCLUDE_DIRS}) add_subdirectory(MetaIO/src) itk_module_target(ITKMetaIO NO_INSTALL) From e76937343d03ba78b75dd287ef5e251978f14de6 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Wed, 7 Jan 2026 15:32:23 -0500 Subject: [PATCH 3/7] ENH: Create CMake interface libraries for each ITK module Each ITK CMake interface module includes properties of the module, include the libraries, include directories, and other ITK interface modules that are dependecies. Example usage: target_link_libraries( GradientMagnitudeRecursiveGaussianImageFilter PRIVATE ITK::ITKImageGradientModule ITK::ITKImageIntensityModule ITK::ITKImageIO ) This approach uses target specific requirements and properties to avoid the need for the directory level properies. --- CMake/ITKModuleEnablement.cmake | 39 +++++++++++++++++++ CMake/ITKModuleHeaderTest.cmake | 2 +- CMake/ITKModuleMacros.cmake | 69 +++++++++++++++++++++++++++++---- 3 files changed, 102 insertions(+), 8 deletions(-) diff --git a/CMake/ITKModuleEnablement.cmake b/CMake/ITKModuleEnablement.cmake index c994174d988..3ae3ea2cf43 100644 --- a/CMake/ITKModuleEnablement.cmake +++ b/CMake/ITKModuleEnablement.cmake @@ -428,6 +428,45 @@ macro(init_module_vars) set(${itk-module}-targets-build "${ITK_BINARY_DIR}/ITKTargets.cmake") endmacro() +#---------------------------------------------------------------------- +# Create factory meta-module interface libraries +# These are created for ITKImageIO, ITKMeshIO, ITKTransformIO and FFTImageFilterInit factories +foreach(_factory_name IN ITEMS ImageIO MeshIO TransformIO FFTImageFilterInit) + set(itk-module ITK${_factory_name}) + if(NOT TARGET ${itk-module}) + add_library(${itk-module} INTERFACE) + set_target_properties( + ${itk-module} + PROPERTIES + EXPORT_NAME + ITK::${itk-module} + ) + add_library(ITK::${itk-module} ALIAS ${itk-module}) + + init_module_vars(${itk-module}) + set(ITK_MODULE_${itk-module}_DECLARED 1) + + # Factory modules will be added as dependencies to this meta-module. + # When itk_generate_factory_registration() is called, it adds the include + # directory containing the generated FactoryRegisterManager header file. + # + # Note: Compilation errors like "itkImageIOFactoryRegisterManager.h: No such file or directory" + # indicate that itk_generate_factory_registration() has not been called to generate the header files. + + # Add factory registration compile definition + string(TOUPPER ${_factory_name} _factory_uc) + target_compile_definitions( + ${itk-module} + INTERFACE + ITK_${_factory_uc}_FACTORY_REGISTER_MANAGER + ) + + # Export and install the factory interface library + itk_module_target_export(${itk-module}) + itk_module_target_install(${itk-module}) + endif() +endforeach() + # Build all modules. foreach(itk-module ${ITK_MODULES_ENABLED}) if(NOT ${itk-module}_IS_TEST) diff --git a/CMake/ITKModuleHeaderTest.cmake b/CMake/ITKModuleHeaderTest.cmake index 4f7c7052f75..7cd8fcc10b3 100644 --- a/CMake/ITKModuleHeaderTest.cmake +++ b/CMake/ITKModuleHeaderTest.cmake @@ -123,7 +123,7 @@ macro(itk_module_headertest _name) target_link_libraries( ${_test_name} PUBLIC - ${${_name}_LIBRARIES} + ITK::${_name}Module itksys ) diff --git a/CMake/ITKModuleMacros.cmake b/CMake/ITKModuleMacros.cmake index f8886d7958d..cd09bc041fc 100644 --- a/CMake/ITKModuleMacros.cmake +++ b/CMake/ITKModuleMacros.cmake @@ -213,10 +213,6 @@ macro(itk_module_impl) APPEND ${itk-module}_SYSTEM_GENEX_INCLUDE_DIRS "$" - ) - list( - APPEND - ${itk-module}_SYSTEM_GENEX_INCLUDE_DIRS "$" ) endforeach() @@ -324,6 +320,68 @@ macro(itk_module_impl) endif() endif() + #### + # Create ${itk-module}Module interface library for ITK Modules + #### + add_library(${itk-module}Module INTERFACE) + set_target_properties( + ${itk-module}Module + PROPERTIES + EXPORT_NAME + ITK::${itk-module}Module + ) + add_library(ITK::${itk-module}Module ALIAS ${itk-module}Module) + + target_link_libraries( + ${itk-module}Module + INTERFACE + ${${itk-module}_LIBRARIES} + ) + + # Add include directories with generator expressions + target_include_directories( + ${itk-module}Module + INTERFACE + ${${itk-module}_GENEX_INCLUDE_DIRS} + ) + target_include_directories( + ${itk-module}Module + SYSTEM + INTERFACE + ${${itk-module}_SYSTEM_GENEX_INCLUDE_DIRS} + ) + + # Link transitive dependencies (public + compile depends) through ${itk-module}Module interface + foreach(dep IN LISTS ITK_MODULE_${itk-module}_TRANSITIVE_DEPENDS) + target_link_libraries(${itk-module}Module INTERFACE ${dep}Module) + endforeach() + + # Link this module to factory meta-module interfaces if it provides factories + if(ITK_MODULE_${itk-module}_FACTORY_NAMES) + foreach(_factory_format ${ITK_MODULE_${itk-module}_FACTORY_NAMES}) + # Extract factory name from :: + string( + REGEX + REPLACE + "^(.*)::(.*)$" + "\\1" + _factory_name + "${_factory_format}" + ) + set(_meta_module ITK${_factory_name}) + + # Add this module to the factory meta-module + target_link_libraries(${_meta_module} INTERFACE ${itk-module}Module) + endforeach() + endif() + + # Export and install the interface library + itk_module_target_export(${itk-module}Module) + itk_module_target_install(${itk-module}Module) + #### + # End ITK Modules interface library creation + #### + set(itk-module-EXPORT_CODE-build "${${itk-module}_EXPORT_CODE_BUILD}") set(itk-module-EXPORT_CODE-install "${${itk-module}_EXPORT_CODE_INSTALL}") if(ITK_SOURCE_DIR) @@ -656,9 +714,6 @@ macro(itk_module_add_library _name) ${${itk-module}_GENEX_INCLUDE_DIRS} ) - #message(STATUS "Adding ${itk-module} include dirs to ${_name} target") - #message(STATUS " ${${itk-module}_INCLUDE2_DIRS}") - # Add module system include directories to target target_include_directories( ${_name} From f578b2e3b41cd828823b89840787547c33d519d2 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Wed, 7 Jan 2026 16:05:29 -0500 Subject: [PATCH 4/7] ENH: Add modern CMake linking with ITK interface modules to examples Update all examples to use specific ITK CMake interface module targets instead of ${ITK_LIBRARIES}. Examples now link to minimal required modules with PRIVATE visibility and ITKImageIO for I/O. Enhanced WhatModulesITK.py script with --link option to output target_link_libraries commands. Fixed regex to parse module names across multiple lines. AI was use to generate a script to run WhatModules.py and update the CMakeLists.txt, then manual assisted corrections were made. --- Examples/CMakeLists.txt | 1 - .../DataRepresentation/Image/CMakeLists.txt | 64 +- .../DataRepresentation/Mesh/CMakeLists.txt | 84 ++- .../DataRepresentation/Path/CMakeLists.txt | 8 +- Examples/Filtering/CMakeLists.txt | 554 +++++++++++++-- Examples/IO/CMakeLists.txt | 226 +++++- Examples/IO/XML/CMakeLists.txt | 15 +- Examples/Iterators/CMakeLists.txt | 106 ++- Examples/Numerics/CMakeLists.txt | 2 +- Examples/RegistrationITKv4/CMakeLists.txt | 654 ++++++++++++++++-- Examples/Segmentation/CMakeLists.txt | 213 +++++- Examples/SpatialObjects/CMakeLists.txt | 97 ++- Examples/Statistics/CMakeLists.txt | 198 +++++- Utilities/Maintenance/WhatModulesITK.py | 108 +-- 14 files changed, 2019 insertions(+), 311 deletions(-) diff --git a/Examples/CMakeLists.txt b/Examples/CMakeLists.txt index d1a165fa3ef..e21f2041042 100644 --- a/Examples/CMakeLists.txt +++ b/Examples/CMakeLists.txt @@ -6,7 +6,6 @@ if(NOT ITK_BUILD_DEFAULT_MODULES) endif() find_package(ITK REQUIRED) -include(${ITK_USE_FILE}) set(ITK_TEST_DRIVER itkTestDriver) diff --git a/Examples/DataRepresentation/Image/CMakeLists.txt b/Examples/DataRepresentation/Image/CMakeLists.txt index 9c170d9a323..1116c47a5ba 100644 --- a/Examples/DataRepresentation/Image/CMakeLists.txt +++ b/Examples/DataRepresentation/Image/CMakeLists.txt @@ -1,37 +1,79 @@ project(ImageExamples) add_executable(Image1 Image1.cxx) -target_link_libraries(Image1 ${ITK_LIBRARIES}) +target_link_libraries(Image1 PRIVATE ITK::ITKCommonModule) add_executable(Image2 Image2.cxx) -target_link_libraries(Image2 ${ITK_LIBRARIES}) +target_link_libraries( + Image2 + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule +) add_executable(Image3 Image3.cxx) -target_link_libraries(Image3 ${ITK_LIBRARIES}) +target_link_libraries(Image3 PRIVATE ITK::ITKCommonModule) add_executable(Image4 Image4.cxx) -target_link_libraries(Image4 ${ITK_LIBRARIES}) +target_link_libraries(Image4 PRIVATE ITK::ITKCommonModule) add_executable(VectorImage VectorImage.cxx) -target_link_libraries(VectorImage ${ITK_LIBRARIES}) +target_link_libraries(VectorImage PRIVATE ITK::ITKCommonModule) add_executable(ImageAdaptor2 ImageAdaptor2.cxx) -target_link_libraries(ImageAdaptor2 ${ITK_LIBRARIES}) +target_link_libraries( + ImageAdaptor2 + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule + ITK::ITKImageAdaptorsModule + ITK::ITKImageIntensityModule +) add_executable(ImageAdaptor3 ImageAdaptor3.cxx) -target_link_libraries(ImageAdaptor3 ${ITK_LIBRARIES}) +target_link_libraries( + ImageAdaptor3 + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule + ITK::ITKImageAdaptorsModule + ITK::ITKImageGradientModule + ITK::ITKImageIntensityModule +) add_executable(ImageAdaptor4 ImageAdaptor4.cxx) -target_link_libraries(ImageAdaptor4 ${ITK_LIBRARIES}) +target_link_libraries( + ImageAdaptor4 + PRIVATE + ITK::ITKImageIO + ITK::ITKImageAdaptorsModule + ITK::ITKImageIntensityModule +) add_executable(Image5 Image5.cxx) -target_link_libraries(Image5 ${ITK_LIBRARIES}) +target_link_libraries( + Image5 + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule +) add_executable(ImageAdaptor1 ImageAdaptor1.cxx) -target_link_libraries(ImageAdaptor1 ${ITK_LIBRARIES}) +target_link_libraries( + ImageAdaptor1 + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule + ITK::ITKImageAdaptorsModule +) add_executable(RGBImage RGBImage.cxx) -target_link_libraries(RGBImage ${ITK_LIBRARIES}) +target_link_libraries( + RGBImage + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule +) if(BUILD_TESTING) add_subdirectory(test) diff --git a/Examples/DataRepresentation/Mesh/CMakeLists.txt b/Examples/DataRepresentation/Mesh/CMakeLists.txt index fab2bda1cd5..a846dc7ccce 100644 --- a/Examples/DataRepresentation/Mesh/CMakeLists.txt +++ b/Examples/DataRepresentation/Mesh/CMakeLists.txt @@ -1,55 +1,105 @@ project(MeshExamples) add_executable(PointSet1 PointSet1.cxx) -target_link_libraries(PointSet1 ${ITK_LIBRARIES}) +target_link_libraries(PointSet1 PRIVATE ITK::ITKCommonModule) add_executable(PointSet2 PointSet2.cxx) -target_link_libraries(PointSet2 ${ITK_LIBRARIES}) +target_link_libraries(PointSet2 PRIVATE ITK::ITKCommonModule) add_executable(PointSet3 PointSet3.cxx) -target_link_libraries(PointSet3 ${ITK_LIBRARIES}) +target_link_libraries(PointSet3 PRIVATE ITK::ITKCommonModule) add_executable(RGBPointSet RGBPointSet.cxx) -target_link_libraries(RGBPointSet ${ITK_LIBRARIES}) +target_link_libraries(RGBPointSet PRIVATE ITK::ITKCommonModule) add_executable(PointSetWithVectors PointSetWithVectors.cxx) -target_link_libraries(PointSetWithVectors ${ITK_LIBRARIES}) +target_link_libraries(PointSetWithVectors PRIVATE ITK::ITKCommonModule) add_executable(PointSetWithCovariantVectors PointSetWithCovariantVectors.cxx) -target_link_libraries(PointSetWithCovariantVectors ${ITK_LIBRARIES}) +target_link_libraries(PointSetWithCovariantVectors PRIVATE ITK::ITKCommonModule) add_executable(Mesh1 Mesh1.cxx) -target_link_libraries(Mesh1 ${ITK_LIBRARIES}) +target_link_libraries(Mesh1 PRIVATE ITK::ITKMeshModule) add_executable(Mesh2 Mesh2.cxx) -target_link_libraries(Mesh2 ${ITK_LIBRARIES}) +target_link_libraries( + Mesh2 + PRIVATE + ITK::ITKCommonModule + ITK::ITKMeshModule +) add_executable(Mesh3 Mesh3.cxx) -target_link_libraries(Mesh3 ${ITK_LIBRARIES}) +target_link_libraries( + Mesh3 + PRIVATE + ITK::ITKCommonModule + ITK::ITKMeshModule +) add_executable(MeshTraits MeshTraits.cxx) -target_link_libraries(MeshTraits ${ITK_LIBRARIES}) +target_link_libraries( + MeshTraits + PRIVATE + ITK::ITKCommonModule + ITK::ITKMeshModule +) add_executable(MeshKComplex MeshKComplex.cxx) -target_link_libraries(MeshKComplex ${ITK_LIBRARIES}) +target_link_libraries( + MeshKComplex + PRIVATE + ITK::ITKCommonModule + ITK::ITKMeshModule +) add_executable(MeshPolyLine MeshPolyLine.cxx) -target_link_libraries(MeshPolyLine ${ITK_LIBRARIES}) +target_link_libraries( + MeshPolyLine + PRIVATE + ITK::ITKCommonModule + ITK::ITKMeshModule +) add_executable(MeshCellsIteration MeshCellsIteration.cxx) -target_link_libraries(MeshCellsIteration ${ITK_LIBRARIES}) +target_link_libraries( + MeshCellsIteration + PRIVATE + ITK::ITKCommonModule + ITK::ITKMeshModule +) add_executable(MeshCellVisitor MeshCellVisitor.cxx) -target_link_libraries(MeshCellVisitor ${ITK_LIBRARIES}) +target_link_libraries( + MeshCellVisitor + PRIVATE + ITK::ITKCommonModule + ITK::ITKMeshModule +) add_executable(MeshCellVisitor2 MeshCellVisitor2.cxx) -target_link_libraries(MeshCellVisitor2 ${ITK_LIBRARIES}) +target_link_libraries( + MeshCellVisitor2 + PRIVATE + ITK::ITKCommonModule + ITK::ITKMeshModule +) add_executable(AutomaticMesh AutomaticMesh.cxx) -target_link_libraries(AutomaticMesh ${ITK_LIBRARIES}) +target_link_libraries( + AutomaticMesh + PRIVATE + ITK::ITKCommonModule + ITK::ITKMeshModule +) add_executable(ImageToPointSet ImageToPointSet.cxx) -target_link_libraries(ImageToPointSet ${ITK_LIBRARIES}) +target_link_libraries( + ImageToPointSet + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule +) if(BUILD_TESTING) add_subdirectory(test) diff --git a/Examples/DataRepresentation/Path/CMakeLists.txt b/Examples/DataRepresentation/Path/CMakeLists.txt index 81a77d65e39..45c9997e287 100644 --- a/Examples/DataRepresentation/Path/CMakeLists.txt +++ b/Examples/DataRepresentation/Path/CMakeLists.txt @@ -1,7 +1,13 @@ project(PathExamples) add_executable(PolyLineParametricPath1 PolyLineParametricPath1.cxx) -target_link_libraries(PolyLineParametricPath1 ${ITK_LIBRARIES}) +target_link_libraries( + PolyLineParametricPath1 + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule + ITK::ITKPathModule +) if(BUILD_TESTING) add_subdirectory(test) diff --git a/Examples/Filtering/CMakeLists.txt b/Examples/Filtering/CMakeLists.txt index 97feabff359..94f40ff184a 100644 --- a/Examples/Filtering/CMakeLists.txt +++ b/Examples/Filtering/CMakeLists.txt @@ -1,98 +1,249 @@ project(FilteringExamples) add_executable(CompositeFilterExample CompositeFilterExample.cxx) -target_link_libraries(CompositeFilterExample ${ITK_LIBRARIES}) +target_link_libraries( + CompositeFilterExample + PRIVATE + ITK::ITKImageGradientModule + ITK::ITKImageIntensityModule + ITK::ITKThresholdingModule + ITK::ITKImageIO +) add_executable(FlipImageFilter FlipImageFilter.cxx) -target_link_libraries(FlipImageFilter ${ITK_LIBRARIES}) +target_link_libraries( + FlipImageFilter + PRIVATE + ITK::ITKImageGridModule + ITK::ITKImageIO +) add_executable(FFTImageFilter FFTImageFilter.cxx) -target_link_libraries(FFTImageFilter ${ITK_LIBRARIES}) +target_link_libraries( + FFTImageFilter + PRIVATE + ITK::ITKFFTModule + ITK::ITKImageIntensityModule + ITK::ITKImageIO +) if(ITK_USE_FFTWF) add_executable(FFTDirectInverse2 FFTDirectInverse2.cxx) - target_link_libraries(FFTDirectInverse2 ${ITK_LIBRARIES}) + target_link_libraries( + FFTDirectInverse2 + PRIVATE + ITK::ITKFFTModule + ITK::ITKImageIntensityModule + ITK::ITKImageIO + ) endif() add_executable(GradientMagnitudeImageFilter GradientMagnitudeImageFilter.cxx) -target_link_libraries(GradientMagnitudeImageFilter ${ITK_LIBRARIES}) +target_link_libraries( + GradientMagnitudeImageFilter + PRIVATE + ITK::ITKImageGradientModule + ITK::ITKImageIntensityModule + ITK::ITKImageIO +) add_executable( GradientMagnitudeRecursiveGaussianImageFilter GradientMagnitudeRecursiveGaussianImageFilter.cxx ) target_link_libraries( GradientMagnitudeRecursiveGaussianImageFilter - ${ITK_LIBRARIES} + PRIVATE + ITK::ITKImageGradientModule + ITK::ITKImageIntensityModule + ITK::ITKImageIO ) add_executable( GradientRecursiveGaussianImageFilter GradientRecursiveGaussianImageFilter.cxx ) -target_link_libraries(GradientRecursiveGaussianImageFilter ${ITK_LIBRARIES}) +target_link_libraries( + GradientRecursiveGaussianImageFilter + PRIVATE + ITK::ITKImageGradientModule + ITK::ITKImageIO +) add_executable( GrayscaleFunctionDilateImageFilter GrayscaleFunctionDilateImageFilter.cxx ) -target_link_libraries(GrayscaleFunctionDilateImageFilter ${ITK_LIBRARIES}) +target_link_libraries( + GrayscaleFunctionDilateImageFilter + PRIVATE + ITK::ITKMathematicalMorphologyModule + ITK::ITKImageIO +) add_executable(BinaryThresholdImageFilter BinaryThresholdImageFilter.cxx) -target_link_libraries(BinaryThresholdImageFilter ${ITK_LIBRARIES}) +target_link_libraries( + BinaryThresholdImageFilter + PRIVATE + ITK::ITKThresholdingModule + ITK::ITKImageIO +) add_executable(BinaryMedianImageFilter BinaryMedianImageFilter.cxx) -target_link_libraries(BinaryMedianImageFilter ${ITK_LIBRARIES}) +target_link_libraries( + BinaryMedianImageFilter + PRIVATE + ITK::ITKLabelVotingModule + ITK::ITKImageIO +) add_executable(OrientImageFilter OrientImageFilter.cxx) -target_link_libraries(OrientImageFilter ${ITK_LIBRARIES}) +target_link_libraries( + OrientImageFilter + PRIVATE + ITK::ITKImageGridModule + ITK::ITKImageIO +) add_executable(OtsuThresholdImageFilter OtsuThresholdImageFilter.cxx) -target_link_libraries(OtsuThresholdImageFilter ${ITK_LIBRARIES}) +target_link_libraries( + OtsuThresholdImageFilter + PRIVATE + ITK::ITKThresholdingModule + ITK::ITKImageIO +) add_executable( OtsuMultipleThresholdImageFilter OtsuMultipleThresholdImageFilter.cxx ) -target_link_libraries(OtsuMultipleThresholdImageFilter ${ITK_LIBRARIES}) +target_link_libraries( + OtsuMultipleThresholdImageFilter + PRIVATE + ITK::ITKStatisticsModule + ITK::ITKThresholdingModule + ITK::ITKImageIO +) add_executable(ThresholdImageFilter ThresholdImageFilter.cxx) -target_link_libraries(ThresholdImageFilter ${ITK_LIBRARIES}) +target_link_libraries( + ThresholdImageFilter + PRIVATE + ITK::ITKThresholdingModule + ITK::ITKImageIO +) add_executable(CastingImageFilters CastingImageFilters.cxx) -target_link_libraries(CastingImageFilters ${ITK_LIBRARIES}) +target_link_libraries( + CastingImageFilters + PRIVATE + ITK::ITKImageIntensityModule + ITK::ITKImageIO +) add_executable(CannyEdgeDetectionImageFilter CannyEdgeDetectionImageFilter.cxx) -target_link_libraries(CannyEdgeDetectionImageFilter ${ITK_LIBRARIES}) +target_link_libraries( + CannyEdgeDetectionImageFilter + PRIVATE + ITK::ITKImageFeatureModule + ITK::ITKImageIntensityModule + ITK::ITKImageIO +) add_executable(MedianImageFilter MedianImageFilter.cxx) -target_link_libraries(MedianImageFilter ${ITK_LIBRARIES}) +target_link_libraries( + MedianImageFilter + PRIVATE + ITK::ITKSmoothingModule + ITK::ITKImageIO +) add_executable(MeanImageFilter MeanImageFilter.cxx) -target_link_libraries(MeanImageFilter ${ITK_LIBRARIES}) +target_link_libraries( + MeanImageFilter + PRIVATE + ITK::ITKSmoothingModule + ITK::ITKImageIO +) add_executable( MathematicalMorphologyBinaryFilters MathematicalMorphologyBinaryFilters.cxx ) -target_link_libraries(MathematicalMorphologyBinaryFilters ${ITK_LIBRARIES}) +target_link_libraries( + MathematicalMorphologyBinaryFilters + PRIVATE + ITK::ITKBinaryMathematicalMorphologyModule + ITK::ITKMathematicalMorphologyModule + ITK::ITKThresholdingModule + ITK::ITKImageIO +) add_executable( MathematicalMorphologyGrayscaleFilters MathematicalMorphologyGrayscaleFilters.cxx ) -target_link_libraries(MathematicalMorphologyGrayscaleFilters ${ITK_LIBRARIES}) +target_link_libraries( + MathematicalMorphologyGrayscaleFilters + PRIVATE + ITK::ITKMathematicalMorphologyModule + ITK::ITKImageIO +) add_executable( BinaryMinMaxCurvatureFlowImageFilter BinaryMinMaxCurvatureFlowImageFilter.cxx ) -target_link_libraries(BinaryMinMaxCurvatureFlowImageFilter ${ITK_LIBRARIES}) +target_link_libraries( + BinaryMinMaxCurvatureFlowImageFilter + PRIVATE + ITK::ITKCurvatureFlowModule + ITK::ITKImageIntensityModule + ITK::ITKImageIO +) add_executable(DiscreteGaussianImageFilter DiscreteGaussianImageFilter.cxx) -target_link_libraries(DiscreteGaussianImageFilter ${ITK_LIBRARIES}) +target_link_libraries( + DiscreteGaussianImageFilter + PRIVATE + ITK::ITKImageIntensityModule + ITK::ITKSmoothingModule + ITK::ITKImageIO +) add_executable(GaussianBlurImageFunction GaussianBlurImageFunction.cxx) -target_link_libraries(GaussianBlurImageFunction ${ITK_LIBRARIES}) +target_link_libraries( + GaussianBlurImageFunction + PRIVATE + ITK::ITKImageFunctionModule + ITK::ITKImageIO +) add_executable( LaplacianRecursiveGaussianImageFilter1 LaplacianRecursiveGaussianImageFilter1.cxx ) -target_link_libraries(LaplacianRecursiveGaussianImageFilter1 ${ITK_LIBRARIES}) +target_link_libraries( + LaplacianRecursiveGaussianImageFilter1 + PRIVATE + ITK::ITKImageIntensityModule + ITK::ITKSmoothingModule + ITK::ITKImageIO +) add_executable(ScaleSpaceGenerator2D ScaleSpaceGenerator2D.cxx) -target_link_libraries(ScaleSpaceGenerator2D ${ITK_LIBRARIES}) +target_link_libraries( + ScaleSpaceGenerator2D + PRIVATE + ITK::ITKImageFeatureModule + ITK::ITKImageIO +) add_executable(BinomialBlurImageFilter BinomialBlurImageFilter.cxx) -target_link_libraries(BinomialBlurImageFilter ${ITK_LIBRARIES}) +target_link_libraries( + BinomialBlurImageFilter + PRIVATE + ITK::ITKImageIntensityModule + ITK::ITKSmoothingModule + ITK::ITKImageIO +) add_executable( CurvatureAnisotropicDiffusionImageFilter CurvatureAnisotropicDiffusionImageFilter.cxx ) -target_link_libraries(CurvatureAnisotropicDiffusionImageFilter ${ITK_LIBRARIES}) +target_link_libraries( + CurvatureAnisotropicDiffusionImageFilter + PRIVATE + ITK::ITKAnisotropicSmoothingModule + ITK::ITKImageIntensityModule + ITK::ITKImageIO +) add_executable( VectorGradientAnisotropicDiffusionImageFilter VectorGradientAnisotropicDiffusionImageFilter.cxx ) target_link_libraries( VectorGradientAnisotropicDiffusionImageFilter - ${ITK_LIBRARIES} + PRIVATE + ITK::ITKAnisotropicSmoothingModule + ITK::ITKImageGradientModule + ITK::ITKImageIntensityModule + ITK::ITKImageIO ) add_executable( VectorCurvatureAnisotropicDiffusionImageFilter @@ -100,32 +251,79 @@ add_executable( ) target_link_libraries( VectorCurvatureAnisotropicDiffusionImageFilter - ${ITK_LIBRARIES} + PRIVATE + ITK::ITKAnisotropicSmoothingModule + ITK::ITKImageGradientModule + ITK::ITKImageIntensityModule + ITK::ITKImageIO ) add_executable(RGBToGrayscale RGBToGrayscale.cxx) -target_link_libraries(RGBToGrayscale ${ITK_LIBRARIES}) +target_link_libraries( + RGBToGrayscale + PRIVATE + ITK::ITKImageIntensityModule + ITK::ITKImageIO +) add_executable(BilateralImageFilter BilateralImageFilter.cxx) -target_link_libraries(BilateralImageFilter ${ITK_LIBRARIES}) +target_link_libraries( + BilateralImageFilter + PRIVATE + ITK::ITKImageFeatureModule + ITK::ITKImageIntensityModule + ITK::ITKImageIO +) add_executable(ResampleImageFilter2 ResampleImageFilter2.cxx) -target_link_libraries(ResampleImageFilter2 ${ITK_LIBRARIES}) +target_link_libraries( + ResampleImageFilter2 + PRIVATE + ITK::ITKImageFunctionModule + ITK::ITKImageGridModule + ITK::ITKTransformModule + ITK::ITKImageIO +) add_executable( GradientAnisotropicDiffusionImageFilter GradientAnisotropicDiffusionImageFilter.cxx ) -target_link_libraries(GradientAnisotropicDiffusionImageFilter ${ITK_LIBRARIES}) +target_link_libraries( + GradientAnisotropicDiffusionImageFilter + PRIVATE + ITK::ITKAnisotropicSmoothingModule + ITK::ITKImageIntensityModule + ITK::ITKImageIO +) add_executable(CurvatureFlowImageFilter CurvatureFlowImageFilter.cxx) -target_link_libraries(CurvatureFlowImageFilter ${ITK_LIBRARIES}) +target_link_libraries( + CurvatureFlowImageFilter + PRIVATE + ITK::ITKCurvatureFlowModule + ITK::ITKImageIntensityModule + ITK::ITKImageIO +) add_executable(GradientVectorFlowImageFilter GradientVectorFlowImageFilter.cxx) -target_link_libraries(GradientVectorFlowImageFilter ${ITK_LIBRARIES}) +target_link_libraries( + GradientVectorFlowImageFilter + PRIVATE + ITK::ITKImageFeatureModule + ITK::ITKImageIntensityModule + ITK::ITKImageIO +) add_executable(SigmoidImageFilter SigmoidImageFilter.cxx) -target_link_libraries(SigmoidImageFilter ${ITK_LIBRARIES}) +target_link_libraries( + SigmoidImageFilter + PRIVATE + ITK::ITKImageIntensityModule + ITK::ITKImageIO +) add_executable( RGBCurvatureAnisotropicDiffusionImageFilter RGBCurvatureAnisotropicDiffusionImageFilter.cxx ) target_link_libraries( RGBCurvatureAnisotropicDiffusionImageFilter - ${ITK_LIBRARIES} + PRIVATE + ITK::ITKAnisotropicSmoothingModule + ITK::ITKImageIO ) add_executable( RGBGradientAnisotropicDiffusionImageFilter @@ -133,134 +331,342 @@ add_executable( ) target_link_libraries( RGBGradientAnisotropicDiffusionImageFilter - ${ITK_LIBRARIES} + PRIVATE + ITK::ITKAnisotropicSmoothingModule + ITK::ITKImageIO ) add_executable( SignedDanielssonDistanceMapImageFilter SignedDanielssonDistanceMapImageFilter.cxx ) -target_link_libraries(SignedDanielssonDistanceMapImageFilter ${ITK_LIBRARIES}) +target_link_libraries( + SignedDanielssonDistanceMapImageFilter + PRIVATE + ITK::ITKDistanceMapModule + ITK::ITKImageIntensityModule + ITK::ITKImageIO +) add_executable( SecondDerivativeRecursiveGaussianImageFilter SecondDerivativeRecursiveGaussianImageFilter.cxx ) target_link_libraries( SecondDerivativeRecursiveGaussianImageFilter - ${ITK_LIBRARIES} + PRIVATE + ITK::ITKSmoothingModule + ITK::ITKImageIO ) add_executable(DerivativeImageFilter DerivativeImageFilter.cxx) -target_link_libraries(DerivativeImageFilter ${ITK_LIBRARIES}) +target_link_libraries( + DerivativeImageFilter + PRIVATE + ITK::ITKImageFeatureModule + ITK::ITKImageIntensityModule + ITK::ITKImageIO +) add_executable( DanielssonDistanceMapImageFilter DanielssonDistanceMapImageFilter.cxx ) -target_link_libraries(DanielssonDistanceMapImageFilter ${ITK_LIBRARIES}) +target_link_libraries( + DanielssonDistanceMapImageFilter + PRIVATE + ITK::ITKConnectedComponentsModule + ITK::ITKDistanceMapModule + ITK::ITKImageIntensityModule + ITK::ITKImageIO +) add_executable(AntiAliasBinaryImageFilter AntiAliasBinaryImageFilter.cxx) -target_link_libraries(AntiAliasBinaryImageFilter ${ITK_LIBRARIES}) +target_link_libraries( + AntiAliasBinaryImageFilter + PRIVATE + ITK::ITKAntiAliasModule + ITK::ITKImageIntensityModule + ITK::ITKImageIO +) add_executable(ResampleImageFilter ResampleImageFilter.cxx) -target_link_libraries(ResampleImageFilter ${ITK_LIBRARIES}) +target_link_libraries( + ResampleImageFilter + PRIVATE + ITK::ITKImageFunctionModule + ITK::ITKImageGridModule + ITK::ITKTransformModule + ITK::ITKImageIO +) add_executable( SmoothingRecursiveGaussianImageFilter SmoothingRecursiveGaussianImageFilter.cxx ) -target_link_libraries(SmoothingRecursiveGaussianImageFilter ${ITK_LIBRARIES}) +target_link_libraries( + SmoothingRecursiveGaussianImageFilter + PRIVATE + ITK::ITKImageIntensityModule + ITK::ITKSmoothingModule + ITK::ITKImageIO +) add_executable( SmoothingRecursiveGaussianImageFilter2 SmoothingRecursiveGaussianImageFilter2.cxx ) -target_link_libraries(SmoothingRecursiveGaussianImageFilter2 ${ITK_LIBRARIES}) +target_link_libraries( + SmoothingRecursiveGaussianImageFilter2 + PRIVATE + ITK::ITKImageIntensityModule + ITK::ITKSmoothingModule + ITK::ITKImageIO +) add_executable( LaplacianRecursiveGaussianImageFilter2 LaplacianRecursiveGaussianImageFilter2.cxx ) -target_link_libraries(LaplacianRecursiveGaussianImageFilter2 ${ITK_LIBRARIES}) +target_link_libraries( + LaplacianRecursiveGaussianImageFilter2 + PRIVATE + ITK::ITKImageFeatureModule + ITK::ITKImageIntensityModule + ITK::ITKImageIO +) add_executable(MorphologicalImageEnhancement MorphologicalImageEnhancement.cxx) -target_link_libraries(MorphologicalImageEnhancement ${ITK_LIBRARIES}) +target_link_libraries( + MorphologicalImageEnhancement + PRIVATE + ITK::ITKIOPNGModule + ITK::ITKImageIntensityModule + ITK::ITKMathematicalMorphologyModule + ITK::ITKImageIO +) add_executable( MinMaxCurvatureFlowImageFilter MinMaxCurvatureFlowImageFilter.cxx ) -target_link_libraries(MinMaxCurvatureFlowImageFilter ${ITK_LIBRARIES}) +target_link_libraries( + MinMaxCurvatureFlowImageFilter + PRIVATE + ITK::ITKCurvatureFlowModule + ITK::ITKImageIntensityModule + ITK::ITKImageIO +) add_executable( FFTImageFilterFourierDomainFiltering FFTImageFilterFourierDomainFiltering.cxx ) -target_link_libraries(FFTImageFilterFourierDomainFiltering ${ITK_LIBRARIES}) +target_link_libraries( + FFTImageFilterFourierDomainFiltering + PRIVATE + ITK::ITKFFTModule + ITK::ITKImageIntensityModule + ITK::ITKImageIO +) add_executable(LaplacianImageFilter LaplacianImageFilter.cxx) -target_link_libraries(LaplacianImageFilter ${ITK_LIBRARIES}) +target_link_libraries( + LaplacianImageFilter + PRIVATE + ITK::ITKImageFeatureModule + ITK::ITKImageIntensityModule + ITK::ITKImageIO +) add_executable(ResampleImageFilter3 ResampleImageFilter3.cxx) -target_link_libraries(ResampleImageFilter3 ${ITK_LIBRARIES}) +target_link_libraries( + ResampleImageFilter3 + PRIVATE + ITK::ITKImageFunctionModule + ITK::ITKImageGridModule + ITK::ITKTransformModule + ITK::ITKImageIO +) add_executable(ResampleImageFilter4 ResampleImageFilter4.cxx) -target_link_libraries(ResampleImageFilter4 ${ITK_LIBRARIES}) +target_link_libraries( + ResampleImageFilter4 + PRIVATE + ITK::ITKImageGridModule + ITK::ITKTransformModule + ITK::ITKImageIO +) add_executable( VotingBinaryHoleFillingImageFilter VotingBinaryHoleFillingImageFilter.cxx ) -target_link_libraries(VotingBinaryHoleFillingImageFilter ${ITK_LIBRARIES}) +target_link_libraries( + VotingBinaryHoleFillingImageFilter + PRIVATE + ITK::ITKLabelVotingModule + ITK::ITKImageIO +) add_executable( VotingBinaryIterativeHoleFillingImageFilter VotingBinaryIterativeHoleFillingImageFilter.cxx ) target_link_libraries( VotingBinaryIterativeHoleFillingImageFilter - ${ITK_LIBRARIES} + PRIVATE + ITK::ITKLabelVotingModule + ITK::ITKImageIO ) add_executable(ResampleImageFilter5 ResampleImageFilter5.cxx) -target_link_libraries(ResampleImageFilter5 ${ITK_LIBRARIES}) +target_link_libraries( + ResampleImageFilter5 + PRIVATE + ITK::ITKImageGridModule + ITK::ITKTransformModule + ITK::ITKImageIO +) add_executable(ResampleImageFilter6 ResampleImageFilter6.cxx) -target_link_libraries(ResampleImageFilter6 ${ITK_LIBRARIES}) +target_link_libraries( + ResampleImageFilter6 + PRIVATE + ITK::ITKImageGridModule + ITK::ITKTransformModule + ITK::ITKImageIO +) add_executable(ResampleImageFilter8 ResampleImageFilter8.cxx) -target_link_libraries(ResampleImageFilter8 ${ITK_LIBRARIES}) +target_link_libraries( + ResampleImageFilter8 + PRIVATE + ITK::ITKImageFunctionModule + ITK::ITKImageGridModule + ITK::ITKTransformModule + ITK::ITKImageIO +) add_executable(ResampleImageFilter9 ResampleImageFilter9.cxx) -target_link_libraries(ResampleImageFilter9 ${ITK_LIBRARIES}) +target_link_libraries( + ResampleImageFilter9 + PRIVATE + ITK::ITKImageFunctionModule + ITK::ITKImageGridModule + ITK::ITKTransformModule + ITK::ITKImageIO +) add_executable(ResampleVolumesToBeIsotropic ResampleVolumesToBeIsotropic.cxx) -target_link_libraries(ResampleVolumesToBeIsotropic ${ITK_LIBRARIES}) +target_link_libraries( + ResampleVolumesToBeIsotropic + PRIVATE + ITK::ITKImageGridModule + ITK::ITKImageIntensityModule + ITK::ITKSmoothingModule + ITK::ITKTransformModule + ITK::ITKImageIO +) add_executable(SubsampleVolume SubsampleVolume.cxx) -target_link_libraries(SubsampleVolume ${ITK_LIBRARIES}) +target_link_libraries( + SubsampleVolume + PRIVATE + ITK::ITKImageGridModule + ITK::ITKSmoothingModule + ITK::ITKTransformModule + ITK::ITKImageIO +) add_executable(SpatialObjectToImage1 SpatialObjectToImage1.cxx) -target_link_libraries(SpatialObjectToImage1 ${ITK_LIBRARIES}) +target_link_libraries( + SpatialObjectToImage1 + PRIVATE + ITK::ITKSpatialObjectsModule + ITK::ITKImageIO +) add_executable(SpatialObjectToImage2 SpatialObjectToImage2.cxx) -target_link_libraries(SpatialObjectToImage2 ${ITK_LIBRARIES}) +target_link_libraries( + SpatialObjectToImage2 + PRIVATE + ITK::ITKSpatialObjectsModule + ITK::ITKImageIO +) add_executable(SpatialObjectToImage3 SpatialObjectToImage3.cxx) -target_link_libraries(SpatialObjectToImage3 ${ITK_LIBRARIES}) +target_link_libraries( + SpatialObjectToImage3 + PRIVATE + ITK::ITKSpatialObjectsModule + ITK::ITKImageIO +) add_executable( LaplacianSharpeningImageFilter LaplacianSharpeningImageFilter.cxx ) -target_link_libraries(LaplacianSharpeningImageFilter ${ITK_LIBRARIES}) +target_link_libraries( + LaplacianSharpeningImageFilter + PRIVATE + ITK::ITKImageFeatureModule + ITK::ITKImageIntensityModule + ITK::ITKImageIO +) add_executable(VectorIndexSelection VectorIndexSelection.cxx) -target_link_libraries(VectorIndexSelection ${ITK_LIBRARIES}) +target_link_libraries( + VectorIndexSelection + PRIVATE + ITK::ITKImageIntensityModule + ITK::ITKImageIO +) add_executable(VesselnessMeasureImageFilter VesselnessMeasureImageFilter.cxx) -target_link_libraries(VesselnessMeasureImageFilter ${ITK_LIBRARIES}) +target_link_libraries( + VesselnessMeasureImageFilter + PRIVATE + ITK::ITKImageFeatureModule + ITK::ITKImageIO +) add_executable( DiffusionTensor3DReconstructionImageFilter DiffusionTensor3DReconstructionImageFilter.cxx ) target_link_libraries( DiffusionTensor3DReconstructionImageFilter - ${ITK_LIBRARIES} + PRIVATE + ITK::ITKDiffusionTensorImageModule + ITK::ITKIONRRDModule + ITK::ITKImageIO ) add_executable(FFTDirectInverse FFTDirectInverse.cxx) -target_link_libraries(FFTDirectInverse ${ITK_LIBRARIES}) +target_link_libraries( + FFTDirectInverse + PRIVATE + ITK::ITKFFTModule + ITK::ITKImageGridModule + ITK::ITKImageIO +) add_executable( ZeroCrossingBasedEdgeDetectionImageFilter ZeroCrossingBasedEdgeDetectionImageFilter.cxx ) target_link_libraries( ZeroCrossingBasedEdgeDetectionImageFilter - ${ITK_LIBRARIES} + PRIVATE + ITK::ITKImageFeatureModule + ITK::ITKImageIntensityModule + ITK::ITKImageIO ) add_executable(WarpImageFilter1 WarpImageFilter1.cxx) -target_link_libraries(WarpImageFilter1 ${ITK_LIBRARIES}) +target_link_libraries( + WarpImageFilter1 + PRIVATE + ITK::ITKImageGridModule + ITK::ITKImageIO +) add_executable(SurfaceExtraction SurfaceExtraction.cxx) -target_link_libraries(SurfaceExtraction ${ITK_LIBRARIES}) +target_link_libraries( + SurfaceExtraction + PRIVATE + ITK::ITKMeshModule + ITK::ITKImageIO +) add_executable( DigitallyReconstructedRadiograph1 DigitallyReconstructedRadiograph1.cxx ) -target_link_libraries(DigitallyReconstructedRadiograph1 ${ITK_LIBRARIES}) +target_link_libraries( + DigitallyReconstructedRadiograph1 + PRIVATE + ITK::ITKImageFunctionModule + ITK::ITKImageGridModule + ITK::ITKImageIntensityModule + ITK::ITKTransformModule + ITK::ITKImageIO +) add_executable(ResampleImageFilter7 ResampleImageFilter7.cxx) -target_link_libraries(ResampleImageFilter7 ${ITK_LIBRARIES}) +target_link_libraries( + ResampleImageFilter7 + PRIVATE + ITK::ITKImageFunctionModule + ITK::ITKImageGridModule + ITK::ITKTransformModule + ITK::ITKImageIO +) if(BUILD_TESTING) add_subdirectory(test) diff --git a/Examples/IO/CMakeLists.txt b/Examples/IO/CMakeLists.txt index 2f24973a095..8d204099d93 100644 --- a/Examples/IO/CMakeLists.txt +++ b/Examples/IO/CMakeLists.txt @@ -1,109 +1,275 @@ project(IOExamples) add_executable(ImageReadWrite ImageReadWrite.cxx) -target_link_libraries(ImageReadWrite ${ITK_LIBRARIES}) +target_link_libraries( + ImageReadWrite + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule +) add_executable(ImageReadCastWrite ImageReadCastWrite.cxx) -target_link_libraries(ImageReadCastWrite ${ITK_LIBRARIES}) +target_link_libraries( + ImageReadCastWrite + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule + ITK::ITKImageIntensityModule +) add_executable( ImageReadExtractFilterInsertWrite ImageReadExtractFilterInsertWrite.cxx ) -target_link_libraries(ImageReadExtractFilterInsertWrite ${ITK_LIBRARIES}) +target_link_libraries( + ImageReadExtractFilterInsertWrite + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule + ITK::ITKImageGridModule + ITK::ITKSmoothingModule +) add_executable( ImageReadRegionOfInterestWrite ImageReadRegionOfInterestWrite.cxx ) -target_link_libraries(ImageReadRegionOfInterestWrite ${ITK_LIBRARIES}) +target_link_libraries( + ImageReadRegionOfInterestWrite + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule + ITK::ITKImageGridModule +) add_executable(RGBImageReadWrite RGBImageReadWrite.cxx) -target_link_libraries(RGBImageReadWrite ${ITK_LIBRARIES}) +target_link_libraries( + RGBImageReadWrite + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule +) add_executable(CovariantVectorImageRead CovariantVectorImageRead.cxx) -target_link_libraries(CovariantVectorImageRead ${ITK_LIBRARIES}) +target_link_libraries( + CovariantVectorImageRead + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule + ITK::ITKImageIntensityModule +) add_executable( CovariantVectorImageExtractComponent CovariantVectorImageExtractComponent.cxx ) -target_link_libraries(CovariantVectorImageExtractComponent ${ITK_LIBRARIES}) +target_link_libraries( + CovariantVectorImageExtractComponent + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule + ITK::ITKImageIntensityModule +) add_executable(VectorImageReadWrite VectorImageReadWrite.cxx) -target_link_libraries(VectorImageReadWrite ${ITK_LIBRARIES}) +target_link_libraries( + VectorImageReadWrite + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule +) add_executable(ComplexImageReadWrite ComplexImageReadWrite.cxx) -target_link_libraries(ComplexImageReadWrite ${ITK_LIBRARIES}) +target_link_libraries( + ComplexImageReadWrite + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule +) add_executable(ImageReadExportVTK ImageReadExportVTK.cxx) -target_link_libraries(ImageReadExportVTK ${ITK_LIBRARIES}) +target_link_libraries( + ImageReadExportVTK + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule + ITK::ITKIOVTKModule +) add_executable(RGBImageSeriesReadWrite RGBImageSeriesReadWrite.cxx) -target_link_libraries(RGBImageSeriesReadWrite ${ITK_LIBRARIES}) +target_link_libraries( + RGBImageSeriesReadWrite + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule + ITK::ITKIOPNGModule +) add_executable(ImageSeriesReadWrite ImageSeriesReadWrite.cxx) -target_link_libraries(ImageSeriesReadWrite ${ITK_LIBRARIES}) +target_link_libraries( + ImageSeriesReadWrite + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule + ITK::ITKIOPNGModule +) add_executable(ImageSeriesReadWrite2 ImageSeriesReadWrite2.cxx) -target_link_libraries(ImageSeriesReadWrite2 ${ITK_LIBRARIES}) +target_link_libraries( + ImageSeriesReadWrite2 + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule + ITK::ITKIOPNGModule +) add_executable(ImageReadImageSeriesWrite ImageReadImageSeriesWrite.cxx) -target_link_libraries(ImageReadImageSeriesWrite ${ITK_LIBRARIES}) +target_link_libraries( + ImageReadImageSeriesWrite + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule +) add_executable(DicomSeriesReadImageWrite2 DicomSeriesReadImageWrite2.cxx) -target_link_libraries(DicomSeriesReadImageWrite2 ${ITK_LIBRARIES}) +target_link_libraries( + DicomSeriesReadImageWrite2 + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule + ITK::ITKIOGDCMModule +) add_executable( DicomSeriesReadGaussianImageWrite DicomSeriesReadGaussianImageWrite.cxx ) -target_link_libraries(DicomSeriesReadGaussianImageWrite ${ITK_LIBRARIES}) +target_link_libraries( + DicomSeriesReadGaussianImageWrite + PRIVATE + ITK::ITKImageIO + ITK::ITKIOGDCMModule + ITK::ITKSmoothingModule +) add_executable(DicomSeriesReadPrintTags DicomSeriesReadPrintTags.cxx) -target_link_libraries(DicomSeriesReadPrintTags ${ITK_LIBRARIES}) +target_link_libraries( + DicomSeriesReadPrintTags + PRIVATE + ITK::ITKImageIO + ITK::ITKIOGDCMModule +) add_executable(DicomImageReadPrintTags DicomImageReadPrintTags.cxx) -target_link_libraries(DicomImageReadPrintTags ${ITK_LIBRARIES}) +target_link_libraries( + DicomImageReadPrintTags + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule + ITK::ITKIOGDCMModule + ITK::ITKGDCMModule +) add_executable(DicomImageReadWrite DicomImageReadWrite.cxx) -target_link_libraries(DicomImageReadWrite ${ITK_LIBRARIES}) +target_link_libraries( + DicomImageReadWrite + PRIVATE + ITK::ITKImageIO + ITK::ITKIOGDCMModule + ITK::ITKImageIntensityModule +) add_executable(ImageReadDicomSeriesWrite ImageReadDicomSeriesWrite.cxx) -target_link_libraries(ImageReadDicomSeriesWrite ${ITK_LIBRARIES}) +target_link_libraries( + ImageReadDicomSeriesWrite + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule + ITK::ITKIOGDCMModule +) add_executable( DicomImageReadChangeHeaderWrite DicomImageReadChangeHeaderWrite.cxx ) -target_link_libraries(DicomImageReadChangeHeaderWrite ${ITK_LIBRARIES}) +target_link_libraries( + DicomImageReadChangeHeaderWrite + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule + ITK::ITKIOGDCMModule +) add_executable(DicomSeriesReadSeriesWrite DicomSeriesReadSeriesWrite.cxx) -target_link_libraries(DicomSeriesReadSeriesWrite ${ITK_LIBRARIES}) +target_link_libraries( + DicomSeriesReadSeriesWrite + PRIVATE + ITK::ITKImageIO + ITK::ITKIOGDCMModule +) add_executable(DicomPrintPatientInformation DicomPrintPatientInformation.cxx) -target_link_libraries(DicomPrintPatientInformation ${ITK_LIBRARIES}) +target_link_libraries( + DicomPrintPatientInformation + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule + ITK::ITKIOGDCMModule +) add_executable(TransformReadWrite TransformReadWrite.cxx) -target_link_libraries(TransformReadWrite ${ITK_LIBRARIES}) +target_link_libraries( + TransformReadWrite + PRIVATE + ITK::ITKTransformIO + ITK::ITKTransformModule + ITK::ITKTransformFactoryModule +) add_executable(VisibleHumanStreamReadWrite VisibleHumanStreamReadWrite.cxx) -target_link_libraries(VisibleHumanStreamReadWrite ${ITK_LIBRARIES}) +target_link_libraries( + VisibleHumanStreamReadWrite + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule + ITK::ITKIORAWModule + ITK::ITKImageComposeModule + ITK::ITKImageGridModule + ITK::ITKSmoothingModule +) add_executable(VisibleHumanPasteWrite VisibleHumanPasteWrite.cxx) -target_link_libraries(VisibleHumanPasteWrite ${ITK_LIBRARIES}) +target_link_libraries( + VisibleHumanPasteWrite + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule + ITK::ITKImageAdaptorsModule + ITK::ITKImageComposeModule + ITK::ITKImageGradientModule +) add_executable(CovariantVectorImageWrite CovariantVectorImageWrite.cxx) -target_link_libraries(CovariantVectorImageWrite ${ITK_LIBRARIES}) +target_link_libraries( + CovariantVectorImageWrite + PRIVATE + ITK::ITKImageIO + ITK::ITKImageGradientModule +) add_executable(ImageReadExtractWrite ImageReadExtractWrite.cxx) -target_link_libraries(ImageReadExtractWrite ${ITK_LIBRARIES}) +target_link_libraries( + ImageReadExtractWrite + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule +) add_executable(IOPlugin IOPlugin.cxx) -target_link_libraries(IOPlugin ${ITK_LIBRARIES}) +target_link_libraries(IOPlugin PRIVATE ITK::ITKImageIO) add_executable(IOFactoryRegistration IOFactoryRegistration.cxx) -target_link_libraries(IOFactoryRegistration ${ITK_LIBRARIES}) +target_link_libraries(IOFactoryRegistration PRIVATE ITK::ITKImageIO) if(BUILD_TESTING) add_subdirectory(test) diff --git a/Examples/IO/XML/CMakeLists.txt b/Examples/IO/XML/CMakeLists.txt index 3d6fcc4b1f4..34b0c1b01de 100644 --- a/Examples/IO/XML/CMakeLists.txt +++ b/Examples/IO/XML/CMakeLists.txt @@ -1,5 +1,10 @@ add_executable(DOMFindDemo DOMFindDemo.cxx) -target_link_libraries(DOMFindDemo ${ITK_LIBRARIES}) +target_link_libraries( + DOMFindDemo + PRIVATE + ITK::ITKCommonModule + ITK::ITKIOXMLModule +) add_executable( ParticleSwarmOptimizerReadWrite @@ -9,4 +14,10 @@ add_executable( itkParticleSwarmOptimizerSAXReader.cxx itkParticleSwarmOptimizerSAXWriter.cxx ) -target_link_libraries(ParticleSwarmOptimizerReadWrite ${ITK_LIBRARIES}) +target_link_libraries( + ParticleSwarmOptimizerReadWrite + PRIVATE + ITK::ITKCommonModule + ITK::ITKOptimizersModule + ITK::ITKIOXMLModule +) diff --git a/Examples/Iterators/CMakeLists.txt b/Examples/Iterators/CMakeLists.txt index 6c8ee0139a5..faa4a519543 100644 --- a/Examples/Iterators/CMakeLists.txt +++ b/Examples/Iterators/CMakeLists.txt @@ -1,49 +1,127 @@ project(IteratorExamples) add_executable(NeighborhoodIterators4 NeighborhoodIterators4.cxx) -target_link_libraries(NeighborhoodIterators4 ${ITK_LIBRARIES}) +target_link_libraries( + NeighborhoodIterators4 + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule + ITK::ITKImageIntensityModule +) add_executable(NeighborhoodIterators5 NeighborhoodIterators5.cxx) -target_link_libraries(NeighborhoodIterators5 ${ITK_LIBRARIES}) +target_link_libraries( + NeighborhoodIterators5 + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule + ITK::ITKImageIntensityModule +) add_executable( ImageRandomConstIteratorWithIndex ImageRandomConstIteratorWithIndex.cxx ) -target_link_libraries(ImageRandomConstIteratorWithIndex ${ITK_LIBRARIES}) +target_link_libraries( + ImageRandomConstIteratorWithIndex + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule +) add_executable(NeighborhoodIterators1 NeighborhoodIterators1.cxx) -target_link_libraries(NeighborhoodIterators1 ${ITK_LIBRARIES}) +target_link_libraries( + NeighborhoodIterators1 + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule + ITK::ITKImageIntensityModule +) add_executable(NeighborhoodIterators2 NeighborhoodIterators2.cxx) -target_link_libraries(NeighborhoodIterators2 ${ITK_LIBRARIES}) +target_link_libraries( + NeighborhoodIterators2 + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule + ITK::ITKImageIntensityModule +) add_executable(NeighborhoodIterators3 NeighborhoodIterators3.cxx) -target_link_libraries(NeighborhoodIterators3 ${ITK_LIBRARIES}) +target_link_libraries( + NeighborhoodIterators3 + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule + ITK::ITKImageIntensityModule +) add_executable(NeighborhoodIterators6 NeighborhoodIterators6.cxx) -target_link_libraries(NeighborhoodIterators6 ${ITK_LIBRARIES}) +target_link_libraries( + NeighborhoodIterators6 + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule + ITK::ITKFastMarchingModule + ITK::ITKImageIntensityModule + ITK::ITKTestKernelModule +) add_executable(ImageRegionIteratorWithIndex ImageRegionIteratorWithIndex.cxx) -target_link_libraries(ImageRegionIteratorWithIndex ${ITK_LIBRARIES}) +target_link_libraries( + ImageRegionIteratorWithIndex + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule +) add_executable(ImageRegionIterator ImageRegionIterator.cxx) -target_link_libraries(ImageRegionIterator ${ITK_LIBRARIES}) +target_link_libraries( + ImageRegionIterator + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule +) add_executable(ImageLinearIteratorWithIndex2 ImageLinearIteratorWithIndex2.cxx) -target_link_libraries(ImageLinearIteratorWithIndex2 ${ITK_LIBRARIES}) +target_link_libraries( + ImageLinearIteratorWithIndex2 + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule +) add_executable(ImageLinearIteratorWithIndex ImageLinearIteratorWithIndex.cxx) -target_link_libraries(ImageLinearIteratorWithIndex ${ITK_LIBRARIES}) +target_link_libraries( + ImageLinearIteratorWithIndex + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule +) add_executable(ImageSliceIteratorWithIndex ImageSliceIteratorWithIndex.cxx) -target_link_libraries(ImageSliceIteratorWithIndex ${ITK_LIBRARIES}) +target_link_libraries( + ImageSliceIteratorWithIndex + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule +) add_executable(ShapedNeighborhoodIterators1 ShapedNeighborhoodIterators1.cxx) -target_link_libraries(ShapedNeighborhoodIterators1 ${ITK_LIBRARIES}) +target_link_libraries( + ShapedNeighborhoodIterators1 + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule +) add_executable(ShapedNeighborhoodIterators2 ShapedNeighborhoodIterators2.cxx) -target_link_libraries(ShapedNeighborhoodIterators2 ${ITK_LIBRARIES}) +target_link_libraries( + ShapedNeighborhoodIterators2 + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule +) if(BUILD_TESTING) add_subdirectory(test) diff --git a/Examples/Numerics/CMakeLists.txt b/Examples/Numerics/CMakeLists.txt index abc0ee787ad..87595892ada 100644 --- a/Examples/Numerics/CMakeLists.txt +++ b/Examples/Numerics/CMakeLists.txt @@ -1,4 +1,4 @@ project(NumericsExamples) add_executable(FourierDescriptors1 FourierDescriptors1.cxx) -target_link_libraries(FourierDescriptors1 ${ITK_LIBRARIES}) +target_link_libraries(FourierDescriptors1 PRIVATE ITK::ITKCommonModule) diff --git a/Examples/RegistrationITKv4/CMakeLists.txt b/Examples/RegistrationITKv4/CMakeLists.txt index f84003b6b6b..8a37dece36b 100644 --- a/Examples/RegistrationITKv4/CMakeLists.txt +++ b/Examples/RegistrationITKv4/CMakeLists.txt @@ -1,67 +1,319 @@ project(ITKv4ImageRegistration) add_executable(ImageRegistration3 ImageRegistration3.cxx) -target_link_libraries(ImageRegistration3 ${ITK_LIBRARIES}) +target_link_libraries( + ImageRegistration3 + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule + ITK::ITKImageFilterBaseModule + ITK::ITKImageGridModule + ITK::ITKMetricsv4Module + ITK::ITKOptimizersv4Module + ITK::ITKRegistrationMethodsv4Module + ITK::ITKTransformModule +) add_executable(ImageRegistration5 ImageRegistration5.cxx) -target_link_libraries(ImageRegistration5 ${ITK_LIBRARIES}) +target_link_libraries( + ImageRegistration5 + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule + ITK::ITKImageGridModule + ITK::ITKImageIntensityModule + ITK::ITKMetricsv4Module + ITK::ITKOptimizersv4Module + ITK::ITKRegistrationMethodsv4Module + ITK::ITKTransformModule +) add_executable(ImageRegistration6 ImageRegistration6.cxx) -target_link_libraries(ImageRegistration6 ${ITK_LIBRARIES}) +target_link_libraries( + ImageRegistration6 + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule + ITK::ITKImageFilterBaseModule + ITK::ITKImageGridModule + ITK::ITKImageIntensityModule + ITK::ITKMetricsv4Module + ITK::ITKOptimizersv4Module + ITK::ITKRegistrationCommonModule + ITK::ITKRegistrationMethodsv4Module + ITK::ITKTransformModule +) add_executable(ImageRegistration8 ImageRegistration8.cxx) -target_link_libraries(ImageRegistration8 ${ITK_LIBRARIES}) +target_link_libraries( + ImageRegistration8 + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule + ITK::ITKImageFilterBaseModule + ITK::ITKImageGridModule + ITK::ITKImageIntensityModule + ITK::ITKMetricsv4Module + ITK::ITKOptimizersv4Module + ITK::ITKRegistrationCommonModule + ITK::ITKRegistrationMethodsv4Module + ITK::ITKTransformModule +) add_executable(ImageRegistration9 ImageRegistration9.cxx) -target_link_libraries(ImageRegistration9 ${ITK_LIBRARIES}) +target_link_libraries( + ImageRegistration9 + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule + ITK::ITKImageFilterBaseModule + ITK::ITKImageGridModule + ITK::ITKImageIntensityModule + ITK::ITKMetricsv4Module + ITK::ITKOptimizersv4Module + ITK::ITKRegistrationCommonModule + ITK::ITKRegistrationMethodsv4Module + ITK::ITKTransformModule +) add_executable(ImageRegistration10 ImageRegistration10.cxx) -target_link_libraries(ImageRegistration10 ${ITK_LIBRARIES}) +target_link_libraries( + ImageRegistration10 + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule + ITK::ITKImageCompareModule + ITK::ITKImageFilterBaseModule + ITK::ITKImageFunctionModule + ITK::ITKImageGridModule + ITK::ITKOptimizersModule + ITK::ITKRegistrationCommonModule + ITK::ITKTransformModule +) add_executable(DeformableRegistration4 DeformableRegistration4.cxx) -target_link_libraries(DeformableRegistration4 ${ITK_LIBRARIES}) +target_link_libraries( + DeformableRegistration4 + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule + ITK::ITKDisplacementFieldModule + ITK::ITKImageCompareModule + ITK::ITKImageFilterBaseModule + ITK::ITKImageGridModule + ITK::ITKMetricsv4Module + ITK::ITKOptimizersv4Module + ITK::ITKRegistrationMethodsv4Module + ITK::ITKTransformModule +) add_executable(ImageRegistration4 ImageRegistration4.cxx) -target_link_libraries(ImageRegistration4 ${ITK_LIBRARIES}) +target_link_libraries( + ImageRegistration4 + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule + ITK::ITKImageCompareModule + ITK::ITKImageFilterBaseModule + ITK::ITKImageGridModule + ITK::ITKMetricsv4Module + ITK::ITKOptimizersv4Module + ITK::ITKRegistrationMethodsv4Module + ITK::ITKTransformModule +) add_executable(ImageRegistration7 ImageRegistration7.cxx) -target_link_libraries(ImageRegistration7 ${ITK_LIBRARIES}) +target_link_libraries( + ImageRegistration7 + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule + ITK::ITKImageFilterBaseModule + ITK::ITKImageGridModule + ITK::ITKImageIntensityModule + ITK::ITKMetricsv4Module + ITK::ITKOptimizersv4Module + ITK::ITKRegistrationCommonModule + ITK::ITKRegistrationMethodsv4Module + ITK::ITKTransformModule +) add_executable(ImageRegistration11 ImageRegistration11.cxx) -target_link_libraries(ImageRegistration11 ${ITK_LIBRARIES}) +target_link_libraries( + ImageRegistration11 + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule + ITK::ITKImageFilterBaseModule + ITK::ITKImageGridModule + ITK::ITKMetricsv4Module + ITK::ITKOptimizersv4Module + ITK::ITKRegistrationMethodsv4Module + ITK::ITKStatisticsModule + ITK::ITKTransformModule +) add_executable(ImageRegistration12 ImageRegistration12.cxx) -target_link_libraries(ImageRegistration12 ${ITK_LIBRARIES}) +target_link_libraries( + ImageRegistration12 + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule + ITK::ITKImageCompareModule + ITK::ITKImageFilterBaseModule + ITK::ITKImageGridModule + ITK::ITKMetricsv4Module + ITK::ITKOptimizersv4Module + ITK::ITKRegistrationCommonModule + ITK::ITKRegistrationMethodsv4Module + ITK::ITKSpatialObjectsModule + ITK::ITKTransformModule +) add_executable(ImageRegistration13 ImageRegistration13.cxx) -target_link_libraries(ImageRegistration13 ${ITK_LIBRARIES}) +target_link_libraries( + ImageRegistration13 + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule + ITK::ITKImageFilterBaseModule + ITK::ITKImageGridModule + ITK::ITKMetricsv4Module + ITK::ITKOptimizersv4Module + ITK::ITKRegistrationCommonModule + ITK::ITKRegistrationMethodsv4Module + ITK::ITKTransformModule +) add_executable(ImageRegistration14 ImageRegistration14.cxx) -target_link_libraries(ImageRegistration14 ${ITK_LIBRARIES}) +target_link_libraries( + ImageRegistration14 + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule + ITK::ITKImageFilterBaseModule + ITK::ITKImageGridModule + ITK::ITKOptimizersModule + ITK::ITKRegistrationCommonModule + ITK::ITKStatisticsModule + ITK::ITKTransformModule +) add_executable(ImageRegistration15 ImageRegistration15.cxx) -target_link_libraries(ImageRegistration15 ${ITK_LIBRARIES}) +target_link_libraries( + ImageRegistration15 + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule + ITK::ITKImageFilterBaseModule + ITK::ITKImageGridModule + ITK::ITKOptimizersModule + ITK::ITKRegistrationCommonModule + ITK::ITKStatisticsModule + ITK::ITKTransformModule +) add_executable(ImageRegistration16 ImageRegistration16.cxx) -target_link_libraries(ImageRegistration16 ${ITK_LIBRARIES}) +target_link_libraries( + ImageRegistration16 + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule + ITK::ITKImageFilterBaseModule + ITK::ITKImageGridModule + ITK::ITKOptimizersModule + ITK::ITKRegistrationCommonModule + ITK::ITKTransformModule +) add_executable(ImageRegistration18 ImageRegistration18.cxx) -target_link_libraries(ImageRegistration18 ${ITK_LIBRARIES}) +target_link_libraries( + ImageRegistration18 + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule + ITK::ITKOptimizersModule + ITK::ITKRegistrationCommonModule + ITK::ITKTransformModule +) add_executable(ImageRegistration19 ImageRegistration19.cxx) -target_link_libraries(ImageRegistration19 ${ITK_LIBRARIES}) +target_link_libraries( + ImageRegistration19 + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule + ITK::ITKImageCompareModule + ITK::ITKImageFilterBaseModule + ITK::ITKImageFunctionModule + ITK::ITKImageGridModule + ITK::ITKOptimizersModule + ITK::ITKRegistrationCommonModule + ITK::ITKTransformModule +) add_executable(ImageRegistration20 ImageRegistration20.cxx) -target_link_libraries(ImageRegistration20 ${ITK_LIBRARIES}) +target_link_libraries( + ImageRegistration20 + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule + ITK::ITKImageFilterBaseModule + ITK::ITKImageGridModule + ITK::ITKImageIntensityModule + ITK::ITKOptimizersModule + ITK::ITKRegistrationCommonModule + ITK::ITKTransformModule +) add_executable(DeformableRegistration6 DeformableRegistration6.cxx) -target_link_libraries(DeformableRegistration6 ${ITK_LIBRARIES}) +target_link_libraries( + DeformableRegistration6 + PRIVATE + ITK::ITKImageIO + ITK::ITKDisplacementFieldModule + ITK::ITKImageCompareModule + ITK::ITKImageFilterBaseModule + ITK::ITKImageGridModule + ITK::ITKMetricsv4Module + ITK::ITKOptimizersv4Module + ITK::ITKRegistrationCommonModule + ITK::ITKRegistrationMethodsv4Module + ITK::ITKTransformModule +) add_executable(DeformableRegistration7 DeformableRegistration7.cxx) -target_link_libraries(DeformableRegistration7 ${ITK_LIBRARIES}) +target_link_libraries( + DeformableRegistration7 + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule + ITK::ITKDisplacementFieldModule + ITK::ITKImageCompareModule + ITK::ITKImageFilterBaseModule + ITK::ITKImageGridModule + ITK::ITKMetricsv4Module + ITK::ITKOptimizersv4Module + ITK::ITKRegistrationMethodsv4Module + ITK::ITKTransformModule +) add_executable(DeformableRegistration8 DeformableRegistration8.cxx) -target_link_libraries(DeformableRegistration8 ${ITK_LIBRARIES}) +target_link_libraries( + DeformableRegistration8 + PRIVATE + ITK::ITKImageIO + ITK::ITKTransformIO + ITK::ITKCommonModule + ITK::ITKDisplacementFieldModule + ITK::ITKImageCompareModule + ITK::ITKImageFilterBaseModule + ITK::ITKImageGridModule + ITK::ITKMetricsv4Module + ITK::ITKOptimizersv4Module + ITK::ITKRegistrationMethodsv4Module + ITK::ITKTransformModule +) if(ITK_USE_FFTWD AND NOT ITK_USE_CUFFTW) add_executable(DeformableRegistration9 DeformableRegistration9.cxx) @@ -72,19 +324,78 @@ if(ITK_USE_FFTWD AND NOT ITK_USE_CUFFTW) endif() add_executable(MultiResImageRegistration1 MultiResImageRegistration1.cxx) -target_link_libraries(MultiResImageRegistration1 ${ITK_LIBRARIES}) +target_link_libraries( + MultiResImageRegistration1 + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule + ITK::ITKImageCompareModule + ITK::ITKImageFilterBaseModule + ITK::ITKImageGridModule + ITK::ITKMetricsv4Module + ITK::ITKOptimizersv4Module + ITK::ITKRegistrationMethodsv4Module + ITK::ITKTransformModule +) add_executable(MultiResImageRegistration2 MultiResImageRegistration2.cxx) -target_link_libraries(MultiResImageRegistration2 ${ITK_LIBRARIES}) +target_link_libraries( + MultiResImageRegistration2 + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule + ITK::ITKImageCompareModule + ITK::ITKImageFilterBaseModule + ITK::ITKImageGridModule + ITK::ITKOptimizersModule + ITK::ITKRegistrationCommonModule + ITK::ITKTransformModule +) add_executable(MultiResImageRegistration3 MultiResImageRegistration3.cxx) -target_link_libraries(MultiResImageRegistration3 ${ITK_LIBRARIES}) +target_link_libraries( + MultiResImageRegistration3 + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule + ITK::ITKImageCompareModule + ITK::ITKImageFilterBaseModule + ITK::ITKImageGridModule + ITK::ITKOptimizersModule + ITK::ITKRegistrationCommonModule + ITK::ITKTransformModule +) add_executable(MultiStageImageRegistration1 MultiStageImageRegistration1.cxx) -target_link_libraries(MultiStageImageRegistration1 ${ITK_LIBRARIES}) +target_link_libraries( + MultiStageImageRegistration1 + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule + ITK::ITKImageCompareModule + ITK::ITKImageFilterBaseModule + ITK::ITKImageGridModule + ITK::ITKMetricsv4Module + ITK::ITKOptimizersv4Module + ITK::ITKRegistrationMethodsv4Module + ITK::ITKTransformModule +) add_executable(MultiStageImageRegistration2 MultiStageImageRegistration2.cxx) -target_link_libraries(MultiStageImageRegistration2 ${ITK_LIBRARIES}) +target_link_libraries( + MultiStageImageRegistration2 + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule + ITK::ITKImageCompareModule + ITK::ITKImageFilterBaseModule + ITK::ITKImageGridModule + ITK::ITKImageStatisticsModule + ITK::ITKMetricsv4Module + ITK::ITKOptimizersv4Module + ITK::ITKRegistrationMethodsv4Module + ITK::ITKTransformModule +) if(ITKFEMRegistration_ENABLED) add_executable(DeformableRegistration1 DeformableRegistration1.cxx) @@ -95,85 +406,326 @@ if(ITKFEMRegistration_ENABLED) endif() add_executable(DeformableRegistration2 DeformableRegistration2.cxx) -target_link_libraries(DeformableRegistration2 ${ITK_LIBRARIES}) +target_link_libraries( + DeformableRegistration2 + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule + ITK::ITKDisplacementFieldModule + ITK::ITKImageFilterBaseModule + ITK::ITKImageGridModule + ITK::ITKImageIntensityModule + ITK::ITKPDEDeformableRegistrationModule +) add_executable(DeformableRegistration3 DeformableRegistration3.cxx) -target_link_libraries(DeformableRegistration3 ${ITK_LIBRARIES}) +target_link_libraries( + DeformableRegistration3 + PRIVATE + ITK::ITKImageIO + ITK::ITKDisplacementFieldModule + ITK::ITKImageFilterBaseModule + ITK::ITKImageGridModule + ITK::ITKImageIntensityModule + ITK::ITKPDEDeformableRegistrationModule +) add_executable(DeformableRegistration5 DeformableRegistration5.cxx) -target_link_libraries(DeformableRegistration5 ${ITK_LIBRARIES}) +target_link_libraries( + DeformableRegistration5 + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule + ITK::ITKDisplacementFieldModule + ITK::ITKImageFilterBaseModule + ITK::ITKImageGridModule + ITK::ITKImageIntensityModule + ITK::ITKPDEDeformableRegistrationModule +) add_executable(DeformableRegistration12 DeformableRegistration12.cxx) -target_link_libraries(DeformableRegistration12 ${ITK_LIBRARIES}) +target_link_libraries( + DeformableRegistration12 + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule + ITK::ITKImageCompareModule + ITK::ITKImageFilterBaseModule + ITK::ITKImageGridModule + ITK::ITKMetricsv4Module + ITK::ITKOptimizersv4Module + ITK::ITKRegistrationMethodsv4Module + ITK::ITKTransformModule +) add_executable(DeformableRegistration13 DeformableRegistration13.cxx) -target_link_libraries(DeformableRegistration13 ${ITK_LIBRARIES}) +target_link_libraries( + DeformableRegistration13 + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule + ITK::ITKImageCompareModule + ITK::ITKImageFilterBaseModule + ITK::ITKImageGridModule + ITK::ITKOptimizersModule + ITK::ITKRegistrationCommonModule + ITK::ITKTransformModule +) add_executable(DeformableRegistration14 DeformableRegistration14.cxx) -target_link_libraries(DeformableRegistration14 ${ITK_LIBRARIES}) +target_link_libraries( + DeformableRegistration14 + PRIVATE + ITK::ITKImageIO + ITK::ITKTransformIO + ITK::ITKCommonModule + ITK::ITKImageCompareModule + ITK::ITKImageFilterBaseModule + ITK::ITKImageGridModule + ITK::ITKOptimizersModule + ITK::ITKRegistrationCommonModule + ITK::ITKTransformModule +) add_executable(ChangeInformationImageFilter ChangeInformationImageFilter.cxx) -target_link_libraries(ChangeInformationImageFilter ${ITK_LIBRARIES}) +target_link_libraries( + ChangeInformationImageFilter + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule + ITK::ITKImageGridModule +) add_executable(DeformableRegistration15 DeformableRegistration15.cxx) -target_link_libraries(DeformableRegistration15 ${ITK_LIBRARIES}) +target_link_libraries( + DeformableRegistration15 + PRIVATE + ITK::ITKImageIO + ITK::ITKTransformIO + ITK::ITKCommonModule + ITK::ITKImageCompareModule + ITK::ITKImageFilterBaseModule + ITK::ITKImageFunctionModule + ITK::ITKImageGridModule + ITK::ITKImageIntensityModule + ITK::ITKOptimizersModule + ITK::ITKRegistrationCommonModule + ITK::ITKTransformModule +) add_executable(DeformableRegistration16 DeformableRegistration16.cxx) -target_link_libraries(DeformableRegistration16 ${ITK_LIBRARIES}) +target_link_libraries( + DeformableRegistration16 + PRIVATE + ITK::ITKImageIO + ITK::ITKDisplacementFieldModule + ITK::ITKImageFilterBaseModule + ITK::ITKImageGridModule + ITK::ITKImageIntensityModule + ITK::ITKPDEDeformableRegistrationModule + ITK::ITKRegistrationCommonModule +) add_executable(DeformableRegistration17 DeformableRegistration17.cxx) -target_link_libraries(DeformableRegistration17 ${ITK_LIBRARIES}) +target_link_libraries( + DeformableRegistration17 + PRIVATE + ITK::ITKImageIO + ITK::ITKDisplacementFieldModule + ITK::ITKImageFilterBaseModule + ITK::ITKImageGridModule + ITK::ITKImageIntensityModule + ITK::ITKPDEDeformableRegistrationModule + ITK::ITKRegistrationCommonModule +) add_executable( DisplacementFieldInitialization DisplacementFieldInitialization.cxx ) -target_link_libraries(DisplacementFieldInitialization ${ITK_LIBRARIES}) +target_link_libraries( + DisplacementFieldInitialization + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule + ITK::ITKDisplacementFieldModule +) add_executable(LandmarkWarping2 LandmarkWarping2.cxx) -target_link_libraries(LandmarkWarping2 ${ITK_LIBRARIES}) +target_link_libraries( + LandmarkWarping2 + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule + ITK::ITKDisplacementFieldModule + ITK::ITKImageGridModule +) add_executable(BSplineWarping1 BSplineWarping1.cxx) -target_link_libraries(BSplineWarping1 ${ITK_LIBRARIES}) +target_link_libraries( + BSplineWarping1 + PRIVATE + ITK::ITKImageIO + ITK::ITKTransformIO + ITK::ITKCommonModule + ITK::ITKImageGridModule + ITK::ITKTransformModule +) add_executable(BSplineWarping2 BSplineWarping2.cxx) -target_link_libraries(BSplineWarping2 ${ITK_LIBRARIES}) +target_link_libraries( + BSplineWarping2 + PRIVATE + ITK::ITKImageIO + ITK::ITKTransformIO + ITK::ITKCommonModule + ITK::ITKImageGridModule + ITK::ITKTransformModule +) add_executable(ThinPlateSplineWarp ThinPlateSplineWarp.cxx) -target_link_libraries(ThinPlateSplineWarp ${ITK_LIBRARIES}) +target_link_libraries( + ThinPlateSplineWarp + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule + ITK::ITKImageGridModule + ITK::ITKTransformModule +) add_executable(ModelToImageRegistration1 ModelToImageRegistration1.cxx) -target_link_libraries(ModelToImageRegistration1 ${ITK_LIBRARIES}) +target_link_libraries( + ModelToImageRegistration1 + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule + ITK::ITKImageFilterBaseModule + ITK::ITKImageFunctionModule + ITK::ITKImageIntensityModule + ITK::ITKOptimizersModule + ITK::ITKRegistrationCommonModule + ITK::ITKSmoothingModule + ITK::ITKSpatialObjectsModule + ITK::ITKStatisticsModule + ITK::ITKTransformModule +) add_executable(ModelToImageRegistration2 ModelToImageRegistration2.cxx) -target_link_libraries(ModelToImageRegistration2 ${ITK_LIBRARIES}) +target_link_libraries( + ModelToImageRegistration2 + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule + ITK::ITKImageFunctionModule + ITK::ITKImageGridModule + ITK::ITKLevelSetsModule + ITK::ITKOptimizersModule + ITK::ITKRegistrationCommonModule + ITK::ITKSpatialObjectsModule + ITK::ITKTransformModule +) add_executable(ImageRegistration1 ImageRegistration1.cxx) -target_link_libraries(ImageRegistration1 ${ITK_LIBRARIES}) +target_link_libraries( + ImageRegistration1 + PRIVATE + ITK::ITKImageIO + ITK::ITKImageFilterBaseModule + ITK::ITKImageGridModule + ITK::ITKImageIntensityModule + ITK::ITKMetricsv4Module + ITK::ITKOptimizersv4Module + ITK::ITKRegistrationMethodsv4Module + ITK::ITKTransformModule +) add_executable(ImageRegistration2 ImageRegistration2.cxx) -target_link_libraries(ImageRegistration2 ${ITK_LIBRARIES}) +target_link_libraries( + ImageRegistration2 + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule + ITK::ITKImageCompareModule + ITK::ITKImageFilterBaseModule + ITK::ITKImageGridModule + ITK::ITKImageIntensityModule + ITK::ITKOptimizersModule + ITK::ITKRegistrationCommonModule + ITK::ITKSmoothingModule + ITK::ITKTransformModule +) add_executable(ImageRegistration17 ImageRegistration17.cxx) -target_link_libraries(ImageRegistration17 ${ITK_LIBRARIES}) +target_link_libraries( + ImageRegistration17 + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule + ITK::ITKImageFilterBaseModule + ITK::ITKImageGridModule + ITK::ITKOptimizersModule + ITK::ITKRegistrationCommonModule + ITK::ITKTransformModule +) add_executable( ImageRegistrationHistogramPlotter ImageRegistrationHistogramPlotter.cxx ) -target_link_libraries(ImageRegistrationHistogramPlotter ${ITK_LIBRARIES}) +target_link_libraries( + ImageRegistrationHistogramPlotter + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule + ITK::ITKImageFilterBaseModule + ITK::ITKImageGridModule + ITK::ITKImageIntensityModule + ITK::ITKOptimizersModule + ITK::ITKRegistrationCommonModule + ITK::ITKSmoothingModule + ITK::ITKStatisticsModule + ITK::ITKTransformModule +) add_executable(MeanSquaresImageMetric1 MeanSquaresImageMetric1.cxx) -target_link_libraries(MeanSquaresImageMetric1 ${ITK_LIBRARIES}) +target_link_libraries( + MeanSquaresImageMetric1 + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule + ITK::ITKImageFunctionModule + ITK::ITKMetricsv4Module + ITK::ITKTransformModule +) add_executable(IterativeClosestPoint1 IterativeClosestPoint1.cxx) -target_link_libraries(IterativeClosestPoint1 ${ITK_LIBRARIES}) +target_link_libraries( + IterativeClosestPoint1 + PRIVATE + ITK::ITKOptimizersModule + ITK::ITKRegistrationCommonModule + ITK::ITKTransformModule +) add_executable(IterativeClosestPoint2 IterativeClosestPoint2.cxx) -target_link_libraries(IterativeClosestPoint2 ${ITK_LIBRARIES}) +target_link_libraries( + IterativeClosestPoint2 + PRIVATE + ITK::ITKOptimizersModule + ITK::ITKRegistrationCommonModule + ITK::ITKTransformModule +) add_executable(IterativeClosestPoint3 IterativeClosestPoint3.cxx) -target_link_libraries(IterativeClosestPoint3 ${ITK_LIBRARIES}) +target_link_libraries( + IterativeClosestPoint3 + PRIVATE + ITK::ITKCommonModule + ITK::ITKDistanceMapModule + ITK::ITKOptimizersModule + ITK::ITKRegistrationCommonModule + ITK::ITKTransformModule +) if(BUILD_TESTING) add_subdirectory(test) diff --git a/Examples/Segmentation/CMakeLists.txt b/Examples/Segmentation/CMakeLists.txt index 091ad38b37b..86f6d098508 100644 --- a/Examples/Segmentation/CMakeLists.txt +++ b/Examples/Segmentation/CMakeLists.txt @@ -1,25 +1,72 @@ project(ImageSegmentation) add_executable(ConfidenceConnected ConfidenceConnected.cxx) -target_link_libraries(ConfidenceConnected ${ITK_LIBRARIES}) +target_link_libraries( + ConfidenceConnected + PRIVATE + ITK::ITKImageIO + ITK::ITKCurvatureFlowModule + ITK::ITKImageFilterBaseModule + ITK::ITKRegionGrowingModule +) add_executable(ConfidenceConnected3D ConfidenceConnected3D.cxx) -target_link_libraries(ConfidenceConnected3D ${ITK_LIBRARIES}) +target_link_libraries( + ConfidenceConnected3D + PRIVATE + ITK::ITKImageIO + ITK::ITKCurvatureFlowModule + ITK::ITKImageFilterBaseModule + ITK::ITKRegionGrowingModule +) add_executable( NeighborhoodConnectedImageFilter NeighborhoodConnectedImageFilter.cxx ) -target_link_libraries(NeighborhoodConnectedImageFilter ${ITK_LIBRARIES}) +target_link_libraries( + NeighborhoodConnectedImageFilter + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule + ITK::ITKCurvatureFlowModule + ITK::ITKImageFilterBaseModule + ITK::ITKRegionGrowingModule +) add_executable(IsolatedConnectedImageFilter IsolatedConnectedImageFilter.cxx) -target_link_libraries(IsolatedConnectedImageFilter ${ITK_LIBRARIES}) +target_link_libraries( + IsolatedConnectedImageFilter + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule + ITK::ITKCurvatureFlowModule + ITK::ITKImageFilterBaseModule + ITK::ITKRegionGrowingModule +) add_executable(ConnectedThresholdImageFilter ConnectedThresholdImageFilter.cxx) -target_link_libraries(ConnectedThresholdImageFilter ${ITK_LIBRARIES}) +target_link_libraries( + ConnectedThresholdImageFilter + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule + ITK::ITKCurvatureFlowModule + ITK::ITKImageFilterBaseModule + ITK::ITKRegionGrowingModule +) add_executable(FastMarchingImageFilter FastMarchingImageFilter.cxx) -target_link_libraries(FastMarchingImageFilter ${ITK_LIBRARIES}) +target_link_libraries( + FastMarchingImageFilter + PRIVATE + ITK::ITKImageIO + ITK::ITKAnisotropicSmoothingModule + ITK::ITKFastMarchingModule + ITK::ITKImageGradientModule + ITK::ITKImageIntensityModule + ITK::ITKThresholdingModule +) add_executable( GeodesicActiveContourShapePriorLevelSetImageFilter @@ -27,65 +74,191 @@ add_executable( ) target_link_libraries( GeodesicActiveContourShapePriorLevelSetImageFilter - ${ITK_LIBRARIES} + PRIVATE + ITK::ITKImageIO + ITK::ITKAnisotropicSmoothingModule + ITK::ITKCommonModule + ITK::ITKFastMarchingModule + ITK::ITKImageGradientModule + ITK::ITKImageGridModule + ITK::ITKImageIntensityModule + ITK::ITKLevelSetsModule + ITK::ITKSpatialFunctionModule + ITK::ITKSpatialObjectsModule + ITK::ITKThresholdingModule ) add_executable(GibbsPriorImageFilter1 GibbsPriorImageFilter1.cxx) -target_link_libraries(GibbsPriorImageFilter1 ${ITK_LIBRARIES}) +target_link_libraries( + GibbsPriorImageFilter1 + PRIVATE + ITK::ITKImageIO + ITK::ITKClassifiersModule + ITK::ITKCommonModule + ITK::ITKMarkovRandomFieldsClassifiersModule + ITK::ITKStatisticsModule +) add_executable( HoughTransform2DCirclesImageFilter HoughTransform2DCirclesImageFilter.cxx ) -target_link_libraries(HoughTransform2DCirclesImageFilter ${ITK_LIBRARIES}) +target_link_libraries( + HoughTransform2DCirclesImageFilter + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule + ITK::ITKImageFeatureModule + ITK::ITKImageFilterBaseModule + ITK::ITKImageGradientModule + ITK::ITKSmoothingModule + ITK::ITKThresholdingModule +) add_executable( HoughTransform2DLinesImageFilter HoughTransform2DLinesImageFilter.cxx ) -target_link_libraries(HoughTransform2DLinesImageFilter ${ITK_LIBRARIES}) +target_link_libraries( + HoughTransform2DLinesImageFilter + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule + ITK::ITKImageFeatureModule + ITK::ITKImageFilterBaseModule + ITK::ITKImageGradientModule + ITK::ITKSmoothingModule + ITK::ITKThresholdingModule +) add_executable(VectorConfidenceConnected VectorConfidenceConnected.cxx) -target_link_libraries(VectorConfidenceConnected ${ITK_LIBRARIES}) +target_link_libraries( + VectorConfidenceConnected + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule + ITK::ITKRegionGrowingModule +) add_executable(RelabelComponentImageFilter RelabelComponentImageFilter.cxx) -target_link_libraries(RelabelComponentImageFilter ${ITK_LIBRARIES}) +target_link_libraries( + RelabelComponentImageFilter + PRIVATE + ITK::ITKImageIO + ITK::ITKConnectedComponentsModule +) add_executable( CannySegmentationLevelSetImageFilter CannySegmentationLevelSetImageFilter.cxx ) -target_link_libraries(CannySegmentationLevelSetImageFilter ${ITK_LIBRARIES}) +target_link_libraries( + CannySegmentationLevelSetImageFilter + PRIVATE + ITK::ITKImageIO + ITK::ITKAnisotropicSmoothingModule + ITK::ITKCommonModule + ITK::ITKFastMarchingModule + ITK::ITKImageFeatureModule + ITK::ITKLevelSetsModule + ITK::ITKThresholdingModule +) add_executable( GeodesicActiveContourImageFilter GeodesicActiveContourImageFilter.cxx ) -target_link_libraries(GeodesicActiveContourImageFilter ${ITK_LIBRARIES}) +target_link_libraries( + GeodesicActiveContourImageFilter + PRIVATE + ITK::ITKImageIO + ITK::ITKAnisotropicSmoothingModule + ITK::ITKFastMarchingModule + ITK::ITKImageGradientModule + ITK::ITKImageIntensityModule + ITK::ITKLevelSetsModule + ITK::ITKThresholdingModule +) add_executable(ShapeDetectionLevelSetFilter ShapeDetectionLevelSetFilter.cxx) -target_link_libraries(ShapeDetectionLevelSetFilter ${ITK_LIBRARIES}) +target_link_libraries( + ShapeDetectionLevelSetFilter + PRIVATE + ITK::ITKImageIO + ITK::ITKAnisotropicSmoothingModule + ITK::ITKFastMarchingModule + ITK::ITKImageGradientModule + ITK::ITKImageIntensityModule + ITK::ITKLevelSetsModule + ITK::ITKThresholdingModule +) add_executable(CurvesLevelSetImageFilter CurvesLevelSetImageFilter.cxx) -target_link_libraries(CurvesLevelSetImageFilter ${ITK_LIBRARIES}) +target_link_libraries( + CurvesLevelSetImageFilter + PRIVATE + ITK::ITKImageIO + ITK::ITKAnisotropicSmoothingModule + ITK::ITKFastMarchingModule + ITK::ITKImageGradientModule + ITK::ITKImageIntensityModule + ITK::ITKLevelSetsModule + ITK::ITKThresholdingModule +) add_executable(WatershedSegmentation1 WatershedSegmentation1.cxx) -target_link_libraries(WatershedSegmentation1 ${ITK_LIBRARIES}) +target_link_libraries( + WatershedSegmentation1 + PRIVATE + ITK::ITKImageIO + ITK::ITKAnisotropicSmoothingModule + ITK::ITKImageFilterBaseModule + ITK::ITKImageFusionModule + ITK::ITKImageGradientModule + ITK::ITKWatershedsModule +) add_executable(WatershedSegmentation2 WatershedSegmentation2.cxx) -target_link_libraries(WatershedSegmentation2 ${ITK_LIBRARIES}) +target_link_libraries( + WatershedSegmentation2 + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule + ITK::ITKImageFusionModule + ITK::ITKImageGradientModule + ITK::ITKWatershedsModule +) add_executable( LaplacianSegmentationLevelSetImageFilter LaplacianSegmentationLevelSetImageFilter.cxx ) -target_link_libraries(LaplacianSegmentationLevelSetImageFilter ${ITK_LIBRARIES}) +target_link_libraries( + LaplacianSegmentationLevelSetImageFilter + PRIVATE + ITK::ITKImageIO + ITK::ITKAnisotropicSmoothingModule + ITK::ITKCommonModule + ITK::ITKFastMarchingModule + ITK::ITKImageFeatureModule + ITK::ITKLevelSetsModule + ITK::ITKThresholdingModule +) add_executable( ThresholdSegmentationLevelSetImageFilter ThresholdSegmentationLevelSetImageFilter.cxx ) -target_link_libraries(ThresholdSegmentationLevelSetImageFilter ${ITK_LIBRARIES}) +target_link_libraries( + ThresholdSegmentationLevelSetImageFilter + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule + ITK::ITKFastMarchingModule + ITK::ITKImageFeatureModule + ITK::ITKLevelSetsModule + ITK::ITKThresholdingModule +) if(BUILD_TESTING) add_subdirectory(test) diff --git a/Examples/SpatialObjects/CMakeLists.txt b/Examples/SpatialObjects/CMakeLists.txt index d319eb6aa27..5ee6e2094dd 100644 --- a/Examples/SpatialObjects/CMakeLists.txt +++ b/Examples/SpatialObjects/CMakeLists.txt @@ -1,67 +1,124 @@ project(SpatialObjectsExamples) add_executable(ArrowSpatialObject ArrowSpatialObject.cxx) -target_link_libraries(ArrowSpatialObject ${ITK_LIBRARIES}) +target_link_libraries(ArrowSpatialObject PRIVATE ITK::ITKSpatialObjectsModule) add_executable(BlobSpatialObject BlobSpatialObject.cxx) -target_link_libraries(BlobSpatialObject ${ITK_LIBRARIES}) +target_link_libraries(BlobSpatialObject PRIVATE ITK::ITKSpatialObjectsModule) add_executable(EllipseSpatialObject EllipseSpatialObject.cxx) -target_link_libraries(EllipseSpatialObject ${ITK_LIBRARIES}) +target_link_libraries(EllipseSpatialObject PRIVATE ITK::ITKSpatialObjectsModule) add_executable(GaussianSpatialObject GaussianSpatialObject.cxx) -target_link_libraries(GaussianSpatialObject ${ITK_LIBRARIES}) +target_link_libraries( + GaussianSpatialObject + PRIVATE + ITK::ITKSpatialObjectsModule +) add_executable(GroupSpatialObject GroupSpatialObject.cxx) -target_link_libraries(GroupSpatialObject ${ITK_LIBRARIES}) +target_link_libraries(GroupSpatialObject PRIVATE ITK::ITKSpatialObjectsModule) add_executable(ImageSpatialObject ImageSpatialObject.cxx) -target_link_libraries(ImageSpatialObject ${ITK_LIBRARIES}) +target_link_libraries( + ImageSpatialObject + PRIVATE + ITK::ITKCommonModule + ITK::ITKSpatialObjectsModule +) add_executable(ImageMaskSpatialObject ImageMaskSpatialObject.cxx) -target_link_libraries(ImageMaskSpatialObject ${ITK_LIBRARIES}) +target_link_libraries( + ImageMaskSpatialObject + PRIVATE + ITK::ITKCommonModule + ITK::ITKSpatialObjectsModule + ITK::ITKTransformModule +) add_executable(LandmarkSpatialObject LandmarkSpatialObject.cxx) -target_link_libraries(LandmarkSpatialObject ${ITK_LIBRARIES}) +target_link_libraries( + LandmarkSpatialObject + PRIVATE + ITK::ITKSpatialObjectsModule +) add_executable(LineSpatialObject LineSpatialObject.cxx) -target_link_libraries(LineSpatialObject ${ITK_LIBRARIES}) +target_link_libraries(LineSpatialObject PRIVATE ITK::ITKSpatialObjectsModule) add_executable(MeshSpatialObject MeshSpatialObject.cxx) -target_link_libraries(MeshSpatialObject ${ITK_LIBRARIES}) +target_link_libraries( + MeshSpatialObject + PRIVATE + ITK::ITKCommonModule + ITK::ITKIOSpatialObjectsModule + ITK::ITKSpatialObjectsModule + ITK::ITKMeshModule +) add_executable(ReadWriteSpatialObject ReadWriteSpatialObject.cxx) -target_link_libraries(ReadWriteSpatialObject ${ITK_LIBRARIES}) +target_link_libraries( + ReadWriteSpatialObject + PRIVATE + ITK::ITKCommonModule + ITK::ITKIOSpatialObjectsModule + ITK::ITKSpatialObjectsModule + ITK::ITKMeshModule +) add_executable(SceneSpatialObject SceneSpatialObject.cxx) -target_link_libraries(SceneSpatialObject ${ITK_LIBRARIES}) +target_link_libraries(SceneSpatialObject PRIVATE ITK::ITKSpatialObjectsModule) add_executable(SpatialObjectHierarchy SpatialObjectHierarchy.cxx) -target_link_libraries(SpatialObjectHierarchy ${ITK_LIBRARIES}) +target_link_libraries( + SpatialObjectHierarchy + PRIVATE + ITK::ITKSpatialObjectsModule +) add_executable(SpatialObjectTransforms SpatialObjectTransforms.cxx) -target_link_libraries(SpatialObjectTransforms ${ITK_LIBRARIES}) +target_link_libraries( + SpatialObjectTransforms + PRIVATE + ITK::ITKSpatialObjectsModule +) add_executable( SpatialObjectToImageStatisticsCalculator SpatialObjectToImageStatisticsCalculator.cxx ) -target_link_libraries(SpatialObjectToImageStatisticsCalculator ${ITK_LIBRARIES}) +target_link_libraries( + SpatialObjectToImageStatisticsCalculator + PRIVATE + ITK::ITKCommonModule + ITK::ITKSpatialObjectsModule + ITK::ITKTestKernelModule +) add_executable(SurfaceSpatialObject SurfaceSpatialObject.cxx) -target_link_libraries(SurfaceSpatialObject ${ITK_LIBRARIES}) +target_link_libraries(SurfaceSpatialObject PRIVATE ITK::ITKSpatialObjectsModule) add_executable(TubeSpatialObject TubeSpatialObject.cxx) -target_link_libraries(TubeSpatialObject ${ITK_LIBRARIES}) +target_link_libraries(TubeSpatialObject PRIVATE ITK::ITKSpatialObjectsModule) add_executable(VesselTubeSpatialObject VesselTubeSpatialObject.cxx) -target_link_libraries(VesselTubeSpatialObject ${ITK_LIBRARIES}) +target_link_libraries( + VesselTubeSpatialObject + PRIVATE + ITK::ITKSpatialObjectsModule +) add_executable(DTITubeSpatialObject DTITubeSpatialObject.cxx) -target_link_libraries(DTITubeSpatialObject ${ITK_LIBRARIES}) +target_link_libraries(DTITubeSpatialObject PRIVATE ITK::ITKSpatialObjectsModule) add_executable( BoundingBoxFromImageMaskSpatialObject BoundingBoxFromImageMaskSpatialObject.cxx ) -target_link_libraries(BoundingBoxFromImageMaskSpatialObject ${ITK_LIBRARIES}) +target_link_libraries( + BoundingBoxFromImageMaskSpatialObject + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule + ITK::ITKSpatialObjectsModule +) diff --git a/Examples/Statistics/CMakeLists.txt b/Examples/Statistics/CMakeLists.txt index 03d7f703118..9cb7dc86b58 100644 --- a/Examples/Statistics/CMakeLists.txt +++ b/Examples/Statistics/CMakeLists.txt @@ -1,16 +1,38 @@ project(StatisticsExamples) add_executable(BayesianPluginClassifier BayesianPluginClassifier.cxx) -target_link_libraries(BayesianPluginClassifier ${ITK_LIBRARIES}) +target_link_libraries( + BayesianPluginClassifier + PRIVATE + ITK::ITKCommonModule + ITK::ITKStatisticsModule +) add_executable(BayesianClassifierInitializer BayesianClassifierInitializer.cxx) -target_link_libraries(BayesianClassifierInitializer ${ITK_LIBRARIES}) +target_link_libraries( + BayesianClassifierInitializer + PRIVATE + ITK::ITKImageIO + ITK::ITKClassifiersModule + ITK::ITKCommonModule +) add_executable(BayesianClassifier BayesianClassifier.cxx) -target_link_libraries(BayesianClassifier ${ITK_LIBRARIES}) +target_link_libraries( + BayesianClassifier + PRIVATE + ITK::ITKImageIO + ITK::ITKAnisotropicSmoothingModule + ITK::ITKClassifiersModule +) add_executable(EuclideanDistanceMetric EuclideanDistanceMetric.cxx) -target_link_libraries(EuclideanDistanceMetric ${ITK_LIBRARIES}) +target_link_libraries( + EuclideanDistanceMetric + PRIVATE + ITK::ITKCommonModule + ITK::ITKStatisticsModule +) add_executable( ExpectationMaximizationMixtureModelEstimator @@ -18,38 +40,70 @@ add_executable( ) target_link_libraries( ExpectationMaximizationMixtureModelEstimator - ${ITK_LIBRARIES} + PRIVATE + ITK::ITKCommonModule + ITK::ITKStatisticsModule ) add_executable(GaussianMembershipFunction GaussianMembershipFunction.cxx) -target_link_libraries(GaussianMembershipFunction ${ITK_LIBRARIES}) +target_link_libraries( + GaussianMembershipFunction + PRIVATE + ITK::ITKCommonModule + ITK::ITKStatisticsModule +) add_executable(Histogram Histogram.cxx) -target_link_libraries(Histogram ${ITK_LIBRARIES}) +target_link_libraries(Histogram PRIVATE ITK::ITKStatisticsModule) add_executable(KdTree KdTree.cxx) -target_link_libraries(KdTree ${ITK_LIBRARIES}) +target_link_libraries( + KdTree + PRIVATE + ITK::ITKCommonModule + ITK::ITKStatisticsModule +) add_executable(KdTreeBasedKMeansClustering KdTreeBasedKMeansClustering.cxx) -target_link_libraries(KdTreeBasedKMeansClustering ${ITK_LIBRARIES}) +target_link_libraries( + KdTreeBasedKMeansClustering + PRIVATE + ITK::ITKCommonModule + ITK::ITKStatisticsModule +) add_executable(ListSample ListSample.cxx) -target_link_libraries(ListSample ${ITK_LIBRARIES}) +target_link_libraries( + ListSample + PRIVATE + ITK::ITKCommonModule + ITK::ITKStatisticsModule +) add_executable(SampleToHistogramFilter SampleToHistogramFilter.cxx) -target_link_libraries(SampleToHistogramFilter ${ITK_LIBRARIES}) +target_link_libraries( + SampleToHistogramFilter + PRIVATE + ITK::ITKCommonModule + ITK::ITKStatisticsModule +) add_executable(MaximumDecisionRule MaximumDecisionRule.cxx) -target_link_libraries(MaximumDecisionRule ${ITK_LIBRARIES}) +target_link_libraries(MaximumDecisionRule PRIVATE ITK::ITKStatisticsModule) add_executable(MaximumRatioDecisionRule MaximumRatioDecisionRule.cxx) -target_link_libraries(MaximumRatioDecisionRule ${ITK_LIBRARIES}) +target_link_libraries(MaximumRatioDecisionRule PRIVATE ITK::ITKStatisticsModule) add_executable(MembershipSample MembershipSample.cxx) -target_link_libraries(MembershipSample ${ITK_LIBRARIES}) +target_link_libraries( + MembershipSample + PRIVATE + ITK::ITKCommonModule + ITK::ITKStatisticsModule +) add_executable(MinimumDecisionRule MinimumDecisionRule.cxx) -target_link_libraries(MinimumDecisionRule ${ITK_LIBRARIES}) +target_link_libraries(MinimumDecisionRule PRIVATE ITK::ITKStatisticsModule) # # At the moment, itkNeighborhoodSampler is incomplete, so this example # can't be updated @@ -58,52 +112,136 @@ target_link_libraries(MinimumDecisionRule ${ITK_LIBRARIES}) #target_link_libraries(NeighborhoodSampler ${ITK_LIBRARIES}) add_executable(NormalVariateGenerator NormalVariateGenerator.cxx) -target_link_libraries(NormalVariateGenerator ${ITK_LIBRARIES}) +target_link_libraries(NormalVariateGenerator PRIVATE ITK::ITKStatisticsModule) add_executable(PointSetToListSampleAdaptor PointSetToListSampleAdaptor.cxx) -target_link_libraries(PointSetToListSampleAdaptor ${ITK_LIBRARIES}) +target_link_libraries( + PointSetToListSampleAdaptor + PRIVATE + ITK::ITKCommonModule + ITK::ITKStatisticsModule +) add_executable(SampleStatistics SampleStatistics.cxx) -target_link_libraries(SampleStatistics ${ITK_LIBRARIES}) +target_link_libraries( + SampleStatistics + PRIVATE + ITK::ITKCommonModule + ITK::ITKStatisticsModule +) add_executable(SampleSorting SampleSorting.cxx) -target_link_libraries(SampleSorting ${ITK_LIBRARIES}) +target_link_libraries( + SampleSorting + PRIVATE + ITK::ITKCommonModule + ITK::ITKStatisticsModule +) add_executable(WeightedSampleStatistics WeightedSampleStatistics.cxx) -target_link_libraries(WeightedSampleStatistics ${ITK_LIBRARIES}) +target_link_libraries( + WeightedSampleStatistics + PRIVATE + ITK::ITKCommonModule + ITK::ITKStatisticsModule +) add_executable(ImageHistogram3 ImageHistogram3.cxx) -target_link_libraries(ImageHistogram3 ${ITK_LIBRARIES}) +target_link_libraries( + ImageHistogram3 + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule + ITK::ITKStatisticsModule +) add_executable(ScalarImageMarkovRandomField1 ScalarImageMarkovRandomField1.cxx) -target_link_libraries(ScalarImageMarkovRandomField1 ${ITK_LIBRARIES}) +target_link_libraries( + ScalarImageMarkovRandomField1 + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule + ITK::ITKImageIntensityModule + ITK::ITKImageComposeModule + ITK::ITKMarkovRandomFieldsClassifiersModule +) add_executable(ScalarImageKmeansClassifier ScalarImageKmeansClassifier.cxx) -target_link_libraries(ScalarImageKmeansClassifier ${ITK_LIBRARIES}) +target_link_libraries( + ScalarImageKmeansClassifier + PRIVATE + ITK::ITKImageIO + ITK::ITKClassifiersModule + ITK::ITKCommonModule +) add_executable(ImageToListSampleAdaptor ImageToListSampleAdaptor.cxx) -target_link_libraries(ImageToListSampleAdaptor ${ITK_LIBRARIES}) +target_link_libraries( + ImageToListSampleAdaptor + PRIVATE + ITK::ITKCommonModule + ITK::ITKImageComposeModule + ITK::ITKStatisticsModule + ITK::ITKTestKernelModule +) add_executable(ImageHistogram1 ImageHistogram1.cxx) -target_link_libraries(ImageHistogram1 ${ITK_LIBRARIES}) +target_link_libraries( + ImageHistogram1 + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule + ITK::ITKStatisticsModule +) add_executable(ImageHistogram2 ImageHistogram2.cxx) -target_link_libraries(ImageHistogram2 ${ITK_LIBRARIES}) +target_link_libraries( + ImageHistogram2 + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule + ITK::ITKStatisticsModule +) add_executable(ImageHistogram4 ImageHistogram4.cxx) -target_link_libraries(ImageHistogram4 ${ITK_LIBRARIES}) +target_link_libraries( + ImageHistogram4 + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule + ITK::ITKStatisticsModule +) add_executable(ImageEntropy1 ImageEntropy1.cxx) -target_link_libraries(ImageEntropy1 ${ITK_LIBRARIES}) +target_link_libraries( + ImageEntropy1 + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule + ITK::ITKStatisticsModule +) add_executable(ImageMutualInformation1 ImageMutualInformation1.cxx) -target_link_libraries(ImageMutualInformation1 ${ITK_LIBRARIES}) +target_link_libraries( + ImageMutualInformation1 + PRIVATE + ITK::ITKImageIO + ITK::ITKStatisticsModule + ITK::ITKCommonModule + ITK::ITKImageComposeModule +) add_executable( ScalarImageKmeansModelEstimator ScalarImageKmeansModelEstimator.cxx ) -target_link_libraries(ScalarImageKmeansModelEstimator ${ITK_LIBRARIES}) +target_link_libraries( + ScalarImageKmeansModelEstimator + PRIVATE + ITK::ITKImageIO + ITK::ITKCommonModule + ITK::ITKStatisticsModule +) if(BUILD_TESTING) add_subdirectory(test) diff --git a/Utilities/Maintenance/WhatModulesITK.py b/Utilities/Maintenance/WhatModulesITK.py index ebc92bc4a06..f75b47c91c8 100755 --- a/Utilities/Maintenance/WhatModulesITK.py +++ b/Utilities/Maintenance/WhatModulesITK.py @@ -3,25 +3,23 @@ import os, sys import re +import argparse program = sys.argv[0] -if len(sys.argv) < 3: - print( - """ -Usage: WhatModulesITK.py itkSourceTree applicationFiles... - Generate a FindPackage(ITK COMPONENTS) that lists all modules referenced by a set of files - - For example: - Running from the ITK source, - ./Utilities/Maintenance/WhatModulesITK.py . Modules/Filtering/Smoothing/test/itkDiscreteGaussianImageFilterTest.cxx - Produces - Find_Package(ITK COMPONENTS - ITKImageFilterBase - ITKSmoothing - ITKTestKernel - ) - To select many files from an application, - ./Utilities/Maintenance/WhatModulesITK.py . $(find /path/to/itk/project/ -type f) + +# Parse command line arguments +parser = argparse.ArgumentParser( + description="Generate CMake find_package or target_link_libraries commands for ITK modules", + epilog=""" +Examples: + Running from the ITK source: + ./Utilities/Maintenance/WhatModulesITK.py . Modules/Filtering/Smoothing/test/itkDiscreteGaussianImageFilterTest.cxx + + With --link option: + ./Utilities/Maintenance/WhatModulesITK.py --link . Examples/Filtering/AntiAliasBinaryImageFilter.cxx + + To select many files from an application: + ./Utilities/Maintenance/WhatModulesITK.py . $(find /path/to/itk/project/ -type f) NOTE: The modules list is created by looking at the itk include files used by the application files. Some programs do not include @@ -35,9 +33,23 @@ unless their include file is present in the application code. If ITKIOImageBase is present, a cmake variable ITK_IO_MODULES_USED is created and added to the module list. -""" - ) - exit(0) +""", + formatter_class=argparse.RawDescriptionHelpFormatter, +) +parser.add_argument( + "--link", + action="store_true", + help="Output target_link_libraries command with Module suffix instead of find_package", +) +parser.add_argument("itkSourceTree", help="Path to ITK source tree") +parser.add_argument( + "applicationFiles", nargs="+", help="Application source files to analyze" +) + +args = parser.parse_args() +itk_source_tree = args.itkSourceTree +application_files = args.applicationFiles +use_link_command = args.link # Build a dict that maps include files to paths @@ -58,7 +70,7 @@ def IncludesToPaths(path): def FindModules(path): pathToModule = dict() fileProg = re.compile(r"itk-module.cmake") - moduleProg = re.compile(".*itk_module[^(]*\\(([^ \n]*)", re.S) + moduleProg = re.compile(r".*itk_module[^(]*\(\s*([^\s)]+)", re.S) for root, dirs, files in os.walk(path): for f in files: if fileProg.match(f): @@ -90,15 +102,15 @@ def FindIncludes(path): # Start the program # Generate dict's for mapping includes to modules -includesToPaths = IncludesToPaths(os.path.join(sys.argv[1], "Modules")) -pathsToModules = FindModules(os.path.join(sys.argv[1], "Modules")) +includesToPaths = IncludesToPaths(os.path.join(itk_source_tree, "Modules")) +pathsToModules = FindModules(os.path.join(itk_source_tree, "Modules")) # Test to see if ITK source is provided if len(pathsToModules) == 0: print( program + ": " - + sys.argv[1] + + itk_source_tree + " is not an ITK source directory. It does not contain any itk-module.cmake files." ) exit(1) @@ -106,9 +118,7 @@ def FindIncludes(path): # Build a set of includes for all command line files allIncludes = set() -sys.argv.pop(0) -sys.argv.pop(0) -for f in sys.argv: +for f in application_files: if os.path.isfile(f): allIncludes.update(FindIncludes(f)) else: @@ -121,21 +131,41 @@ def FindIncludes(path): module = includesToPaths[inc] allModules.add(pathsToModules[includesToPaths[inc]]) -# Print a useful cmake command -print("find_package(ITK COMPONENTS") -for module in sorted(allModules): - print(" " + module) -if "ITKIOImageBase" in allModules: - print(r" ITKImageIO") -if "ITKIOMeshBase" in allModules: - print(r" ITKMeshIO") -if "ITKIOTransformBase" in allModules: - print(r" ITKTransformIO") -print(")") +# Map IO base modules to their corresponding Meta factory modules +io_module_map = [ + ("ITKIOImageBase", "ITKImageIO"), + ("ITKIOMeshBase", "ITKMeshIO"), + ("ITKIOTransformBase", "ITKTransformIO"), +] + +# Store original count before modifying allModules +original_module_count = len(allModules) + +# Print output based on --link option +if use_link_command: + # Output target_link_libraries with namespaced Module suffix + print("target_link_libraries(\n YourTarget\n PRIVATE") + + for base_module, io_module in io_module_map: + if base_module in allModules: + allModules.discard(base_module) + print(" " + io_module) + for module in sorted(allModules): + print(" " + module + "Module") + print(")") +else: + # Original find_package output + print("find_package(ITK COMPONENTS") + for module in sorted(allModules): + print(" " + module) + for base_module, io_module in io_module_map: + if base_module in allModules: + print(" " + io_module) + print(")") print( "Your application code includes " - + str(len(allModules)) + + str(original_module_count) + " of " + str(len(pathsToModules)) + " itk modules." From eb0e2d375992cb9e7af1c7ac0a5061d5f169a7a1 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Thu, 8 Jan 2026 23:29:50 +0000 Subject: [PATCH 5/7] ENH: Configure factory meta-modules with registration properties Add ITK_*_FACTORY_REGISTER_MANAGER compile definitions and factory registration header includes to factory meta-module interface targets. Use itk_generate_factory_registration in Examples to register factories. --- CMake/ITKFactoryRegistration.cmake | 28 ++++++++++++++++++++++++---- Examples/CMakeLists.txt | 1 + 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/CMake/ITKFactoryRegistration.cmake b/CMake/ITKFactoryRegistration.cmake index dcacd8e7afc..83bce802746 100644 --- a/CMake/ITKFactoryRegistration.cmake +++ b/CMake/ITKFactoryRegistration.cmake @@ -136,10 +136,11 @@ # Caveats # ------- # -# Since the both include directory containing the registration manager headers -# and the `ITK_IO_FACTORY_REGISTER_MANAGER` COMPILE_DEFINITIONS are set as -# directory properties, including external project (themselves including ITK) -# after including ITK can have unintended side effects. +# The include directory containing the registration manager headers and the +# `ITK__FACTORY_REGISTER_MANAGER` COMPILE_DEFINITIONS are set as +# target interface properties on the factory meta-module targets (ITKImageIO, +# ITKMeshIO, ITKTransformIO, ITKFFTImageFilterInit). This ensures proper propagation +# to dependent targets through modern CMake usage requirements. # # _itk_configure_FactoryRegisterManager( ) @@ -148,6 +149,8 @@ # `/ITKFactoryRegistration/`. # # Header is named using the template `itkFactoryRegisterManager.h` +# The include directory and compile definitions are added to the corresponding +# factory meta-module target's INTERFACE properties. # function(_itk_configure_FactoryRegisterManager factory_type formats) set(LIST_OF_FACTORIES_REGISTRATION "") @@ -169,6 +172,23 @@ function(_itk_configure_FactoryRegisterManager factory_type formats) "${CMAKE_CURRENT_BINARY_DIR}/ITKFactoryRegistration/itk${factory_type}FactoryRegisterManager.h" @ONLY ) + + # These functions may be called in the ITK source ( or a fetch content sub-project ), + # so support is needed when the namespaced meta-module target is an alias to the real target. + set(_meta_module ITK::ITK${factory_type}) + get_property( + aliased_target_name + TARGET ${_meta_module} + PROPERTY ALIASED_TARGET + ) + if(aliased_target_name) + set(_meta_module ${aliased_target_name}) + endif() + target_include_directories( + ${_meta_module} + INTERFACE + "$" + ) endfunction() # _itk_ADD_FACTORY_REGISTRATION( ) diff --git a/Examples/CMakeLists.txt b/Examples/CMakeLists.txt index e21f2041042..d779164ba2c 100644 --- a/Examples/CMakeLists.txt +++ b/Examples/CMakeLists.txt @@ -6,6 +6,7 @@ if(NOT ITK_BUILD_DEFAULT_MODULES) endif() find_package(ITK REQUIRED) +itk_generate_factory_registration() set(ITK_TEST_DRIVER itkTestDriver) From ff11ba74160384e5bc01c0800a261195b38cf616 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Wed, 14 Jan 2026 14:02:52 +0000 Subject: [PATCH 6/7] ENH: Link module libraries to interface modules libraries --- CMake/ITKModuleMacros.cmake | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/CMake/ITKModuleMacros.cmake b/CMake/ITKModuleMacros.cmake index cd09bc041fc..d011b3d541d 100644 --- a/CMake/ITKModuleMacros.cmake +++ b/CMake/ITKModuleMacros.cmake @@ -353,7 +353,7 @@ macro(itk_module_impl) # Link transitive dependencies (public + compile depends) through ${itk-module}Module interface foreach(dep IN LISTS ITK_MODULE_${itk-module}_TRANSITIVE_DEPENDS) - target_link_libraries(${itk-module}Module INTERFACE ${dep}Module) + target_link_libraries(${itk-module}Module INTERFACE ITK::${dep}Module) endforeach() # Link this module to factory meta-module interfaces if it provides factories @@ -371,7 +371,7 @@ macro(itk_module_impl) set(_meta_module ITK${_factory_name}) # Add this module to the factory meta-module - target_link_libraries(${_meta_module} INTERFACE ${itk-module}Module) + target_link_libraries(${_meta_module} INTERFACE ITK::${itk-module}Module) endforeach() endif() @@ -486,28 +486,28 @@ endmacro() macro(itk_module_link_dependencies) # link to public dependencies foreach(dep IN LISTS ITK_MODULE_${itk-module}_PUBLIC_DEPENDS) - if(DEFINED ${dep}_LIBRARIES) - target_link_libraries(${itk-module} LINK_PUBLIC ${${dep}_LIBRARIES}) + if(ITK_MODULE_${dep}_DECLARED) + target_link_libraries(${itk-module} LINK_PUBLIC ITK::${dep}Module) elseif(DEFINED ${dep}) target_link_libraries(${itk-module} LINK_PUBLIC ${${dep}}) else() message( FATAL_ERROR - "Dependency \"${dep}\" not found: could not find [${dep}] or [${dep}_LIBRARIES]" + "Dependency \"${dep}\" not found: could not find [${dep}] or [ITK::${dep}Module]" ) endif() endforeach() # link to private dependencies foreach(dep IN LISTS ITK_MODULE_${itk-module}_PRIVATE_DEPENDS) - if(DEFINED ${dep}_LIBRARIES) - target_link_libraries(${itk-module} LINK_PRIVATE ${${dep}_LIBRARIES}) + if(ITK_MODULE_${dep}_DECLARED) + target_link_libraries(${itk-module} LINK_PRIVATE ITK::${dep}Module) elseif(DEFINED ${dep}) target_link_libraries(${itk-module} LINK_PRIVATE ${${dep}}) else() message( FATAL_ERROR - "Dependency \"${dep}\" not found: could not find [${dep}] or [${dep}_LIBRARIES]" + "Dependency \"${dep}\" not found: could not find [${dep}] or [ITK::${dep}Module]" ) endif() endforeach() @@ -518,7 +518,7 @@ macro(itk_module_test) set(${itk-module-test}_LIBRARIES "") itk_module_use(${ITK_MODULE_${itk-module-test}_DEPENDS}) foreach(dep IN LISTS ITK_MODULE_${itk-module-test}_DEPENDS) - list(APPEND ${itk-module-test}_LIBRARIES "${${dep}_LIBRARIES}") + list(APPEND ${itk-module-test}_LIBRARIES "ITK::${dep}Module") endforeach() set(ITK_TEST_OUTPUT_DIR "${ITK_TEST_OUTPUT_DIR}/${itk-module}") file(MAKE_DIRECTORY "${ITK_TEST_OUTPUT_DIR}") From f0f88cb5f804d516acf298a5602e2755434a7776 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Wed, 14 Jan 2026 16:52:29 +0000 Subject: [PATCH 7/7] ENH: Add namespace support for all ITK targets Introduce ITK_INTERFACE_LIBRARIES variable to allow users to link to the interface libraries with properties. Add ITK_LIBRARY_NAMESPACE configuration (defaults to 'ITK') that enables namespaced targets for all ITK modules (e.g., ITK::ITKCommonModule). Introduce LIBRARIES_DEPRECATED variable alongside LIBRARIES to maintain backward compatibility. Create INTERFACE IMPORTED wrappers for old target names that link to new namespaced targets with DEPRECATION property set. Update module system to use ${module-targets-namespace} throughout: - itk_module_impl builds both deprecated and namespaced library lists - itk_module_link_dependencies uses namespaced targets - itk_module_test uses namespaced targets - Factory meta-modules use namespaced targets Update external itk_modile_config api to use ITK interface module libraries. Add init_module_vars() macro to set per-module namespace configuration. Add documentation for itk_module_target_export() explaining export mechanism and namespace handling for library targets. --- CMake/ITKConfig.cmake.in | 3 + CMake/ITKFactoryRegistration.cmake | 2 +- CMake/ITKModuleAPI.cmake | 8 +- CMake/ITKModuleEnablement.cmake | 12 +- CMake/ITKModuleInfo.cmake.in | 8 ++ CMake/ITKModuleMacros.cmake | 121 +++++++++++++++--- CMakeLists.txt | 5 + .../macro_files/itk_end_wrap_module.cmake | 14 +- 8 files changed, 142 insertions(+), 31 deletions(-) diff --git a/CMake/ITKConfig.cmake.in b/CMake/ITKConfig.cmake.in index 97e65584ca2..51b435bf20e 100644 --- a/CMake/ITKConfig.cmake.in +++ b/CMake/ITKConfig.cmake.in @@ -59,6 +59,9 @@ set(ITK_BUILD_DOCUMENTATION "@ITK_BUILD_DOCUMENTATION@") # List of available ITK modules. set(ITK_MODULES_ENABLED "@ITK_CONFIG_MODULES_ENABLED@") +# Define the ITK library namespace for CMake targets, without the trailing ::. +set(ITK_LIBRARY_NAMESPACE "@ITK_LIBRARY_NAMESPACE@") + # Import ITK targets. set(ITK_CONFIG_TARGETS_FILE "@ITK_CONFIG_TARGETS_FILE@") if(NOT ITK_TARGETS_IMPORTED@ITK_CONFIG_TARGETS_CONDITION@) diff --git a/CMake/ITKFactoryRegistration.cmake b/CMake/ITKFactoryRegistration.cmake index 83bce802746..9033ef827e1 100644 --- a/CMake/ITKFactoryRegistration.cmake +++ b/CMake/ITKFactoryRegistration.cmake @@ -175,7 +175,7 @@ function(_itk_configure_FactoryRegisterManager factory_type formats) # These functions may be called in the ITK source ( or a fetch content sub-project ), # so support is needed when the namespaced meta-module target is an alias to the real target. - set(_meta_module ITK::ITK${factory_type}) + set(_meta_module ${ITK_LIBRARY_NAMESPACE}::ITK${factory_type}) get_property( aliased_target_name TARGET ${_meta_module} diff --git a/CMake/ITKModuleAPI.cmake b/CMake/ITKModuleAPI.cmake index 6f4fab1426e..fe734e65fbf 100644 --- a/CMake/ITKModuleAPI.cmake +++ b/CMake/ITKModuleAPI.cmake @@ -30,6 +30,7 @@ macro(_itk_module_config_recurse ns mod) list(APPEND _${ns}_USED_MODULES ${mod}) itk_module_load("${mod}") list(APPEND ${ns}_LIBRARIES ${${mod}_LIBRARIES}) + list(APPEND ${ns}_INTERFACE_LIBRARIES ${${mod}_INTERFACE_LIBRARY}) list(APPEND ${ns}_INCLUDE_DIRS ${${mod}_INCLUDE_DIRS}) list(APPEND ${ns}_LIBRARY_DIRS ${${mod}_LIBRARY_DIRS}) list(APPEND ${ns}_RUNTIME_LIBRARY_DIRS ${${mod}_RUNTIME_LIBRARY_DIRS}) @@ -75,6 +76,7 @@ endmacro() # _TRANSITIVE_DEPENDS = List of dependencies on other modules (public link, compile) # _PRIVATE_DEPENDS = List of dependencies on other modules (private link) # _LIBRARIES = Libraries to link +# _INTERFACE_LIBRARY = Interface library for module # _INCLUDE_DIRS = Header search path # _LIBRARY_DIRS = Library search path (for outside dependencies) # _RUNTIME_LIBRARY_DIRS = Runtime linker search path @@ -97,7 +99,8 @@ endmacro() # itk_module_config( [modules...]) # # Configures variables describing the given modules and their dependencies: -# _LIBRARIES = Libraries to link +# _LIBRARIES = Libraries +# _INTERFACE_LIBRARIES = Interface libraries to link with public interfaces # _INCLUDE_DIRS = Header search path # _LIBRARY_DIRS = Library search path (for outside dependencies) # _RUNTIME_LIBRARY_DIRS = Runtime linker search path @@ -123,6 +126,7 @@ endmacro() # future. For more details, read documentation in CMake/UseITK.cmake. macro(itk_module_config ns) set(${ns}_LIBRARIES "") + set(${ns}_INTERFACE_LIBRARIES "") set(${ns}_INCLUDE_DIRS "") set(${ns}_LIBRARY_DIRS "") set(${ns}_RUNTIME_LIBRARY_DIRS "") @@ -143,6 +147,7 @@ macro(itk_module_config ns) foreach( v ${ns}_LIBRARIES + ${ns}_INTERFACE_LIBRARIES ${ns}_INCLUDE_DIRS ${ns}_LIBRARY_DIRS ${ns}_RUNTIME_LIBRARY_DIRS @@ -153,6 +158,7 @@ macro(itk_module_config ns) list(REMOVE_DUPLICATES ${v}) endif() endforeach() + foreach(_factory ${${ns}_FACTORY_LIST}) list(SORT ${ns}_${_factory}) # Sort to ensure a deterministic order endforeach() diff --git a/CMake/ITKModuleEnablement.cmake b/CMake/ITKModuleEnablement.cmake index 3ae3ea2cf43..909566addae 100644 --- a/CMake/ITKModuleEnablement.cmake +++ b/CMake/ITKModuleEnablement.cmake @@ -426,6 +426,11 @@ macro(init_module_vars) "${ITK_INSTALL_PACKAGE_DIR}/ITKTargets.cmake" ) set(${itk-module}-targets-build "${ITK_BINARY_DIR}/ITKTargets.cmake") + + set(${itk-module}-targets-namespace "") + if(ITK_LIBRARY_NAMESPACE) + set(${itk-module}-targets-namespace "${ITK_LIBRARY_NAMESPACE}::") + endif() endmacro() #---------------------------------------------------------------------- @@ -435,13 +440,6 @@ foreach(_factory_name IN ITEMS ImageIO MeshIO TransformIO FFTImageFilterInit) set(itk-module ITK${_factory_name}) if(NOT TARGET ${itk-module}) add_library(${itk-module} INTERFACE) - set_target_properties( - ${itk-module} - PROPERTIES - EXPORT_NAME - ITK::${itk-module} - ) - add_library(ITK::${itk-module} ALIAS ${itk-module}) init_module_vars(${itk-module}) set(ITK_MODULE_${itk-module}_DECLARED 1) diff --git a/CMake/ITKModuleInfo.cmake.in b/CMake/ITKModuleInfo.cmake.in index 569ce9ce02f..9a44ce481da 100644 --- a/CMake/ITKModuleInfo.cmake.in +++ b/CMake/ITKModuleInfo.cmake.in @@ -4,10 +4,18 @@ set(@itk-module@_DEPENDS "@itk-module-DEPENDS@") set(@itk-module@_PUBLIC_DEPENDS "@itk-module-PUBLIC_DEPENDS@") set(@itk-module@_TRANSITIVE_DEPENDS "@itk-module-TRANSITIVE_DEPENDS@") set(@itk-module@_PRIVATE_DEPENDS "@itk-module-PRIVATE_DEPENDS@") +set(@itk-module@_LIBRARIES_DEPRECATED "@itk-module-LIBRARIES_DEPRECATED@") set(@itk-module@_LIBRARIES "@itk-module-LIBRARIES@") +set(@itk-module@_INTERFACE_LIBRARY "@itk-module-INTERFACE_LIBRARY@") set(@itk-module@_INCLUDE_DIRS "@itk-module-INCLUDE_DIRS@") set(@itk-module@_LIBRARY_DIRS "@itk-module-LIBRARY_DIRS@") set(@itk-module@_RUNTIME_LIBRARY_DIRS "@itk-module-RUNTIME_LIBRARY_DIRS@") set(@itk-module@_TARGETS_FILE "@itk-module-TARGETS_FILE@") set(@itk-module@_FACTORY_NAMES "@itk-module-FACTORY_NAMES@") + +# Create deprecated library interface wrappers +# TODO + + + @itk-module-EXPORT_CODE@ diff --git a/CMake/ITKModuleMacros.cmake b/CMake/ITKModuleMacros.cmake index d011b3d541d..d9f7959b045 100644 --- a/CMake/ITKModuleMacros.cmake +++ b/CMake/ITKModuleMacros.cmake @@ -12,6 +12,30 @@ include(${_ITKModuleMacros_DIR}/ITKFactoryRegistration.cmake) include(GenerateExportHeader) +# _itk_module_convert_namespace_target_list(var_name) +# +# Helper function that converts a list of module names to their fully namespaced +# target names with the Module suffix. This function modifies the variable in-place +# in the parent scope. +# +# For each element in the list, converts: +# ElementName -> ${ElementName-targets-namespace}ElementNameModule +# +# Arguments: +# var_name - Name of the variable containing the list to convert +# +# Example: +# set(MY_DEPS ITKCommon ITKIOImageBase) +# _itk_module_convert_namespace_target_list(MY_DEPS) +# # MY_DEPS now contains: ITK::ITKCommonModule ITK::ITKIOImageBaseModule (if namespace is ITK::) +function(_itk_module_convert_namespace_target_list var_name) + set(_converted_list "") + foreach(_item IN LISTS ${var_name}) + list(APPEND _converted_list "${${_item}-targets-namespace}${_item}Module") + endforeach() + set(${var_name} "${_converted_list}" PARENT_SCOPE) +endfunction() + # itk_module() # # Main function for declaring an ITK module, usually in an itk-module.cmake file @@ -169,14 +193,24 @@ macro(itk_module_impl) itk_module_use(${ITK_MODULE_${itk-module}_DEPENDS}) - if(NOT DEFINED ${itk-module}_LIBRARIES) - set(${itk-module}_LIBRARIES "") - foreach(dep IN LISTS ITK_MODULE_${itk-module}_DEPENDS) - list(APPEND ${itk-module}_LIBRARIES "${${dep}_LIBRARIES}") + # The ${itk-module}_LIBRARIES variable defined the libraries provided by this module. + # Transitive dependencies of this module are provided through the + # ${itk-module}Module interface library created below. + set(${itk-module}_LIBRARIES_DEPRECATED "") + if(DEFINED ${itk-module}_LIBRARIES) + set(_libraries "") + foreach(dep IN LISTS ${itk-module}_LIBRARIES) + # check if dep already has namespace and Module suffix + if("${dep}" MATCHES "^(.*)::(.*)$") + list(APPEND _libraries "${dep}") + else() + list(APPEND _libraries "${${itk-module}-targets-namespace}${dep}") + list(APPEND ${itk-module}_LIBRARIES_DEPRECATED "${dep}") + endif() endforeach() - if(${itk-module}_LIBRARIES) - list(REMOVE_DUPLICATES ${itk-module}_LIBRARIES) - endif() + set(${itk-module}_LIBRARIES "${_libraries}") + list(REMOVE_DUPLICATES ${itk-module}_LIBRARIES) + list(REMOVE_DUPLICATES ${itk-module}_LIBRARIES_DEPRECATED) endif() if(EXISTS ${${itk-module}_SOURCE_DIR}/include) @@ -324,13 +358,6 @@ macro(itk_module_impl) # Create ${itk-module}Module interface library for ITK Modules #### add_library(${itk-module}Module INTERFACE) - set_target_properties( - ${itk-module}Module - PROPERTIES - EXPORT_NAME - ITK::${itk-module}Module - ) - add_library(ITK::${itk-module}Module ALIAS ${itk-module}Module) target_link_libraries( ${itk-module}Module @@ -353,7 +380,11 @@ macro(itk_module_impl) # Link transitive dependencies (public + compile depends) through ${itk-module}Module interface foreach(dep IN LISTS ITK_MODULE_${itk-module}_TRANSITIVE_DEPENDS) - target_link_libraries(${itk-module}Module INTERFACE ITK::${dep}Module) + target_link_libraries( + ${itk-module}Module + INTERFACE + ${${dep}-targets-namespace}${dep}Module + ) endforeach() # Link this module to factory meta-module interfaces if it provides factories @@ -371,7 +402,11 @@ macro(itk_module_impl) set(_meta_module ITK${_factory_name}) # Add this module to the factory meta-module - target_link_libraries(${_meta_module} INTERFACE ITK::${itk-module}Module) + target_link_libraries( + ${_meta_module} + INTERFACE + ${${itk-module}-targets-namespace}${itk-module}Module + ) endforeach() endif() @@ -402,7 +437,13 @@ macro(itk_module_impl) ) set(itk-module-PRIVATE_DEPENDS "${ITK_MODULE_${itk-module}_PRIVATE_DEPENDS}") set(itk-module-FACTORY_NAMES "${ITK_MODULE_${itk-module}_FACTORY_NAMES}") + set(itk-module-LIBRARIES_DEPRECATED "${${itk-module}_LIBRARIES_DEPRECATED}") set(itk-module-LIBRARIES "${${itk-module}_LIBRARIES}") + set( + itk-module-INTERFACE_LIBRARY + "${${itk-module}-targets-namespace}${itk-module}Module" + ) + set(itk-module-INCLUDE_DIRS-build "${${itk-module}_INCLUDE_DIRS}") set( itk-module-INCLUDE_DIRS-install @@ -487,13 +528,17 @@ macro(itk_module_link_dependencies) # link to public dependencies foreach(dep IN LISTS ITK_MODULE_${itk-module}_PUBLIC_DEPENDS) if(ITK_MODULE_${dep}_DECLARED) - target_link_libraries(${itk-module} LINK_PUBLIC ITK::${dep}Module) + target_link_libraries( + ${itk-module} + LINK_PUBLIC + ${${dep}-targets-namespace}${dep}Module + ) elseif(DEFINED ${dep}) target_link_libraries(${itk-module} LINK_PUBLIC ${${dep}}) else() message( FATAL_ERROR - "Dependency \"${dep}\" not found: could not find [${dep}] or [ITK::${dep}Module]" + "Dependency \"${dep}\" not found: could not find [${dep}] or [${${dep}-targets-namespace}${dep}Module]" ) endif() endforeach() @@ -501,13 +546,17 @@ macro(itk_module_link_dependencies) # link to private dependencies foreach(dep IN LISTS ITK_MODULE_${itk-module}_PRIVATE_DEPENDS) if(ITK_MODULE_${dep}_DECLARED) - target_link_libraries(${itk-module} LINK_PRIVATE ITK::${dep}Module) + target_link_libraries( + ${itk-module} + LINK_PRIVATE + ${${dep}-targets-namespace}${dep}Module + ) elseif(DEFINED ${dep}) target_link_libraries(${itk-module} LINK_PRIVATE ${${dep}}) else() message( FATAL_ERROR - "Dependency \"${dep}\" not found: could not find [${dep}] or [ITK::${dep}Module]" + "Dependency \"${dep}\" not found: could not find [${dep}] or [${${dep}-targets-namespace}${dep}Module]" ) endif() endforeach() @@ -518,7 +567,11 @@ macro(itk_module_test) set(${itk-module-test}_LIBRARIES "") itk_module_use(${ITK_MODULE_${itk-module-test}_DEPENDS}) foreach(dep IN LISTS ITK_MODULE_${itk-module-test}_DEPENDS) - list(APPEND ${itk-module-test}_LIBRARIES "ITK::${dep}Module") + list( + APPEND + ${itk-module-test}_LIBRARIES + "${${dep}-targets-namespace}${dep}Module" + ) endforeach() set(ITK_TEST_OUTPUT_DIR "${ITK_TEST_OUTPUT_DIR}/${itk-module}") file(MAKE_DIRECTORY "${ITK_TEST_OUTPUT_DIR}") @@ -633,7 +686,33 @@ macro(itk_module_target_name _name) ) endmacro() +# itk_module_target_export(_name) +# +# Macro for exporting a target from an ITK module to the build tree. This macro +# handles the export of targets to make them available to other ITK modules and +# external projects that use ITK. +# +# For library targets with a defined namespace (${itk-module}-targets-namespace), +# this macro creates an ALIAS target with the namespace prefix and sets the +# EXPORT_NAME property accordingly. This ensures consistent naming when the target +# is used through find_package(ITK). +# +# All targets are exported to the module's build tree targets file +# (${itk-module}-targets-build) for use during the build process. +# +# Arguments: +# _name - The name of the target to export (typically ${itk-module} or ${itk-module}Module) macro(itk_module_target_export _name) + get_property(_ttype TARGET ${_name} PROPERTY TYPE) + if(_ttype MATCHES ".*_LIBRARY$" AND ${itk-module}-targets-namespace) + add_library(${${itk-module}-targets-namespace}${_name} ALIAS ${_name}) + set_target_properties( + ${_name} + PROPERTIES + EXPORT_NAME + ${${itk-module}-targets-namespace}${_name} + ) + endif() export(TARGETS ${_name} APPEND FILE ${${itk-module}-targets-build}) endmacro() diff --git a/CMakeLists.txt b/CMakeLists.txt index 988ea72ad77..9f67c9f16db 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -188,6 +188,11 @@ set(main_project_name ${_ITKModuleMacros_DEFAULT_LABEL}) #----------------------------------------------------------------------------- configure_file(CMake/ITKConfigVersion.cmake.in ITKConfigVersion.cmake @ONLY) +# +if(NOT ITK_LIBRARY_NAMESPACE) + set(ITK_LIBRARY_NAMESPACE ITK) +endif() + if(NOT CMAKE_INSTALL_LIBDIR) set(CMAKE_INSTALL_LIBDIR lib) endif() diff --git a/Wrapping/macro_files/itk_end_wrap_module.cmake b/Wrapping/macro_files/itk_end_wrap_module.cmake index 42e49b9709a..ca595b834f2 100644 --- a/Wrapping/macro_files/itk_end_wrap_module.cmake +++ b/Wrapping/macro_files/itk_end_wrap_module.cmake @@ -392,7 +392,19 @@ PyModule_AddObject(m, \"_C_API\", cAPIObject); ${DO_NOT_WAIT_FOR_THREADS_CALLS} " ) - elseif("ITKCommon" IN_LIST WRAPPER_LIBRARY_LINK_LIBRARIES) + elseif( + "ITKCommon" + IN_LIST + WRAPPER_LIBRARY_LINK_LIBRARIES + OR + "${ITK_LIBRARY_NAMESPACE}::ITKCommon" + IN_LIST + WRAPPER_LIBRARY_LINK_LIBRARIES + OR + "${ITK_LIBRARY_NAMESPACE}::ITKCommonModule" + IN_LIST + WRAPPER_LIBRARY_LINK_LIBRARIES + ) set( ITK_WRAP_PYTHON_GLOBAL_TIMESTAMP_DECLS "