mirror of
https://github.com/opencv/opencv.git
synced 2024-11-24 19:20:28 +08:00
Merge pull request #10299 from alalek:cmake_imported_configuration_remap
This commit is contained in:
commit
a4b5eabccf
@ -126,6 +126,50 @@ if(NOT CMAKE_VERSION VERSION_LESS "2.8.11")
|
||||
endforeach()
|
||||
endif()
|
||||
|
||||
|
||||
if(NOT DEFINED OPENCV_MAP_IMPORTED_CONFIG)
|
||||
if(CMAKE_GENERATOR MATCHES "Visual Studio" OR MSVC)
|
||||
# OpenCV supports Debug and Release builds only.
|
||||
# But MSVS has 'RelWithDebInfo' 'MinSizeRel' configurations for applications.
|
||||
# By default CMake maps these configuration on the first available (Debug) which is wrong.
|
||||
# Non-Debug build of Application can't be used with OpenCV Debug build (ABI mismatch problem)
|
||||
# Add mapping of RelWithDebInfo and MinSizeRel to Release here
|
||||
set(OPENCV_MAP_IMPORTED_CONFIG "RELWITHDEBINFO=!Release;MINSIZEREL=!Release")
|
||||
endif()
|
||||
endif()
|
||||
set(__remap_warnings "")
|
||||
macro(ocv_map_imported_config target)
|
||||
if(DEFINED OPENCV_MAP_IMPORTED_CONFIG) # list, "RELWITHDEBINFO=Release;MINSIZEREL=Release"
|
||||
get_target_property(__available_configurations ${target} IMPORTED_CONFIGURATIONS)
|
||||
foreach(remap ${OPENCV_MAP_IMPORTED_CONFIG})
|
||||
if(remap MATCHES "^(.+)=(!?)([^!]+)$")
|
||||
set(__remap_config "${CMAKE_MATCH_1}")
|
||||
set(__final_config "${CMAKE_MATCH_3}")
|
||||
set(__force_flag "${CMAKE_MATCH_2}")
|
||||
string(TOUPPER "${__final_config}" __final_config_upper)
|
||||
string(TOUPPER "${__remap_config}" __remap_config_upper)
|
||||
if(";${__available_configurations};" MATCHES ";${__remap_config_upper};" AND NOT "${__force_flag}" STREQUAL "!")
|
||||
# configuration already exists, skip remap
|
||||
set(__remap_warnings "${__remap_warnings}... Configuration already exists ${__remap_config} (skip mapping ${__remap_config} => ${__final_config}) (available configurations: ${__available_configurations})\n")
|
||||
continue()
|
||||
endif()
|
||||
if(__available_configurations AND NOT ";${__available_configurations};" MATCHES ";${__final_config_upper};")
|
||||
# skip, configuration is not available
|
||||
if(NOT "${__force_flag}" STREQUAL "!")
|
||||
set(__remap_warnings "${__remap_warnings}... Configuration is not available '${__final_config}' for ${target}, build may fail (available configurations: ${__available_configurations})\n")
|
||||
endif()
|
||||
endif()
|
||||
set_target_properties(${target} PROPERTIES
|
||||
MAP_IMPORTED_CONFIG_${__remap_config} "${__final_config}"
|
||||
)
|
||||
else()
|
||||
message(WARNING "Invalid entry of OPENCV_MAP_IMPORTED_CONFIG: '${remap}' (${OPENCV_MAP_IMPORTED_CONFIG})")
|
||||
endif()
|
||||
endforeach()
|
||||
endif()
|
||||
endmacro()
|
||||
|
||||
|
||||
# ==============================================================
|
||||
# Form list of modules (components) to find
|
||||
# ==============================================================
|
||||
@ -199,16 +243,15 @@ foreach(__cvcomponent ${OpenCV_FIND_COMPONENTS})
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
# OpenCV supports Debug and Release only.
|
||||
# RelWithDebInfo and MinSizeRel are mapped to Release
|
||||
if(TARGET ${__cvcomponent})
|
||||
set_target_properties(${__cvcomponent} PROPERTIES
|
||||
MAP_IMPORTED_CONFIG_MINSIZEREL "Release"
|
||||
MAP_IMPORTED_CONFIG_RELWITHDEBINFO "Release"
|
||||
)
|
||||
ocv_map_imported_config(${__cvcomponent})
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
if(__remap_warnings AND NOT OpenCV_FIND_QUIETLY)
|
||||
message("OpenCV: configurations remap warnings:\n${__remap_warnings}OpenCV: Check variable OPENCV_MAP_IMPORTED_CONFIG=${OPENCV_MAP_IMPORTED_CONFIG}")
|
||||
endif()
|
||||
|
||||
# ==============================================================
|
||||
# Compatibility stuff
|
||||
# ==============================================================
|
||||
|
Loading…
Reference in New Issue
Block a user