Why not create an OBJECT library with the common sources and then create two (or more) executables via:
add_library(my_app_common OBJECT ${COMMON_SOURCES})
add_executable(product0 settings0.c $<TARGET_OBJECTS:my_app_common>)
add_executable(product1 settings1.c $<TARGET_OBJECTS:my_app_common>)
You would still have to compile once for each of Debug and Release (or any other configuration like RelWithDebInfo), but you would have to do that anyway if you want the different configurations to apply to the common sources, too.