Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
76 changes: 57 additions & 19 deletions CMake/ITKModuleMacros.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -723,7 +723,7 @@ macro(itk_module_target_name _name)
)
endmacro()

# itk_module_target_export(_name)
# itk_module_target_export(_name [NAMESPACE <namespace>])
#
# 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
Expand All @@ -739,24 +739,40 @@ endmacro()
#
# Arguments:
# _name - The name of the target to export (typically ${itk-module} or ${itk-module}Module)
# NAMESPACE - Optional namespace prefix. If not provided, uses ITK_MODULE_${itk-module}_TARGETS_NAMESPACE
macro(itk_module_target_export _name)
cmake_parse_arguments(_export "" "NAMESPACE" "" ${ARGN})
if(_export_UNPARSED_ARGUMENTS)
message(FATAL_ERROR "Unknown arguments: ${_export_UNPARSED_ARGUMENTS}")
endif()

if(_export_NAMESPACE)
set(_export_namespace "${_export_NAMESPACE}")
else()
set(_export_namespace "${ITK_MODULE_${itk-module}_TARGETS_NAMESPACE}")
endif()

get_property(_ttype TARGET ${_name} PROPERTY TYPE)
if(
_ttype
MATCHES
".*_LIBRARY$"
AND
ITK_MODULE_${itk-module}_TARGETS_NAMESPACE
_export_namespace
AND
NOT
${_name}
MATCHES
"^(.*)::(.*)$"
)
add_library(
${ITK_MODULE_${itk-module}_TARGETS_NAMESPACE}${_name}
ALIAS ${_name}
)
if(NOT TARGET ${_export_namespace}${_name})
add_library(${_export_namespace}${_name} ALIAS ${_name})
endif()
set_target_properties(
${_name}
PROPERTIES
EXPORT_NAME
${ITK_MODULE_${itk-module}_TARGETS_NAMESPACE}${_name}
${_export_namespace}${_name}
)
endif()
export(TARGETS ${_name} APPEND FILE ${${itk-module}-targets-build})
Expand Down Expand Up @@ -787,22 +803,44 @@ macro(itk_module_target_install _name)
)
endmacro()

macro(itk_module_target _name)
set(_install 1)
foreach(arg ${ARGN})
if("${arg}" MATCHES "^(NO_INSTALL)$")
set(_install 0)
else()
message(FATAL_ERROR "Unknown argument [${arg}]")
endif()
endforeach()
# itk_module_target(_name [NO_INSTALL] [NAMESPACE <namespace>])
#
# Function for configuring, labeling, exporting, and installing a target from an ITK module.
# This is a convenience function that calls itk_module_target_name, itk_module_target_label,
# itk_module_target_export, and optionally itk_module_target_install for a given target.
#
# This function should be called for each library or executable target created in an ITK module
# to ensure proper naming conventions, labeling, export configuration, and installation.
#
# Arguments:
# _name - The name of the target to configure (e.g., ${itk-module} for the main library)
#
# Options:
# NO_INSTALL - If specified, the target will not be installed (useful for test executables)
# NAMESPACE <namespace> - Optional namespace prefix for export. If not provided, uses
# ITK_MODULE_${itk-module}_TARGETS_NAMESPACE
#
# Example usage:
# itk_module_target(${itk-module}) # Standard library with installation
# itk_module_target(MyTestExe NO_INSTALL) # Test executable without installation
# itk_module_target(MyLib NAMESPACE "Custom::") # Library with custom namespace
function(itk_module_target _name)
cmake_parse_arguments(_target "NO_INSTALL" "NAMESPACE" "" ${ARGN})
if(_target_UNPARSED_ARGUMENTS)
message(FATAL_ERROR "Unknown arguments: ${_target_UNPARSED_ARGUMENTS}")
endif()

itk_module_target_name(${_name})
itk_module_target_label(${_name})
itk_module_target_export(${_name})
if(_install)
if(_target_NAMESPACE)
itk_module_target_export(${_name} NAMESPACE ${_target_NAMESPACE})
else()
itk_module_target_export(${_name})
endif()
if(NOT _target_NO_INSTALL)
itk_module_target_install(${_name})
endif()
endmacro()
endfunction()

# itk_module_add_library(_name LibrarySource1 LibrarySource2 ... LibrarySourceN)
#
Expand Down
43 changes: 34 additions & 9 deletions Modules/ThirdParty/GoogleTest/src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -45,12 +45,37 @@ set_property(
GTest::gtest_main
)

itk_module_target(gtest NO_INSTALL)
itk_module_target(gtest_main NO_INSTALL)

mark_as_advanced(gtest_build_samples)
mark_as_advanced(gtest_build_tests)
mark_as_advanced(gtest_disable_pthreads)
mark_as_advanced(gtest_hide_internal_symbols)
mark_as_advanced(INSTALL_GTEST)
mark_as_advanced(GTEST_HAS_ABSL)
if(NOT ITK_LEGACY_REMOVE)
# Note: CMake depricated these alias in 3.20, and are removed in 4.1.0
# Please use GTest::gtest and GTest::gtest_main for compatibilty
add_library(GTest::GTest INTERFACE IMPORTED)
add_library(GTest::Main INTERFACE IMPORTED)
Comment thread
hjmjohnson marked this conversation as resolved.
set_target_properties(
GTest::GTest
PROPERTIES
INTERFACE_LINK_LIBRARIES
GTest::gtest
DEPRECATION
"Use GTest::GTest is deprecated, use GTest::gtest instead."
)
set_target_properties(
GTest::Main
PROPERTIES
INTERFACE_LINK_LIBRARIES
GTest::gtest_main
DEPRECATION
"Use GTest::Main is deprecated, use GTest::gtest_main instead."
)
endif()

itk_module_target(gtest NO_INSTALL NAMESPACE GTest::)
itk_module_target(gtest_main NO_INSTALL NAMESPACE GTest::)

mark_as_advanced(
gtest_build_samples
gtest_build_tests
gtest_disable_pthreads
gtest_hide_internal_symbols
INSTALL_GTEST
GTEST_HAS_ABSL
)
Loading