diff --git a/cmake/OpenCVCompilerOptimizations.cmake b/cmake/OpenCVCompilerOptimizations.cmake index de34aff4dd..9377cfc0b9 100644 --- a/cmake/OpenCVCompilerOptimizations.cmake +++ b/cmake/OpenCVCompilerOptimizations.cmake @@ -714,7 +714,10 @@ macro(ocv_compiler_optimization_process_sources SOURCES_VAR_NAME LIBS_VAR_NAME T foreach(OPT ${CPU_DISPATCH_FINAL}) if(__result_${OPT}) #message("${OPT}: ${__result_${OPT}}") - if(CMAKE_GENERATOR MATCHES "^Visual") + if(CMAKE_GENERATOR MATCHES "^Visual" + OR OPENCV_CMAKE_CPU_OPTIMIZATIONS_FORCE_TARGETS + ) + # MSVS generator is not able to properly order compilation flags: # extra flags are added before common flags, so switching between optimizations doesn't work correctly # Also CMAKE_CXX_FLAGS doesn't work (it is directory-based, so add_subdirectory is required) add_library(${TARGET_BASE_NAME}_${OPT} OBJECT ${__result_${OPT}}) diff --git a/cmake/OpenCVModule.cmake b/cmake/OpenCVModule.cmake index 8b1267d951..f83ae6fec4 100644 --- a/cmake/OpenCVModule.cmake +++ b/cmake/OpenCVModule.cmake @@ -63,7 +63,6 @@ foreach(mod ${OPENCV_MODULES_BUILD} ${OPENCV_MODULES_DISABLED_USER} ${OPENCV_MOD unset(OPENCV_MODULE_${mod}_PRIVATE_OPT_DEPS CACHE) unset(OPENCV_MODULE_${mod}_LINK_DEPS CACHE) unset(OPENCV_MODULE_${mod}_WRAPPERS CACHE) - unset(OPENCV_DEPENDANT_TARGETS_${mod} CACHE) endforeach() # clean modules info which needs to be recalculated diff --git a/cmake/OpenCVUtils.cmake b/cmake/OpenCVUtils.cmake index a876d9c02c..b61a301b6e 100644 --- a/cmake/OpenCVUtils.cmake +++ b/cmake/OpenCVUtils.cmake @@ -288,9 +288,22 @@ function(ocv_append_target_property target prop) endif() endfunction() +if(DEFINED OPENCV_DEPENDANT_TARGETS_LIST) + foreach(v ${OPENCV_DEPENDANT_TARGETS_LIST}) + unset(${v} CACHE) + endforeach() + unset(OPENCV_DEPENDANT_TARGETS_LIST CACHE) +endif() + function(ocv_append_dependant_targets target) #ocv_debug_message("ocv_append_dependant_targets(${target} ${ARGN})") _ocv_fix_target(target) + list(FIND OPENCV_DEPENDANT_TARGETS_LIST "OPENCV_DEPENDANT_TARGETS_${target}" __id) + if(__id EQUAL -1) + list(APPEND OPENCV_DEPENDANT_TARGETS_LIST "OPENCV_DEPENDANT_TARGETS_${target}") + list(SORT OPENCV_DEPENDANT_TARGETS_LIST) + set(OPENCV_DEPENDANT_TARGETS_LIST "${OPENCV_DEPENDANT_TARGETS_LIST}" CACHE INTERNAL "") + endif() set(OPENCV_DEPENDANT_TARGETS_${target} "${OPENCV_DEPENDANT_TARGETS_${target}};${ARGN}" CACHE INTERNAL "" FORCE) endfunction()