@@ -77,8 +77,13 @@ function(generate_build_configurations)
7777 # Convert lists to strings for CMake variables
7878 # Append to preserve any flags set by toolchain files or CMake initialization
7979 listToString(final_compiler_flags "${DEFAULT_COMPILER_FLAGS} " "${compiler_flags} " )
80- set (CMAKE_CXX_FLAGS_${triplet_upper} "${CMAKE_CXX_FLAGS_${triplet_upper} } ${final_compiler_flags} " CACHE STRING "" FORCE)
81- set (CMAKE_C_FLAGS_${triplet_upper} "${CMAKE_C_FLAGS_${triplet_upper} } ${final_compiler_flags} " CACHE STRING "" FORCE)
80+ # Only set if not already in cache to avoid triggering rebuilds
81+ if (NOT DEFINED CMAKE_CXX_FLAGS_${triplet_upper} )
82+ set (CMAKE_CXX_FLAGS_${triplet_upper} "${final_compiler_flags} " CACHE STRING "" )
83+ endif ()
84+ if (NOT DEFINED CMAKE_C_FLAGS_${triplet_upper} )
85+ set (CMAKE_C_FLAGS_${triplet_upper} "${final_compiler_flags} " CACHE STRING "" )
86+ endif ()
8287
8388 # Combine DEFAULT_COMPILER_FLAGS with per-config flags for propagation to external consumers
8489 # This ensures both base flags (like /W3, /Zc:inline) and config-specific flags (like /O2) propagate
@@ -97,18 +102,25 @@ function(generate_build_configurations)
97102 # and add to TARGET_LINK_OPTIONS for per-config generator expressions
98103 # For single-config generators (Ninja), only set the base CMAKE flags for the active config
99104 if (is_multi_config)
100- # Append to existing flags to preserve CMake's defaults (including standard libraries)
101- set (CMAKE_EXE_LINKER_FLAGS_${triplet_upper} "${CMAKE_EXE_LINKER_FLAGS_${triplet_upper} } ${exe_linker_flags} " CACHE STRING "" FORCE)
102- set (CMAKE_SHARED_LINKER_FLAGS_${triplet_upper} "${CMAKE_SHARED_LINKER_FLAGS_${triplet_upper} } ${shared_linker_flags} " CACHE STRING "" FORCE)
105+ # Only set if not already in cache to avoid triggering rebuilds
106+ if (NOT DEFINED CMAKE_EXE_LINKER_FLAGS_${triplet_upper} )
107+ set (CMAKE_EXE_LINKER_FLAGS_${triplet_upper} "${exe_linker_flags} " CACHE STRING "" )
108+ endif ()
109+ if (NOT DEFINED CMAKE_SHARED_LINKER_FLAGS_${triplet_upper} )
110+ set (CMAKE_SHARED_LINKER_FLAGS_${triplet_upper} "${shared_linker_flags} " CACHE STRING "" )
111+ endif ()
103112 # Include default linker flags for propagation to external consumers
104113 # UE4SS is a SHARED library, so use DEFAULT_SHARED_LINKER_FLAGS (which is currently empty)
105114 # But also include DEFAULT_EXE_LINKER_FLAGS (/DEBUG:FULL) for completeness
106115 list (APPEND TARGET_LINK_OPTIONS_LOCAL "$<$<STREQUAL:$<CONFIG>,${triplet} >:${DEFAULT_EXE_LINKER_FLAGS} ;${linker_flags} >" )
107116 elseif ("${CMAKE_BUILD_TYPE} " STREQUAL "${triplet} " )
108- # For single-config, append to base flags including DEFAULT_EXE_LINKER_FLAGS
109- # Preserve CMake's defaults including standard libraries
110- set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${DEFAULT_EXE_LINKER_FLAGS} ${exe_linker_flags} " CACHE STRING "" FORCE)
111- set (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${DEFAULT_SHARED_LINKER_FLAGS} ${shared_linker_flags} " CACHE STRING "" FORCE)
117+ # For single-config, only set if not already in cache to avoid triggering rebuilds
118+ if (NOT DEFINED CMAKE_EXE_LINKER_FLAGS )
119+ set (CMAKE_EXE_LINKER_FLAGS "${DEFAULT_EXE_LINKER_FLAGS} ${exe_linker_flags} " CACHE STRING "" )
120+ endif ()
121+ if (NOT DEFINED CMAKE_SHARED_LINKER_FLAGS)
122+ set (CMAKE_SHARED_LINKER_FLAGS "${DEFAULT_SHARED_LINKER_FLAGS} ${shared_linker_flags} " CACHE STRING "" )
123+ endif ()
112124 message (STATUS "Single-config: Applied ${triplet} linker flags to base CMAKE linker flags" )
113125 # Also add to TARGET_LINK_OPTIONS for propagation to external consumers
114126 list (APPEND TARGET_LINK_OPTIONS_LOCAL "${DEFAULT_EXE_LINKER_FLAGS} " )
@@ -141,11 +153,14 @@ function(setup_build_configuration)
141153 get_property (is_multi_config GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
142154
143155 if (is_multi_config)
144- set (CMAKE_CONFIGURATION_TYPES ${BUILD_CONFIGS} CACHE STRING "" FORCE)
156+ # Only set if not already defined to avoid unnecessary cache modifications
157+ if (NOT DEFINED CMAKE_CONFIGURATION_TYPES )
158+ set (CMAKE_CONFIGURATION_TYPES ${BUILD_CONFIGS} CACHE STRING "" )
159+ endif ()
145160 else ()
146161 if (NOT CMAKE_BUILD_TYPE )
147162 message ("Defaulting to Game__Shipping__Win64" )
148- set (CMAKE_BUILD_TYPE Game__Shipping__Win64 CACHE STRING "" FORCE )
163+ set (CMAKE_BUILD_TYPE Game__Shipping__Win64 CACHE STRING "" )
149164 endif ()
150165
151166 set_property (CACHE CMAKE_BUILD_TYPE PROPERTY HELPSTRING "Choose build type" )
0 commit comments