cmake: Respect user-provided configuration-specific flags

This commit is contained in:
Hennadii Stepanov 2025-04-26 19:19:49 +01:00
parent de90b47ea0
commit 2f68531c53
No known key found for this signature in database
GPG key ID: 410108112E7EA81F
2 changed files with 11 additions and 7 deletions

View file

@ -19,6 +19,10 @@ if(POLICY CMP0171)
cmake_policy(SET CMP0171 NEW) cmake_policy(SET CMP0171 NEW)
endif() endif()
# When adjusting CMake flag variables, we must not override those explicitly
# set by the user. These are a subset of the CACHE_VARIABLES property.
get_directory_property(precious_variables CACHE_VARIABLES)
#============================= #=============================
# Project / Package metadata # Project / Package metadata
#============================= #=============================

View file

@ -106,13 +106,13 @@ endfunction()
function(replace_cxx_flag_in_config config old_flag new_flag) function(replace_cxx_flag_in_config config old_flag new_flag)
string(TOUPPER "${config}" config_uppercase) string(TOUPPER "${config}" config_uppercase)
string(REGEX REPLACE "(^| )${old_flag}( |$)" "\\1${new_flag}\\2" new_flags "${CMAKE_CXX_FLAGS_${config_uppercase}}") set(var_name CMAKE_CXX_FLAGS_${config_uppercase})
set(CMAKE_CXX_FLAGS_${config_uppercase} "${new_flags}" PARENT_SCOPE) if("${var_name}" IN_LIST precious_variables)
set(CMAKE_CXX_FLAGS_${config_uppercase} "${new_flags}" return()
CACHE STRING endif()
"Flags used by the CXX compiler during ${config_uppercase} builds." string(REGEX REPLACE "(^| )${old_flag}( |$)" "\\1${new_flag}\\2" ${var_name} "${${var_name}}")
FORCE set(${var_name} "${${var_name}}" PARENT_SCOPE)
) set_property(CACHE ${var_name} PROPERTY VALUE "${${var_name}}")
endfunction() endfunction()
set_default_config(RelWithDebInfo) set_default_config(RelWithDebInfo)