From c500100600807f355f87e7849b37728b2cf55345 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Wed, 14 Jan 2026 15:56:26 +0000 Subject: [PATCH 01/11] BUG: 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 f29e36b5fc4dbc9a0674162685b9063bc75a3f97 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Wed, 7 Jan 2026 14:38:42 -0500 Subject: [PATCH 02/11] 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}_GENEX_INCLUDE_DIRS and ${itk-module}_SYSTEM_GENEX_INCLUDE_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. Maintain directory level include for ThirdParty modules 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 | 66 ++++++++++++++++++++++++++++----- 2 files changed, 72 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..d24dae93ecb 100644 --- a/CMake/ITKModuleMacros.cmake +++ b/CMake/ITKModuleMacros.cmake @@ -194,20 +194,43 @@ 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) itk_module_warnings_disable(C CXX) + 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() else() if(ITK_USE_KWSTYLE) itk_module_kwstyle_test(${itk-module}) @@ -371,6 +394,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 +655,25 @@ 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} + ) + + # 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 From 2d7be0e0ada17ac0dd409de8aa2906778d30d06b Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Wed, 7 Jan 2026 15:32:23 -0500 Subject: [PATCH 03/11] 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 | 16 +------- CMake/ITKModuleMacros.cmake | 66 +++++++++++++++++++++++++++++++-- 3 files changed, 102 insertions(+), 19 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..e6342e4b812 100644 --- a/CMake/ITKModuleHeaderTest.cmake +++ b/CMake/ITKModuleHeaderTest.cmake @@ -123,24 +123,10 @@ macro(itk_module_headertest _name) target_link_libraries( ${_test_name} PUBLIC - ${${_name}_LIBRARIES} + ITK::${_name}Module 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 d24dae93ecb..b3896cbe0d1 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() @@ -331,6 +327,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) From cafea8742f545d34d309de5476737f227552d151 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Wed, 7 Jan 2026 16:05:29 -0500 Subject: [PATCH 04/11] 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 c02e23536853be280be8d4d94213c79afe274480 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Thu, 8 Jan 2026 23:29:50 +0000 Subject: [PATCH 05/11] 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 941da2f2f491fea17f2546a50a77bfa888164a4b Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Wed, 14 Jan 2026 14:02:52 +0000 Subject: [PATCH 06/11] 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 b3896cbe0d1..9cb29f86e37 100644 --- a/CMake/ITKModuleMacros.cmake +++ b/CMake/ITKModuleMacros.cmake @@ -360,7 +360,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 @@ -378,7 +378,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() @@ -493,28 +493,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() @@ -525,7 +525,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 2b035bd97116ce1a793912b3bbf25586d7d63a65 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Wed, 14 Jan 2026 16:52:29 +0000 Subject: [PATCH 07/11] 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 | 5 +- CMake/ITKModuleAPI.cmake | 8 +- CMake/ITKModuleEnablement.cmake | 15 +- CMake/ITKModuleExternal.cmake | 2 + CMake/ITKModuleHeaderTest.cmake | 6 +- CMake/ITKModuleInfo.cmake.in | 2 + CMake/ITKModuleMacros.cmake | 176 +++++++++++++----- CMakeLists.txt | 5 + Utilities/Maintenance/WhatModulesITK.py | 6 +- .../macro_files/itk_end_wrap_module.cmake | 14 +- 11 files changed, 184 insertions(+), 58 deletions(-) diff --git a/CMake/ITKConfig.cmake.in b/CMake/ITKConfig.cmake.in index b8089f6f48f..367b1b096ae 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..fa8cb28d74e 100644 --- a/CMake/ITKFactoryRegistration.cmake +++ b/CMake/ITKFactoryRegistration.cmake @@ -175,7 +175,10 @@ 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${factory_type}) + if(ITK_LIBRARY_NAMESPACE) + set(_meta_module ${ITK_LIBRARY_NAMESPACE}::ITK${factory_type}) + endif() 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..218187f33fe 100644 --- a/CMake/ITKModuleEnablement.cmake +++ b/CMake/ITKModuleEnablement.cmake @@ -435,13 +435,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) @@ -461,6 +454,14 @@ foreach(_factory_name IN ITEMS ImageIO MeshIO TransformIO FFTImageFilterInit) ITK_${_factory_uc}_FACTORY_REGISTER_MANAGER ) + set(ITK_MODULE_${itk-module}_TARGETS_NAMESPACE "") + if(ITK_LIBRARY_NAMESPACE) + set( + ITK_MODULE_${itk-module}_TARGETS_NAMESPACE + "${ITK_LIBRARY_NAMESPACE}::" + ) + endif() + # Export and install the factory interface library itk_module_target_export(${itk-module}) itk_module_target_install(${itk-module}) diff --git a/CMake/ITKModuleExternal.cmake b/CMake/ITKModuleExternal.cmake index c750c7d65c0..2aa1f99c93c 100644 --- a/CMake/ITKModuleExternal.cmake +++ b/CMake/ITKModuleExternal.cmake @@ -197,6 +197,8 @@ set( set(${itk-module}_TARGETS_FILE_BUILD "${${itk-module}-targets-build}") file(WRITE "${${itk-module}_TARGETS_FILE_BUILD}" "") # Clear targets set(${itk-module}_ENABLE_SHARED "${ITK_MODULE_${itk-module}_ENABLE_SHARED}") +set(${itk-module}-targets-namespace "") + itk_module_impl() if( diff --git a/CMake/ITKModuleHeaderTest.cmake b/CMake/ITKModuleHeaderTest.cmake index e6342e4b812..22745f5c78b 100644 --- a/CMake/ITKModuleHeaderTest.cmake +++ b/CMake/ITKModuleHeaderTest.cmake @@ -122,9 +122,9 @@ macro(itk_module_headertest _name) add_executable(${_test_name} ${_header_test_src}) target_link_libraries( ${_test_name} - PUBLIC - ITK::${_name}Module - itksys + PRIVATE + ${ITK_MODULE_${_name}_TARGETS_NAMESPACE}${_name}Module + ${ITK_MODULE_${_name}_TARGETS_NAMESPACE}ITKKWSysModule ) target_link_options( diff --git a/CMake/ITKModuleInfo.cmake.in b/CMake/ITKModuleInfo.cmake.in index 569ce9ce02f..36d8a00348a 100644 --- a/CMake/ITKModuleInfo.cmake.in +++ b/CMake/ITKModuleInfo.cmake.in @@ -5,9 +5,11 @@ 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 "@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@") + @itk-module-EXPORT_CODE@ diff --git a/CMake/ITKModuleMacros.cmake b/CMake/ITKModuleMacros.cmake index 9cb29f86e37..8a30ddb5215 100644 --- a/CMake/ITKModuleMacros.cmake +++ b/CMake/ITKModuleMacros.cmake @@ -49,9 +49,16 @@ include(GenerateExportHeader) macro(itk_module _name) itk_module_check_name(${_name}) + set(itk-module ${_name}) set(itk-module-test ${_name}-Test) set(_doing "") + + # Note: All modules have the same namespace as initially configured in ITK + set(ITK_MODULE_${itk-module}_TARGETS_NAMESPACE "") + if(ITK_LIBRARY_NAMESPACE) + set(ITK_MODULE_${itk-module}_TARGETS_NAMESPACE "${ITK_LIBRARY_NAMESPACE}::") + endif() set(ITK_MODULE_${itk-module}_DECLARED 1) set(ITK_MODULE_${itk-module-test}_DECLARED 1) set(ITK_MODULE_${itk-module}_DEPENDS "") @@ -169,14 +176,51 @@ 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. + 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_${itk-module}_TARGETS_NAMESPACE}${dep}" + ) + if(NOT ITK_MODULE_${itk-module}_TARGETS_NAMESPACE STREQUAL "") + set( + ${itk-module}_EXPORT_CODE_INSTALL + "${${itk-module}_EXPORT_CODE_INSTALL} +add_library(${dep} INTERFACE IMPORTED) +set_target_properties(${dep} + PROPERTIES + INTERFACE_LINK_LIBRARIES ${ITK_MODULE_${itk-module}_TARGETS_NAMESPACE}${dep} + DEPRECATION \"Use ${ITK_MODULE_${itk-module}_TARGETS_NAMESPACE}${dep} instead\" +) +" + ) + set( + ${itk-module}_EXPORT_CODE_BUILD + "${${itk-module}_EXPORT_CODE_BUILD} +if(NOT TARGET ${dep}) + add_library(${dep} INTERFACE IMPORTED) + set_target_properties(${dep} + PROPERTIES + INTERFACE_LINK_LIBRARIES ${ITK_MODULE_${itk-module}_TARGETS_NAMESPACE}${dep} + DEPRECATION \"Use ${ITK_MODULE_${itk-module}_TARGETS_NAMESPACE}${dep} instead\" + ) +endif() +" + ) + endif() + endif() endforeach() - if(${itk-module}_LIBRARIES) - list(REMOVE_DUPLICATES ${itk-module}_LIBRARIES) - endif() + set(${itk-module}_LIBRARIES "${_libraries}") + list(REMOVE_DUPLICATES ${itk-module}_LIBRARIES) endif() if(EXISTS ${${itk-module}_SOURCE_DIR}/include) @@ -331,13 +375,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 @@ -360,7 +397,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 + ${ITK_MODULE_${itk-module}_TARGETS_NAMESPACE}${dep}Module + ) endforeach() # Link this module to factory meta-module interfaces if it provides factories @@ -378,7 +419,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_${itk-module}_TARGETS_NAMESPACE}${itk-module}Module + ) endforeach() endif() @@ -410,6 +455,11 @@ 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 "${${itk-module}_LIBRARIES}") + set( + itk-module-INTERFACE_LIBRARY + "${ITK_MODULE_${itk-module}_TARGETS_NAMESPACE}${itk-module}Module" + ) + set(itk-module-INCLUDE_DIRS-build "${${itk-module}_INCLUDE_DIRS}") set( itk-module-INCLUDE_DIRS-install @@ -491,41 +541,46 @@ endmacro() # Macro for linking to modules dependencies. Links this module to every # dependency given to itk_module either publicly or privately. 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) - 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]" - ) - endif() - endforeach() - - # 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) - 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]" + # link to dependencies + foreach(_link IN ITEMS PUBLIC INTERFACE PRIVATE) + foreach(dep IN LISTS ITK_MODULE_${itk-module}_${_link}_DEPENDS) + if( + ITK_MODULE_${dep}_LOADED + OR + TARGET + ${ITK_MODULE_${itk-module}_TARGETS_NAMESPACE}${dep}Module ) - endif() + target_link_libraries( + ${itk-module} + ${_link} + ${ITK_MODULE_${itk-module}_TARGETS_NAMESPACE}${dep}Module + ) + elseif(DEFINED ${dep}) + target_link_libraries( + ${itk-module} + ${_link} + ${${dep}} + ) + else() + message( + FATAL_ERROR + "${_link} Dependency \"${dep}\" not found: could not find [${dep}] or [${ITK_MODULE_${itk-module}_TARGETS_NAMESPACE}${dep}Module]" + ) + endif() + endforeach() endforeach() endmacro() macro(itk_module_test) include(../itk-module.cmake) # Load module meta-data 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") + itk_module_load("${dep}") + list( + APPEND + ${itk-module-test}_LIBRARIES + "${ITK_MODULE_${itk-module}_TARGETS_NAMESPACE}${dep}Module" + ) endforeach() set(ITK_TEST_OUTPUT_DIR "${ITK_TEST_OUTPUT_DIR}/${itk-module}") file(MAKE_DIRECTORY "${ITK_TEST_OUTPUT_DIR}") @@ -640,7 +695,42 @@ 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_${itk-module}_TARGETS_NAMESPACE + ) + add_library( + ${ITK_MODULE_${itk-module}_TARGETS_NAMESPACE}${_name} + ALIAS ${_name} + ) + set_target_properties( + ${_name} + PROPERTIES + EXPORT_NAME + ${ITK_MODULE_${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..be2e77af64a 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 DEFINED ITK_LIBRARY_NAMESPACE) + set(ITK_LIBRARY_NAMESPACE "ITK") +endif() + if(NOT CMAKE_INSTALL_LIBDIR) set(CMAKE_INSTALL_LIBDIR lib) endif() diff --git a/Utilities/Maintenance/WhatModulesITK.py b/Utilities/Maintenance/WhatModulesITK.py index f75b47c91c8..029cea48485 100755 --- a/Utilities/Maintenance/WhatModulesITK.py +++ b/Utilities/Maintenance/WhatModulesITK.py @@ -141,6 +141,8 @@ def FindIncludes(path): # Store original count before modifying allModules original_module_count = len(allModules) +namespace_prefix = "ITK::" + # Print output based on --link option if use_link_command: # Output target_link_libraries with namespaced Module suffix @@ -149,9 +151,9 @@ def FindIncludes(path): for base_module, io_module in io_module_map: if base_module in allModules: allModules.discard(base_module) - print(" " + io_module) + print(" " + namespace_prefix + io_module) for module in sorted(allModules): - print(" " + module + "Module") + print(" " + namespace_prefix + module + "Module") print(")") else: # Original find_package output 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 " From 5c53e2bf7d360f24c21740ca2936a4c0d833a7fa Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Wed, 21 Jan 2026 02:44:47 +0000 Subject: [PATCH 08/11] BUG: Fix detection of loading current module --- CMake/ITKModuleAPI.cmake | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/CMake/ITKModuleAPI.cmake b/CMake/ITKModuleAPI.cmake index fe734e65fbf..dec4583220b 100644 --- a/CMake/ITKModuleAPI.cmake +++ b/CMake/ITKModuleAPI.cmake @@ -90,7 +90,15 @@ macro(itk_module_load mod) # than ITKTargets.cmake are created when modules are built externally. Do not # include the targets file inside the module itself -- which occurs in a module's # test configuration. - if(EXISTS "${${mod}_TARGETS_FILE}" AND NOT itk-module STREQUAL mod) + if( + EXISTS + "${${mod}_TARGETS_FILE}" + AND + NOT + "${itk-module}" + STREQUAL + "${mod}" + ) include("${${mod}_TARGETS_FILE}") endif() endif() From 24d80b3b14741ba93432967c660069c9facbce21 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Fri, 23 Jan 2026 14:02:03 +0000 Subject: [PATCH 09/11] BUG: Modular interface support for third-party library files For a Module's Libraries, detect non-target library file with an "EXISTS" check. This will detect full paths, but not library only filenames with library search path usages. --- CMake/ITKModuleMacros.cmake | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/CMake/ITKModuleMacros.cmake b/CMake/ITKModuleMacros.cmake index 8a30ddb5215..000e5b0ac7f 100644 --- a/CMake/ITKModuleMacros.cmake +++ b/CMake/ITKModuleMacros.cmake @@ -182,8 +182,13 @@ macro(itk_module_impl) 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 "^(.*)::(.*)$") + if(EXISTS "${dep}") + # If we are linking to a file, use it directly + message(DEBUG "Linking ${itk-module} to file dependency: ${dep}") + list(APPEND _libraries "${dep}") + elseif("${dep}" MATCHES "^(.*)::(.*)$") + # If dep is already namespaced, use it directly + message(DEBUG "Linking ${itk-module} to namespaced dependency: ${dep}") list(APPEND _libraries "${dep}") else() list( From 45282aad37dda31e59a262fa25e7660e1923fb2d Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Fri, 23 Jan 2026 14:04:39 +0000 Subject: [PATCH 10/11] ENH: Update Installation Example to use ITK Interface libraries Update the example usage of ITK to remove "UseITK" to use the ITK's module interface libraries with the library properties. --- Examples/Installation/CMakeLists.txt | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/Examples/Installation/CMakeLists.txt b/Examples/Installation/CMakeLists.txt index 3f675b23d29..b3bb736fb59 100644 --- a/Examples/Installation/CMakeLists.txt +++ b/Examples/Installation/CMakeLists.txt @@ -1,24 +1,18 @@ # This is the root ITK CMakeLists file. -cmake_minimum_required(VERSION 3.16.3 FATAL_ERROR) -foreach( - p - ## Only policies introduced after the cmake_minimum_required - ## version need to explicitly be set to NEW. - CMP0070 #3.10.0 Define ``file(GENERATE)`` behavior for relative paths. - CMP0071 #3.10.0 Let ``AUTOMOC`` and ``AUTOUIC`` process ``GENERATED`` files. -) - if(POLICY ${p}) - cmake_policy(SET ${p} NEW) - endif() -endforeach() +cmake_minimum_required(VERSION 3.22.1...3.29.0 FATAL_ERROR) # This project is designed to be built outside the Insight source tree. project(HelloWorld) # Find ITK. find_package(ITK REQUIRED) -include(${ITK_USE_FILE}) + +# Generate the ITK factory registration code. +itk_generate_factory_registration() add_executable(HelloWorld HelloWorld.cxx) -target_link_libraries(HelloWorld ${ITK_LIBRARIES}) +# Link the executable to the specific ITK interface library modules used. +target_link_libraries(HelloWorld ITK::ITKCommonModule) +# Alternatively, all the ITK interface libraries can be linked as shown below. +# target_link_libraries(HelloWorld ${ITK_INTERFACE_LIBRARIES}) From 44e92624b75ce08533f86a4762dfd28b5bcaa91d Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Fri, 23 Jan 2026 20:29:37 +0000 Subject: [PATCH 11/11] BUG: Fix PhilipsREC module to use standard ITK module macros --- Modules/IO/PhilipsREC/src/CMakeLists.txt | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/Modules/IO/PhilipsREC/src/CMakeLists.txt b/Modules/IO/PhilipsREC/src/CMakeLists.txt index 4b2eb81ee0b..f9d26700b90 100644 --- a/Modules/IO/PhilipsREC/src/CMakeLists.txt +++ b/Modules/IO/PhilipsREC/src/CMakeLists.txt @@ -5,10 +5,4 @@ set( itkPhilipsRECImageIOFactory.cxx ) -add_library( - ITKIOPhilipsREC - ${ITK_LIBRARY_BUILD_TYPE} - ${ITKIOPhilipsREC_SRC} -) -itk_module_link_dependencies() -itk_module_target(ITKIOPhilipsREC) +itk_module_add_library(ITKIOPhilipsREC ${ITKIOPhilipsREC_SRC})