diff --git a/cmake/QtCreatorAPI.cmake b/cmake/QtCreatorAPI.cmake index c4f8d1f0a6c..7a390b1ad97 100644 --- a/cmake/QtCreatorAPI.cmake +++ b/cmake/QtCreatorAPI.cmake @@ -244,6 +244,7 @@ function(add_qtc_library name) unset(NAMELINK_OPTION) if (library_type STREQUAL "SHARED") set(NAMELINK_OPTION NAMELINK_SKIP) + qtc_add_link_flags_no_undefined(${name}) endif() unset(COMPONENT_OPTION) diff --git a/cmake/QtCreatorAPIInternal.cmake b/cmake/QtCreatorAPIInternal.cmake index d7bef93491f..5257d5bf6bb 100644 --- a/cmake/QtCreatorAPIInternal.cmake +++ b/cmake/QtCreatorAPIInternal.cmake @@ -4,6 +4,7 @@ if (CMAKE_VERSION VERSION_LESS 3.18) endif() endif() +include(CheckLinkerFlag) include(FeatureSummary) # @@ -161,6 +162,19 @@ function(qtc_enable_sanitize _sanitize_flags) set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}" PARENT_SCOPE) endfunction() +function(qtc_add_link_flags_no_undefined target) + set(no_undefined_flag "-Wl,--no-undefined") + check_linker_flag(CXX ${no_undefined_flag} QTC_LINKER_SUPPORTS_NO_UNDEFINED) + if (NOT QTC_LINKER_SUPPORTS_NO_UNDEFINED) + set(no_undefined_flag "-Wl,-undefined,error") + check_linker_flag(CXX ${no_undefined_flag} QTC_LINKER_SUPPORTS_UNDEFINED_ERROR) + if (NOT QTC_LINKER_SUPPORTS_UNDEFINED_ERROR) + return() + endif() + endif() + target_link_options("${target}" PRIVATE "${no_undefined_flag}") +endfunction() + function(append_extra_translations target_name) if(NOT ARGN) return()